Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ses7q-00DNWV-Fd for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Aug 2024 08:15:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ses6r-003jkb-43 for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Aug 2024 08:14:57 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1ses6q-003jkN-H0 for pgsql-hackers@lists.postgresql.org; Fri, 16 Aug 2024 08:14:56 +0000 Received: from mail-yw1-x1135.google.com ([2607:f8b0:4864:20::1135]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1ses6o-0057X9-Eg for pgsql-hackers@lists.postgresql.org; Fri, 16 Aug 2024 08:14:55 +0000 Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-65fe1239f12so17664877b3.0 for ; Fri, 16 Aug 2024 01:14:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1723796092; x=1724400892; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6YS46lksyDQI0lK+JPkfmS2vvWDtzELtKfBM8JpbmPY=; b=eQyhLu7525wl8VZ1Ncxzyfn3df7BkNa37qDSoKXrHLwi130fvjdBXVst0yBbcSEDcX veLPZnyQZ4Cj0RLS4PyIw9mHOrMFY4nomBVnTs3sBgOXNBdRQIhV3LYg/s0L0XNxWNZ+ xfkWTa4MDm1sMdc3Q+OyLcy3+257sBeIzCgb4CDt2y/2sP1tCx44p8iY4Pt4thW03Rpo oHKc34ebnF6Fx+DAfUu16j+89Qq8kDwx+hx0Mq3MKV91U5DIWUJmUy+WCl+1IGyhoNGB tHf7flTthixkNeQ0X5Ex6B8EL83I8cMMzhqbGiKE+hTM7kRkgwVvWMz9Di3KuHqhROe8 /S1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723796092; x=1724400892; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6YS46lksyDQI0lK+JPkfmS2vvWDtzELtKfBM8JpbmPY=; b=CiGPrcxUZvTPorp/tWYiFeYfvaQCuxx5RVotE6bgMOKDTkoOtx6Jk1HiPeOURbbRTD TWLZuq6gggCAFUgE8DM0YX4kJQWpFYQ92xE9R6ZfLLkezDSpNqjDtE+IXlI5RgoiF4Pb FxleqsY0X1zxsLKZ6hU1LEoYrX/dZOOtgx2QcPEhqLFE8bECoqPg9v070I3tBPFagsFO 6LZTB9uW9Aa1/AIG2eUj2xEJN0OYSCmzvCqx+bUfNmRGZvrULoVsR0pSad6K2pagQX/y iKjcsX4X+l2ZLvegc2eUm/smtqv2XJCYs9JVB/EHjfhQDByKLV7uoXvtlz092ItAT2Ys ZQ8Q== X-Forwarded-Encrypted: i=1; AJvYcCXB3qr6Cb3ENTg8WTEi+0LPwxrj5TrTmv4ANXoc6a13FrEdL4Wj3ojFcscMjwE3eamyVOEfE3Q4cBgLouL59LctX2NUCoz9mVEzHJKDwJhENdr/ X-Gm-Message-State: AOJu0YxO36wmhCQjiyX9HmKaZA1tHrhVh8EqsfLK0teUhtsybXvFxHOD 1EhhQbgmVM4XuoYLYH0D4XOSBa2CT4jhxeRKgjNkx94TGohWYdzVDWOVURXlTmlbnNu0plhlQ+R yjULpgaD2+uqzv7PEci8YdFb3pCs= X-Google-Smtp-Source: AGHT+IF1cwKvWvZYPdEO16xHDqdM8orBdbS/FNvGiWp5fRIrL0WAdQ+UdpWXtGOwFDSUy8vvMHV4Qui4Op09SrFEXx4= X-Received: by 2002:a05:690c:2f0b:b0:61b:3364:d193 with SMTP id 00721157ae682-6b1bb570dd9mr19427167b3.40.1723796092342; Fri, 16 Aug 2024 01:14:52 -0700 (PDT) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: From: Richard Guo Date: Fri, 16 Aug 2024 16:14:41 +0800 Message-ID: Subject: Re: Eager aggregation, take 3 To: Paul George Cc: Andy Fan , PostgreSQL-development , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000c0427e061fc88d7d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c0427e061fc88d7d Content-Type: text/plain; charset="UTF-8" I had a self-review of this patchset and made some refactoring, especially to the function that creates the RelAggInfo structure for a given relation. While there were no major changes, the code should now be simpler. Attached is the updated version of the patchset. Previously, the patchset was not well-split, which made it time-consuming to distribute the changes across the patches during the refactoring. So I squashed them into two patches to save effort. Thanks Richard --000000000000c0427e061fc88d7d Content-Type: application/octet-stream; name="v10-0001-Introduce-RelInfoList-structure.patch" Content-Disposition: attachment; filename="v10-0001-Introduce-RelInfoList-structure.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lzwfn5910 RnJvbSA0ZWY4OTY5M2NjMzc2YThkMTZiNDBiZjQwMzcxMmI1YWQxNzE0NzFjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNTo1OToxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEw IDEvMl0gSW50cm9kdWNlIFJlbEluZm9MaXN0IHN0cnVjdHVyZQoKVGhpcyBjb21taXQgaW50cm9k dWNlcyB0aGUgUmVsSW5mb0xpc3Qgc3RydWN0dXJlLCB3aGljaCBlbmNhcHN1bGF0ZXMKYm90aCBh IGxpc3QgYW5kIGEgaGFzaCB0YWJsZSwgc28gdGhhdCB3ZSBjYW4gbGV2ZXJhZ2UgdGhlIGhhc2gg dGFibGUgZm9yCmZhc3RlciBsb29rdXBzIG5vdCBvbmx5IGZvciBqb2luIHJlbGF0aW9ucyBidXQg YWxzbyBmb3IgdXBwZXIgcmVsYXRpb25zLgotLS0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jICAgIHwgICAzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2 YWwuYyB8ICAyMCArLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgIHwg ICA3ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICB8ICAgNSArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jICAgfCAxNjQgKysrKysrKysrKysr KystLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgfCAg MzIgKysrLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgIHwgICAzICst CiA3IGZpbGVzIGNoYW5nZWQsIDEzNiBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IGZjNjVkODFlMjEuLmJlNDAzOGY2NGYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC02MDc5LDcgKzYwNzksOCBAQCBm b3JlaWduX2pvaW5fb2soUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsIEpv aW5UeXBlIGpvaW50eXBlLAogCSAqLwogCUFzc2VydChmcGluZm8tPnJlbGF0aW9uX2luZGV4ID09 IDApOwkvKiBzaG91bGRuJ3QgYmUgc2V0IHlldCAqLwogCWZwaW5mby0+cmVsYXRpb25faW5kZXgg PQotCQlsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSArIGxpc3RfbGVuZ3RoKHJvb3Qt PmpvaW5fcmVsX2xpc3QpOworCQlsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKSArCisJ CWxpc3RfbGVuZ3RoKHJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zKTsKIAogCXJldHVybiB0cnVl OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYwppbmRleCBkMmY3ZjRlNWYz Li4xMTQxMTU2ODk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFv X2V2YWwuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYwpAQCAt ODUsMTggKzg1LDE4IEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwg aW50IG51bV9nZW5lKQogCSAqIHRydW5jYXRpbmcgdGhlIGxpc3QgdG8gaXRzIG9yaWdpbmFsIGxl bmd0aC4gIE5PVEUgdGhpcyBhc3N1bWVzIHRoYXQgYW55CiAJICogYWRkZWQgZW50cmllcyBhcmUg YXBwZW5kZWQgYXQgdGhlIGVuZCEKIAkgKgotCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUgbm90 IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5fcmVsX2hhc2gsIGlmIHRoZXJlCi0JICogaXMgb25l LiAgV2UgY2FuIGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseSBzZXR0aW5nIHRoZSBsaW5rIHRv IE5VTEwuCi0JICogKElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywgd2hp Y2ggd2UgdmVyeSBsaWtlbHkgYXJlLCBhCi0JICogbmV3IGhhc2ggdGFibGUgd2lsbCBnZXQgYnVp bHQgYW5kIHVzZWQgbG9jYWxseS4pCisJICogV2UgYWxzbyBtdXN0IHRha2UgY2FyZSBub3QgdG8g bWVzcyB1cCB0aGUgb3V0ZXIgam9pbl9yZWxfbGlzdC0+aGFzaCwgaWYKKwkgKiB0aGVyZSBpcyBv bmUuICBXZSBjYW4gZG8gdGhpcyBieSBqdXN0IHRlbXBvcmFyaWx5IHNldHRpbmcgdGhlIGxpbmsg dG8KKwkgKiBOVUxMLiAgKElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywg d2hpY2ggd2UgdmVyeSBsaWtlbHkKKwkgKiBhcmUsIGEgbmV3IGhhc2ggdGFibGUgd2lsbCBnZXQg YnVpbHQgYW5kIHVzZWQgbG9jYWxseS4pCiAJICoKIAkgKiBqb2luX3JlbF9sZXZlbFtdIHNob3Vs ZG4ndCBiZSBpbiB1c2UsIHNvIGp1c3QgQXNzZXJ0IGl0IGlzbid0LgogCSAqLwotCXNhdmVsZW5n dGggPSBsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0KTsKLQlzYXZlaGFzaCA9IHJvb3Qt PmpvaW5fcmVsX2hhc2g7CisJc2F2ZWxlbmd0aCA9IGxpc3RfbGVuZ3RoKHJvb3QtPmpvaW5fcmVs X2xpc3QtPml0ZW1zKTsKKwlzYXZlaGFzaCA9IHJvb3QtPmpvaW5fcmVsX2xpc3QtPmhhc2g7CiAJ QXNzZXJ0KHJvb3QtPmpvaW5fcmVsX2xldmVsID09IE5VTEwpOwogCi0Jcm9vdC0+am9pbl9yZWxf aGFzaCA9IE5VTEw7CisJcm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CiAKIAkvKiBj b25zdHJ1Y3QgdGhlIGJlc3QgcGF0aCBmb3IgdGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIHJlbGF0 aW9ucyAqLwogCWpvaW5yZWwgPSBnaW1tZV90cmVlKHJvb3QsIHRvdXIsIG51bV9nZW5lKTsKQEAg LTEyMSw5ICsxMjEsOSBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUgKnRvdXIs IGludCBudW1fZ2VuZSkKIAkgKiBSZXN0b3JlIGpvaW5fcmVsX2xpc3QgdG8gaXRzIGZvcm1lciBz dGF0ZSwgYW5kIHB1dCBiYWNrIG9yaWdpbmFsCiAJICogaGFzaHRhYmxlIGlmIGFueS4KIAkgKi8K LQlyb290LT5qb2luX3JlbF9saXN0ID0gbGlzdF90cnVuY2F0ZShyb290LT5qb2luX3JlbF9saXN0 LAotCQkJCQkJCQkJCXNhdmVsZW5ndGgpOwotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBzYXZlaGFz aDsKKwlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+am9p bl9yZWxfbGlzdC0+aXRlbXMsCisJCQkJCQkJCQkJCSAgIHNhdmVsZW5ndGgpOworCXJvb3QtPmpv aW5fcmVsX2xpc3QtPmhhc2ggPSBzYXZlaGFzaDsKIAogCS8qIHJlbGVhc2UgYWxsIHRoZSBtZW1v cnkgYWNxdWlyZWQgd2l0aGluIGdpbW1lX3RyZWUgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDA1N2I0Yjc5 ZWIuLmI1NTBlNzA3YTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt MzQxMCw5ICszNDEwLDEwIEBAIG1ha2VfcmVsX2Zyb21fam9pbmxpc3QoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmpvaW5saXN0KQogICogbmVlZGVkIGZvciB0aGVzZSBwYXRocyBuZWVkIGhhdmUg YmVlbiBpbnN0YW50aWF0ZWQuCiAgKgogICogTm90ZSB0byBwbHVnaW4gYXV0aG9yczogdGhlIGZ1 bmN0aW9ucyBpbnZva2VkIGR1cmluZyBzdGFuZGFyZF9qb2luX3NlYXJjaCgpCi0gKiBtb2RpZnkg cm9vdC0+am9pbl9yZWxfbGlzdCBhbmQgcm9vdC0+am9pbl9yZWxfaGFzaC4gIElmIHlvdSB3YW50 IHRvIGRvIG1vcmUKLSAqIHRoYW4gb25lIGpvaW4tb3JkZXIgc2VhcmNoLCB5b3UnbGwgcHJvYmFi bHkgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIHRoZQotICogb3JpZ2luYWwgc3RhdGVzIG9mIHRo b3NlIGRhdGEgc3RydWN0dXJlcy4gIFNlZSBnZXFvX2V2YWwoKSBmb3IgYW4gZXhhbXBsZS4KKyAq IG1vZGlmeSByb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyBhbmQgcm9vdC0+am9pbl9yZWxfbGlz dC0+aGFzaC4gIElmIHlvdQorICogd2FudCB0byBkbyBtb3JlIHRoYW4gb25lIGpvaW4tb3JkZXIg c2VhcmNoLCB5b3UnbGwgcHJvYmFibHkgbmVlZCB0byBzYXZlIGFuZAorICogcmVzdG9yZSB0aGUg b3JpZ2luYWwgc3RhdGVzIG9mIHRob3NlIGRhdGEgc3RydWN0dXJlcy4gIFNlZSBnZXFvX2V2YWwo KSBmb3IKKyAqIGFuIGV4YW1wbGUuCiAgKi8KIFJlbE9wdEluZm8gKgogc3RhbmRhcmRfam9pbl9z ZWFyY2goUGxhbm5lckluZm8gKnJvb3QsIGludCBsZXZlbHNfbmVlZGVkLCBMaXN0ICppbml0aWFs X3JlbHMpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwppbmRleCBlMTdkMzFhNWMz Li5mZDhiMmIwY2EzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKQEAgLTY0 LDggKzY0LDkgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwKIAkgKiBOT1RFOiBh cHBlbmRfcmVsX2xpc3Qgd2FzIHNldCB1cCBieSBzdWJxdWVyeV9wbGFubmVyLCBzbyBkbyBub3Qg dG91Y2gKIAkgKiBoZXJlLgogCSAqLwotCXJvb3QtPmpvaW5fcmVsX2xpc3QgPSBOSUw7Ci0Jcm9v dC0+am9pbl9yZWxfaGFzaCA9IE5VTEw7CisJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VOb2Rl KFJlbEluZm9MaXN0KTsKKwlyb290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKKwlyb290 LT5qb2luX3JlbF9saXN0LT5oYXNoID0gTlVMTDsKIAlyb290LT5qb2luX3JlbF9sZXZlbCA9IE5V TEw7CiAJcm9vdC0+am9pbl9jdXJfbGV2ZWwgPSAwOwogCXJvb3QtPmNhbm9uX3BhdGhrZXlzID0g TklMOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4IGQ3MjY2ZTRjZGIuLjc2 ZTEzOTcxZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTM1LDExICsz NSwxNSBAQAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCiAKLXR5cGVkZWYgc3RydWN0 IEpvaW5IYXNoRW50cnkKKy8qCisgKiBBbiBlbnRyeSBvZiBhIGhhc2ggdGFibGUgdGhhdCB3ZSB1 c2UgdG8gbWFrZSBsb29rdXAgZm9yIFJlbE9wdEluZm8KKyAqIHN0cnVjdHVyZXMgbW9yZSBlZmZp Y2llbnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJlbEluZm9FbnRyeQogewotCVJlbGlkcwkJam9p bl9yZWxpZHM7CS8qIGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCi0JUmVsT3B0SW5mbyAq am9pbl9yZWw7Ci19IEpvaW5IYXNoRW50cnk7CisJUmVsaWRzCQlyZWxpZHM7CQkJLyogaGFzaCBr ZXkgLS0tIE1VU1QgQkUgRklSU1QgKi8KKwlSZWxPcHRJbmZvICpyZWw7Cit9IFJlbEluZm9FbnRy eTsKIAogc3RhdGljIHZvaWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqam9pbnJlbCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLApAQCAt NDc5LDExICs0ODMsMTEgQEAgZmluZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5mbyAq cm9vdCwgaW50IHJlbGlkKQogfQogCiAvKgotICogYnVpbGRfam9pbl9yZWxfaGFzaAotICoJICBD b25zdHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRhYmxlIGZvciBqb2luIHJlbGF0aW9ucy4KKyAq IGJ1aWxkX3JlbF9oYXNoCisgKgkgIENvbnN0cnVjdCB0aGUgYXV4aWxpYXJ5IGhhc2ggdGFibGUg Zm9yIHJlbGF0aW9ucy4KICAqLwogc3RhdGljIHZvaWQKLWJ1aWxkX2pvaW5fcmVsX2hhc2goUGxh bm5lckluZm8gKnJvb3QpCitidWlsZF9yZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKIHsKIAlI VEFCCSAgICpoYXNodGFiOwogCUhBU0hDVEwJCWhhc2hfY3RsOwpAQCAtNDkxLDQ3ICs0OTUsNDkg QEAgYnVpbGRfam9pbl9yZWxfaGFzaChQbGFubmVySW5mbyAqcm9vdCkKIAogCS8qIENyZWF0ZSB0 aGUgaGFzaCB0YWJsZSAqLwogCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoUmVsaWRzKTsKLQlo YXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2YoSm9pbkhhc2hFbnRyeSk7CisJaGFzaF9jdGwuZW50 cnlzaXplID0gc2l6ZW9mKFJlbEluZm9FbnRyeSk7CiAJaGFzaF9jdGwuaGFzaCA9IGJpdG1hcF9o YXNoOwogCWhhc2hfY3RsLm1hdGNoID0gYml0bWFwX21hdGNoOwogCWhhc2hfY3RsLmhjeHQgPSBD dXJyZW50TWVtb3J5Q29udGV4dDsKLQloYXNodGFiID0gaGFzaF9jcmVhdGUoIkpvaW5SZWxIYXNo VGFibGUiLAorCWhhc2h0YWIgPSBoYXNoX2NyZWF0ZSgiUmVsSGFzaFRhYmxlIiwKIAkJCQkJCSAg MjU2TCwKIAkJCQkJCSAgJmhhc2hfY3RsLAogCQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0ZVTkNU SU9OIHwgSEFTSF9DT01QQVJFIHwgSEFTSF9DT05URVhUKTsKIAotCS8qIEluc2VydCBhbGwgdGhl IGFscmVhZHktZXhpc3Rpbmcgam9pbnJlbHMgKi8KLQlmb3JlYWNoKGwsIHJvb3QtPmpvaW5fcmVs X2xpc3QpCisJLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyByZWxhdGlvbnMgKi8K Kwlmb3JlYWNoKGwsIGxpc3QtPml0ZW1zKQogCXsKIAkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9w dEluZm8gKikgbGZpcnN0KGwpOwotCQlKb2luSGFzaEVudHJ5ICpoZW50cnk7CisJCVJlbEluZm9F bnRyeSAqaGVudHJ5OwogCQlib29sCQlmb3VuZDsKIAotCQloZW50cnkgPSAoSm9pbkhhc2hFbnRy eSAqKSBoYXNoX3NlYXJjaChoYXNodGFiLAotCQkJCQkJCQkJCQkgICAmKHJlbC0+cmVsaWRzKSwK LQkJCQkJCQkJCQkJICAgSEFTSF9FTlRFUiwKLQkJCQkJCQkJCQkJICAgJmZvdW5kKTsKKwkJaGVu dHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChoYXNodGFiLAorCQkJCQkJCQkJCQkg ICYocmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgIEhBU0hfRU5URVIsCisJCQkJCQkJCQkJCSAg JmZvdW5kKTsKIAkJQXNzZXJ0KCFmb3VuZCk7Ci0JCWhlbnRyeS0+am9pbl9yZWwgPSByZWw7CisJ CWhlbnRyeS0+cmVsID0gcmVsOwogCX0KIAotCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBoYXNodGFi OworCWxpc3QtPmhhc2ggPSBoYXNodGFiOwogfQogCiAvKgotICogZmluZF9qb2luX3JlbAotICoJ ICBSZXR1cm5zIHJlbGF0aW9uIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gJ3JlbGlkcycgKGEgc2V0 IG9mIFJUIGluZGV4ZXMpLAotICoJICBvciBOVUxMIGlmIG5vbmUgZXhpc3RzLiAgVGhpcyBpcyBm b3Igam9pbiByZWxhdGlvbnMuCisgKiBmaW5kX3JlbF9pbmZvCisgKgkgIEZpbmQgYW4gUmVsT3B0 SW5mbyBlbnRyeS4KICAqLwotUmVsT3B0SW5mbyAqCi1maW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxpZHMgcmVsaWRzKQorc3RhdGljIFJlbE9wdEluZm8gKgorZmluZF9yZWxfaW5m byhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykKIHsKKwlpZiAobGlzdCA9PSBOVUxM KQorCQlyZXR1cm4gTlVMTDsKKwogCS8qCiAJICogU3dpdGNoIHRvIHVzaW5nIGhhc2ggbG9va3Vw IHdoZW4gbGlzdCBncm93cyAidG9vIGxvbmciLiAgVGhlIHRocmVzaG9sZAogCSAqIGlzIGFyYml0 cmFyeSBhbmQgaXMga25vd24gb25seSBoZXJlLgogCSAqLwotCWlmICghcm9vdC0+am9pbl9yZWxf aGFzaCAmJiBsaXN0X2xlbmd0aChyb290LT5qb2luX3JlbF9saXN0KSA+IDMyKQotCQlidWlsZF9q b2luX3JlbF9oYXNoKHJvb3QpOworCWlmICghbGlzdC0+aGFzaCAmJiBsaXN0X2xlbmd0aChsaXN0 LT5pdGVtcykgPiAzMikKKwkJYnVpbGRfcmVsX2hhc2gobGlzdCk7CiAKIAkvKgogCSAqIFVzZSBl aXRoZXIgaGFzaHRhYmxlIGxvb2t1cCBvciBsaW5lYXIgc2VhcmNoLCBhcyBhcHByb3ByaWF0ZS4K QEAgLTU0MSwyMyArNTQ3LDIzIEBAIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJl bGlkcyByZWxpZHMpCiAJICogc28gd291bGQgZm9yY2UgcmVsaWRzIG91dCBvZiBhIHJlZ2lzdGVy IGFuZCB0aHVzIHByb2JhYmx5IHNsb3cgZG93biB0aGUKIAkgKiBsaXN0LXNlYXJjaCBjYXNlLgog CSAqLwotCWlmIChyb290LT5qb2luX3JlbF9oYXNoKQorCWlmIChsaXN0LT5oYXNoKQogCXsKIAkJ UmVsaWRzCQloYXNoa2V5ID0gcmVsaWRzOwotCQlKb2luSGFzaEVudHJ5ICpoZW50cnk7CisJCVJl bEluZm9FbnRyeSAqaGVudHJ5OwogCi0JCWhlbnRyeSA9IChKb2luSGFzaEVudHJ5ICopIGhhc2hf c2VhcmNoKHJvb3QtPmpvaW5fcmVsX2hhc2gsCi0JCQkJCQkJCQkJCSAgICZoYXNoa2V5LAotCQkJ CQkJCQkJCQkgICBIQVNIX0ZJTkQsCi0JCQkJCQkJCQkJCSAgIE5VTEwpOworCQloZW50cnkgPSAo UmVsSW5mb0VudHJ5ICopIGhhc2hfc2VhcmNoKGxpc3QtPmhhc2gsCisJCQkJCQkJCQkJCSAgJmhh c2hrZXksCisJCQkJCQkJCQkJCSAgSEFTSF9GSU5ELAorCQkJCQkJCQkJCQkgIE5VTEwpOwogCQlp ZiAoaGVudHJ5KQotCQkJcmV0dXJuIGhlbnRyeS0+am9pbl9yZWw7CisJCQlyZXR1cm4gaGVudHJ5 LT5yZWw7CiAJfQogCWVsc2UKIAl7CiAJCUxpc3RDZWxsICAgKmw7CiAKLQkJZm9yZWFjaChsLCBy b290LT5qb2luX3JlbF9saXN0KQorCQlmb3JlYWNoKGwsIGxpc3QtPml0ZW1zKQogCQl7CiAJCQlS ZWxPcHRJbmZvICpyZWwgPSAoUmVsT3B0SW5mbyAqKSBsZmlyc3QobCk7CiAKQEAgLTU2OSw2ICs1 NzUsNTQgQEAgZmluZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcykK IAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIGZpbmRfam9pbl9yZWwKKyAqCSAgUmV0dXJucyBy ZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMnIChhIHNldCBvZiBSVCBpbmRl eGVzKSwKKyAqCSAgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRoaXMgaXMgZm9yIGpvaW4gcmVs YXRpb25zLgorICovCitSZWxPcHRJbmZvICoKK2ZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbGlkcyByZWxpZHMpCit7CisJcmV0dXJuIGZpbmRfcmVsX2luZm8ocm9vdC0+am9pbl9y ZWxfbGlzdCwgcmVsaWRzKTsKK30KKworLyoKKyAqIGFkZF9yZWxfaW5mbworICoJCUFkZCBnaXZl biByZWxhdGlvbiB0byB0aGUgZ2l2ZW4gbGlzdC4gQWxzbyBhZGQgaXQgdG8gdGhlIGF1eGlsaWFy eQorICoJCWhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuCisgKi8KK3N0YXRpYyB2b2lkCithZGRf cmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwkvKiBHRVFP IHJlcXVpcmVzIHVzIHRvIGFwcGVuZCB0aGUgbmV3IHJlbGF0aW9uIHRvIHRoZSBlbmQgb2YgdGhl IGxpc3QhICovCisJbGlzdC0+aXRlbXMgPSBsYXBwZW5kKGxpc3QtPml0ZW1zLCByZWwpOworCisJ Lyogc3RvcmUgaXQgaW50byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUu ICovCisJaWYgKGxpc3QtPmhhc2gpCisJeworCQlSZWxJbmZvRW50cnkgKmhlbnRyeTsKKwkJYm9v bAkJZm91bmQ7CisKKwkJaGVudHJ5ID0gKFJlbEluZm9FbnRyeSAqKSBoYXNoX3NlYXJjaChsaXN0 LT5oYXNoLAorCQkJCQkJCQkJCQkgICYocmVsLT5yZWxpZHMpLAorCQkJCQkJCQkJCQkgIEhBU0hf RU5URVIsCisJCQkJCQkJCQkJCSAgJmZvdW5kKTsKKwkJQXNzZXJ0KCFmb3VuZCk7CisJCWhlbnRy eS0+cmVsID0gcmVsOworCX0KK30KKworLyoKKyAqIGFkZF9qb2luX3JlbAorICoJCUFkZCBnaXZl biBqb2luIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIGpvaW4gcmVsYXRpb25zIGluIHRoZSBnaXZl bgorICoJCVBsYW5uZXJJbmZvLgorICovCitzdGF0aWMgdm9pZAorYWRkX2pvaW5fcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsKQoreworCWFkZF9yZWxfaW5mbyhyb290 LT5qb2luX3JlbF9saXN0LCBqb2lucmVsKTsKK30KKwogLyoKICAqIHNldF9mb3JlaWduX3JlbF9w cm9wZXJ0aWVzCiAgKgkJU2V0IHVwIGZvcmVpZ24tam9pbiBmaWVsZHMgaWYgb3V0ZXIgYW5kIGlu bmVyIHJlbGF0aW9uIGFyZSBmb3JlaWduCkBAIC02MTgsMzIgKzY3Miw2IEBAIHNldF9mb3JlaWdu X3JlbF9wcm9wZXJ0aWVzKFJlbE9wdEluZm8gKmpvaW5yZWwsIFJlbE9wdEluZm8gKm91dGVyX3Jl bCwKIAl9CiB9CiAKLS8qCi0gKiBhZGRfam9pbl9yZWwKLSAqCQlBZGQgZ2l2ZW4gam9pbiByZWxh dGlvbiB0byB0aGUgbGlzdCBvZiBqb2luIHJlbGF0aW9ucyBpbiB0aGUgZ2l2ZW4KLSAqCQlQbGFu bmVySW5mby4gQWxzbyBhZGQgaXQgdG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUg aXMgb25lLgotICovCi1zdGF0aWMgdm9pZAotYWRkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpqb2lucmVsKQotewotCS8qIEdFUU8gcmVxdWlyZXMgdXMgdG8gYXBwZW5k IHRoZSBuZXcgam9pbnJlbCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0ISAqLwotCXJvb3QtPmpvaW5f cmVsX2xpc3QgPSBsYXBwZW5kKHJvb3QtPmpvaW5fcmVsX2xpc3QsIGpvaW5yZWwpOwotCi0JLyog c3RvcmUgaXQgaW50byB0aGUgYXV4aWxpYXJ5IGhhc2h0YWJsZSBpZiB0aGVyZSBpcyBvbmUuICov Ci0JaWYgKHJvb3QtPmpvaW5fcmVsX2hhc2gpCi0JewotCQlKb2luSGFzaEVudHJ5ICpoZW50cnk7 Ci0JCWJvb2wJCWZvdW5kOwotCi0JCWhlbnRyeSA9IChKb2luSGFzaEVudHJ5ICopIGhhc2hfc2Vh cmNoKHJvb3QtPmpvaW5fcmVsX2hhc2gsCi0JCQkJCQkJCQkJCSAgICYoam9pbnJlbC0+cmVsaWRz KSwKLQkJCQkJCQkJCQkJICAgSEFTSF9FTlRFUiwKLQkJCQkJCQkJCQkJICAgJmZvdW5kKTsKLQkJ QXNzZXJ0KCFmb3VuZCk7Ci0JCWhlbnRyeS0+am9pbl9yZWwgPSBqb2lucmVsOwotCX0KLX0KLQog LyoKICAqIGJ1aWxkX2pvaW5fcmVsCiAgKgkgIFJldHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVz cG9uZGluZyB0byB0aGUgdW5pb24gb2YgdHdvIGdpdmVuIHJlbHMsCkBAIC0xNDU3LDIyICsxNDg1 LDE0IEBAIHN1YmJ1aWxkX2pvaW5yZWxfam9pbmxpc3QoUmVsT3B0SW5mbyAqam9pbnJlbCwKIFJl bE9wdEluZm8gKgogZmV0Y2hfdXBwZXJfcmVsKFBsYW5uZXJJbmZvICpyb290LCBVcHBlclJlbGF0 aW9uS2luZCBraW5kLCBSZWxpZHMgcmVsaWRzKQogeworCVJlbEluZm9MaXN0ICpsaXN0ID0gJnJv b3QtPnVwcGVyX3JlbHNba2luZF07CiAJUmVsT3B0SW5mbyAqdXBwZXJyZWw7Ci0JTGlzdENlbGwg ICAqbGM7Ci0KLQkvKgotCSAqIEZvciB0aGUgbW9tZW50LCBvdXIgaW5kZXhpbmcgZGF0YSBzdHJ1 Y3R1cmUgaXMganVzdCBhIExpc3QgZm9yIGVhY2gKLQkgKiByZWxhdGlvbiBraW5kLiAgSWYgd2Ug ZXZlciBnZXQgc28gbWFueSBvZiBvbmUga2luZCB0aGF0IHRoaXMgc3RvcHMKLQkgKiB3b3JraW5n IHdlbGwsIHdlIGNhbiBpbXByb3ZlIGl0LiAgTm8gY29kZSBvdXRzaWRlIHRoaXMgZnVuY3Rpb24g c2hvdWxkCi0JICogYXNzdW1lIGFueXRoaW5nIGFib3V0IGhvdyB0byBmaW5kIGEgcGFydGljdWxh ciB1cHBlcnJlbC4KLQkgKi8KIAogCS8qIElmIHdlIGFscmVhZHkgbWFkZSB0aGlzIHVwcGVycmVs IGZvciB0aGUgcXVlcnksIHJldHVybiBpdCAqLwotCWZvcmVhY2gobGMsIHJvb3QtPnVwcGVyX3Jl bHNba2luZF0pCisJaWYgKGxpc3QpCiAJewotCQl1cHBlcnJlbCA9IChSZWxPcHRJbmZvICopIGxm aXJzdChsYyk7Ci0KLQkJaWYgKGJtc19lcXVhbCh1cHBlcnJlbC0+cmVsaWRzLCByZWxpZHMpKQor CQl1cHBlcnJlbCA9IGZpbmRfcmVsX2luZm8obGlzdCwgcmVsaWRzKTsKKwkJaWYgKHVwcGVycmVs KQogCQkJcmV0dXJuIHVwcGVycmVsOwogCX0KIApAQCAtMTQ5MSw3ICsxNTExLDcgQEAgZmV0Y2hf dXBwZXJfcmVsKFBsYW5uZXJJbmZvICpyb290LCBVcHBlclJlbGF0aW9uS2luZCBraW5kLCBSZWxp ZHMgcmVsaWRzKQogCXVwcGVycmVsLT5jaGVhcGVzdF91bmlxdWVfcGF0aCA9IE5VTEw7CiAJdXBw ZXJyZWwtPmNoZWFwZXN0X3BhcmFtZXRlcml6ZWRfcGF0aHMgPSBOSUw7CiAKLQlyb290LT51cHBl cl9yZWxzW2tpbmRdID0gbGFwcGVuZChyb290LT51cHBlcl9yZWxzW2tpbmRdLCB1cHBlcnJlbCk7 CisJYWRkX3JlbF9pbmZvKCZyb290LT51cHBlcl9yZWxzW2tpbmRdLCB1cHBlcnJlbCk7CiAKIAly ZXR1cm4gdXBwZXJyZWw7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDE0Y2NmYzFhYzEuLjE5 NTFhZTdjMTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC04MCw2ICs4MCwyNiBAQCB0eXBlZGVm IGVudW0gVXBwZXJSZWxhdGlvbktpbmQKIAkvKiBOQjogVVBQRVJSRUxfRklOQUwgbXVzdCBiZSBs YXN0IGVudW0gZW50cnk7IGl0J3MgdXNlZCB0byBzaXplIGFycmF5cyAqLwogfSBVcHBlclJlbGF0 aW9uS2luZDsKIAorLyoKKyAqIEEgc3RydWN0dXJlIGNvbnNpc3Rpbmcgb2YgYSBsaXN0IGFuZCBh IGhhc2ggdGFibGUgdG8gc3RvcmUgcmVsYXRpb24tc3BlY2lmaWMKKyAqIGluZm9ybWF0aW9uLgor ICoKKyAqIEZvciBzbWFsbCBwcm9ibGVtcyB3ZSBqdXN0IHNjYW4gdGhlIGxpc3QgdG8gZG8gbG9v a3VwcywgYnV0IHdoZW4gdGhlcmUgYXJlCisgKiBtYW55IHJlbGF0aW9ucyB3ZSBidWlsZCBhIGhh c2ggdGFibGUgZm9yIGZhc3RlciBsb29rdXBzLiAgVGhlIGhhc2ggdGFibGUgaXMKKyAqIHByZXNl bnQgYW5kIHZhbGlkIHdoZW4gJ2hhc2gnIGlzIG5vdCBOVUxMLiAgTm90ZSB0aGF0IHdlIHN0aWxs IG1haW50YWluIHRoZQorICogbGlzdCBldmVuIHdoZW4gdXNpbmcgdGhlIGhhc2ggdGFibGUgZm9y IGxvb2t1cHM7IHRoaXMgc2ltcGxpZmllcyBsaWZlIGZvcgorICogR0VRTy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgUmVsSW5mb0xpc3QKK3sKKwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9f cmVhZCkKKworCU5vZGVUYWcJCXR5cGU7CisKKwlMaXN0CSAgICppdGVtczsKKwlzdHJ1Y3QgSFRB QiAqaGFzaCBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworfSBSZWxJbmZvTGlzdDsK KwogLyotLS0tLS0tLS0tCiAgKiBQbGFubmVyR2xvYmFsCiAgKgkJR2xvYmFsIGluZm9ybWF0aW9u IGZvciBwbGFubmluZy9vcHRpbWl6YXRpb24KQEAgLTI3MCwxNSArMjkwLDkgQEAgc3RydWN0IFBs YW5uZXJJbmZvCiAKIAkvKgogCSAqIGpvaW5fcmVsX2xpc3QgaXMgYSBsaXN0IG9mIGFsbCBqb2lu LXJlbGF0aW9uIFJlbE9wdEluZm9zIHdlIGhhdmUKLQkgKiBjb25zaWRlcmVkIGluIHRoaXMgcGxh bm5pbmcgcnVuLiAgRm9yIHNtYWxsIHByb2JsZW1zIHdlIGp1c3Qgc2NhbiB0aGUKLQkgKiBsaXN0 IHRvIGRvIGxvb2t1cHMsIGJ1dCB3aGVuIHRoZXJlIGFyZSBtYW55IGpvaW4gcmVsYXRpb25zIHdl IGJ1aWxkIGEKLQkgKiBoYXNoIHRhYmxlIGZvciBmYXN0ZXIgbG9va3Vwcy4gIFRoZSBoYXNoIHRh YmxlIGlzIHByZXNlbnQgYW5kIHZhbGlkCi0JICogd2hlbiBqb2luX3JlbF9oYXNoIGlzIG5vdCBO VUxMLiAgTm90ZSB0aGF0IHdlIHN0aWxsIG1haW50YWluIHRoZSBsaXN0Ci0JICogZXZlbiB3aGVu IHVzaW5nIHRoZSBoYXNoIHRhYmxlIGZvciBsb29rdXBzOyB0aGlzIHNpbXBsaWZpZXMgbGlmZSBm b3IKLQkgKiBHRVFPLgorCSAqIGNvbnNpZGVyZWQgaW4gdGhpcyBwbGFubmluZyBydW4uCiAJICov Ci0JTGlzdAkgICAqam9pbl9yZWxfbGlzdDsKLQlzdHJ1Y3QgSFRBQiAqam9pbl9yZWxfaGFzaCBw Z19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCVJlbEluZm9MaXN0ICpqb2luX3JlbF9s aXN0OyAvKiBsaXN0IG9mIGpvaW4tcmVsYXRpb24gUmVsT3B0SW5mb3MgKi8KIAogCS8qCiAJICog V2hlbiBkb2luZyBhIGR5bmFtaWMtcHJvZ3JhbW1pbmctc3R5bGUgam9pbiBzZWFyY2gsIGpvaW5f cmVsX2xldmVsW2tdCkBAIC00MTMsNyArNDI3LDcgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJICog VXBwZXItcmVsIFJlbE9wdEluZm9zLiBVc2UgZmV0Y2hfdXBwZXJfcmVsKCkgdG8gZ2V0IGFueSBw YXJ0aWN1bGFyCiAJICogdXBwZXIgcmVsLgogCSAqLwotCUxpc3QJICAgKnVwcGVyX3JlbHNbVVBQ RVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCVJlbElu Zm9MaXN0IHVwcGVyX3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93 cml0ZV9pZ25vcmUpOwogCiAJLyogUmVzdWx0IHRsaXN0cyBjaG9zZW4gYnkgZ3JvdXBpbmdfcGxh bm5lciBmb3IgdXBwZXItc3RhZ2UgcHJvY2Vzc2luZyAqLwogCXN0cnVjdCBQYXRoVGFyZ2V0ICp1 cHBlcl90YXJnZXRzW1VQUEVSUkVMX0ZJTkFMICsgMV0gcGdfbm9kZV9hdHRyKHJlYWRfd3JpdGVf aWdub3JlKTsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNTQ3ZDE0YjNlNy4uNTI1NTE2 MDIxMiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyOTEsNyArMTI5MSw2IEBAIEpv aW4KIEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBKb2luRXhwcgotSm9pbkhhc2hFbnRy eQogSm9pblBhdGgKIEpvaW5QYXRoRXh0cmFEYXRhCiBKb2luU3RhdGUKQEAgLTIzNzcsNiArMjM3 Niw4IEBAIFJlbEZpbGVOdW1iZXIKIFJlbElkQ2FjaGVFbnQKIFJlbEluZm8KIFJlbEluZm9BcnIK K1JlbEluZm9FbnRyeQorUmVsSW5mb0xpc3QKIFJlbE1hcEZpbGUKIFJlbE1hcHBpbmcKIFJlbE9w dEluZm8KLS0gCjIuNDMuMAoK --000000000000c0427e061fc88d7d Content-Type: application/octet-stream; name="v10-0002-Implement-Eager-Aggregation.patch" Content-Disposition: attachment; filename="v10-0002-Implement-Eager-Aggregation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lzwfnwzu1 RnJvbSBhYWFjNGU0YzRiY2QxZDI1OWE5NWNhN2I5OTI4OGZlZmEzZGQ4MzJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNjowMToyNiArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjEw IDIvMl0gSW1wbGVtZW50IEVhZ2VyIEFnZ3JlZ2F0aW9uCgpFYWdlciBhZ2dyZWdhdGlvbiBpcyBh IHF1ZXJ5IG9wdGltaXphdGlvbiB0ZWNobmlxdWUgdGhhdCBwYXJ0aWFsbHkKcHVzaGVzIGFnZ3Jl Z2F0aW9uIHBhc3QgYSBqb2luLCBhbmQgZmluYWxpemVzIGl0IG9uY2UgYWxsIHRoZQpyZWxhdGlv bnMgYXJlIGpvaW5lZC4gIEVhZ2VyIGFnZ3JlZ2F0aW9uIG1heSByZWR1Y2UgdGhlIG51bWJlciBv ZgppbnB1dCByb3dzIHRvIHRoZSBqb2luIGFuZCB0aHVzIGNvdWxkIHJlc3VsdCBpbiBhIGJldHRl ciBvdmVyYWxsIHBsYW4uCgpBIHBsYW4gd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBsb29rcyBsaWtl OgoKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCBhLmksIGF2ZyhiLnkpCiBGUk9NIGEgSk9J TiBiIE9OIGEuaSA9IGIuagogR1JPVVAgQlkgYS5pOwoKIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK ICAgR3JvdXAgS2V5OiBhLmkKICAgLT4gIE5lc3RlZCBMb29wCiAgICAgICAgIC0+ICBQYXJ0aWFs IEhhc2hBZ2dyZWdhdGUKICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBiLmoKICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGIKICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBh X3BrZXkgb24gYQogICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaSA9IGIuaikKCkR1cmluZyB0 aGUgY29uc3RydWN0aW9uIG9mIHRoZSBqb2luIHRyZWUsIHdlIGV2YWx1YXRlIGVhY2ggYmFzZSBv cgpqb2luIHJlbGF0aW9uIHRvIGRldGVybWluZSBpZiBlYWdlciBhZ2dyZWdhdGlvbiBjYW4gYmUg YXBwbGllZC4gIElmCmZlYXNpYmxlLCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSBSZWxPcHRJbmZvIGNh bGxlZCBhICJncm91cGVkIHJlbGF0aW9uIgphbmQgc3RvcmUgaXQgaW4gcm9vdC0+dXBwZXJfcmVs c1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10uCgpHcm91cGVkIHJlbGF0aW9uIHBhdGhzIGNh biBiZSBnZW5lcmF0ZWQgaW4gdHdvIHdheXMuICBUaGUgZmlyc3QgbWV0aG9kCmludm9sdmVzIGFk ZGluZyBzb3J0ZWQgYW5kIGhhc2hlZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBv Zgp0aGUgbm9uLWdyb3VwZWQgcGF0aHMuICBUbyBsaW1pdCBwbGFubmluZyB0aW1lLCB3ZSBvbmx5 IGNvbnNpZGVyIHRoZQpjaGVhcGVzdCBvciBzdWl0YWJseS1zb3J0ZWQgbm9uLWdyb3VwZWQgcGF0 aHMgZHVyaW5nIHRoaXMgcGhhc2UuCgpBbHRlcm5hdGl2ZWx5LCBncm91cGVkIHBhdGhzIGNhbiBi ZSBnZW5lcmF0ZWQgYnkgam9pbmluZyBhIGdyb3VwZWQKcmVsYXRpb24gd2l0aCBhIG5vbi1ncm91 cGVkIHJlbGF0aW9uLiAgSm9pbmluZyB0d28gZ3JvdXBlZCByZWxhdGlvbnMKZG9lcyBub3Qgc2Vl bSB0byBiZSB2ZXJ5IHVzZWZ1bCBhbmQgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCgpGb3Ig dGhlIHBhcnRpYWwgYWdncmVnYXRpb24gdGhhdCBpcyBwdXNoZWQgZG93biB0byBhIG5vbi1hZ2dy ZWdhdGVkCnJlbGF0aW9uLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBleHByZXNzaW9ucyBmcm9t IHRoaXMgcmVsYXRpb24gdGhhdAphcmUgaW52b2x2ZWQgaW4gdXBwZXIgam9pbiBjbGF1c2VzIGFu ZCBpbmNsdWRlIHRoZW0gaW4gdGhlIGdyb3VwaW5nCmtleXMuICBUaGlzIGVuc3VyZXMgdGhhdCB3 ZSBoYXZlIHRoZSBjb3JyZWN0IGlucHV0IGZvciB0aGUgdXBwZXIgam9pbnMKYW5kIHRoYXQgYW4g YWdncmVnYXRlZCByb3cgZnJvbSB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbiBtYXRjaGVzIHRoZQpv dGhlciBzaWRlIG9mIHRoZSBqb2luIGlmIGFuZCBvbmx5IGlmIGVhY2ggcm93IGluIHRoZSBwYXJ0 aWFsIGdyb3VwCmRvZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG1haW50YWluaW5nIGNvcnJlY3Ru ZXNzLgoKT25lIHJlc3RyaWN0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHB1c2ggcGFydGlhbCBhZ2dy ZWdhdGlvbiBkb3duIHRvIGEKcmVsYXRpb24gdGhhdCBpcyBpbiB0aGUgbnVsbGFibGUgc2lkZSBv ZiBhbiBvdXRlciBqb2luLCBiZWNhdXNlIHRoZQpOVUxMLWV4dGVuZGVkIHJvd3MgcHJvZHVjZWQg YnkgdGhlIG91dGVyIGpvaW4gd291bGQgbm90IGJlIGF2YWlsYWJsZQp3aGVuIHdlIHBlcmZvcm0g dGhlIHBhcnRpYWwgYWdncmVnYXRpb24sIHdoaWxlIHdpdGggYQpub24tZWFnZXItYWdncmVnYXRp b24gcGxhbiB0aGVzZSByb3dzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSB0b3AtbGV2ZWwKYWdncmVn YXRpb24uICBQdXNoaW5nIHBhcnRpYWwgYWdncmVnYXRpb24gaW4gdGhpcyBjYXNlIG1heSByZXN1 bHQgaW4KdGhlIHJvd3MgYmVpbmcgZ3JvdXBlZCBkaWZmZXJlbnRseSB0aGFuIGV4cGVjdGVkLCBv ciBwcm9kdWNlIGluY29ycmVjdAp2YWx1ZXMgZnJvbSB0aGUgYWdncmVnYXRlIGZ1bmN0aW9ucy4K CklmIHdlIGhhdmUgZ2VuZXJhdGVkIGEgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIHRvcG1vc3Qg am9pbiByZWxhdGlvbiwKd2UgZmluYWxpemUgaXRzIHBhdGhzIGF0IHRoZSBlbmQuICBUaGUgZmlu YWwgcGF0aCB3aWxsIGNvbXBldGUgaW4gdGhlCnVzdWFsIHdheSB3aXRoIHBhdGhzIGJ1aWx0IGZy b20gcmVndWxhciBwbGFubmluZy4KClNpbmNlIGVhZ2VyIGFnZ3JlZ2F0aW9uIGNhbiBnZW5lcmF0 ZSBtYW55IHVwcGVyIHJlbGF0aW9ucyBvZiBwYXJ0aWFsCmFnZ3JlZ2F0aW9uLCB3ZSBpbnRyb2R1 Y2UgYSBSZWxJbmZvTGlzdCBzdHJ1Y3R1cmUsIHdoaWNoIGVuY2Fwc3VsYXRlcwpib3RoIGEgbGlz dCBhbmQgYSBoYXNoIHRhYmxlLCBzbyB0aGF0IHdlIGNhbiBsZXZlcmFnZSB0aGUgaGFzaCB0YWJs ZQpmb3IgZmFzdGVyIGxvb2t1cHMgbm90IG9ubHkgZm9yIGpvaW4gcmVsYXRpb25zIGJ1dCBhbHNv IGZvciB1cHBlcgpyZWxhdGlvbnMuCgpFYWdlciBhZ2dyZWdhdGlvbiBjYW4gdXNlIHNpZ25pZmlj YW50bHkgbW9yZSBDUFUgdGltZSBhbmQgbWVtb3J5IHRoYW4KcmVndWxhciBwbGFubmluZyB3aGVu IHRoZSBxdWVyeSBpbnZvbHZlcyBhZ2dyZWdhdGVzIGFuZCBtYW55IGpvaW5pbmcKcmVsYXRpb25z LiAgSG93ZXZlciwgaW4gc29tZSBjYXNlcywgdGhlIHJlc3VsdGluZyBwbGFuIGNhbiBiZSBtdWNo CmJldHRlciwganVzdGlmeWluZyB0aGUgYWRkaXRpb25hbCBwbGFubmluZyBlZmZvcnQuICBBbGwg dGhlIHNhbWUsIGZvcgpub3csIHR1cm4gdGhpcyBmZWF0dXJlIG9mZiBieSBkZWZhdWx0LgotLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUgICAgICAgICAgICAgICAgICB8ICAgNzkgKwog c3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMgICAgICAgIHwgIDEwNCArLQog c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgICAgICAgIHwgIDQ0MSArKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgICAgICAgICB8ICAxMzUg KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jICAgICAgICB8ICAyNTIg KysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyAgICAgICAgIHwgICAx MiArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgICAgfCAgMTAw ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMgICAgICAgfCAgIDYw ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAgICAgICB8ICAgMTIg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAgICAgICAgICB8ICA3NzAg KysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAg IHwgICAxMCArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUg fCAgICAxICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8 ICAxMDAgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oICAgICAgICAgICAgICB8 ICAgIDkgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgICAgICAgIHwg ICAgNSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCAgICAgICAgICAgICAgfCAg ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZWFnZXJfYWdncmVnYXRlLm91dCB8IDEy OTMgKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mu b3V0ICAgICAgICB8ICAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUg ICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0 ZS5zcWwgICAgICB8ICAxOTIgKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgICA0ICsKIDIxIGZpbGVzIGNoYW5nZWQsIDM0ODggaW5zZXJ0aW9ucygr KSwgOTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9SRUFETUUgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvUkVBRE1FCmluZGV4IDJh YjRmM2RiZjMuLjZmNzllZjUzMWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9S RUFETUUKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRQpAQCAtMTQ5NywzICsxNDk3 LDgyIEBAIGJyZWFraW5nIGRvd24gYWdncmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBhIHBhcnRp dGlvbmVkIHJlbGF0aW9uIGludG8KIGFnZ3JlZ2F0aW9uIG9yIGdyb3VwaW5nIG92ZXIgaXRzIHBh cnRpdGlvbnMgaXMgY2FsbGVkIHBhcnRpdGlvbndpc2UKIGFnZ3JlZ2F0aW9uLiAgRXNwZWNpYWxs eSB3aGVuIHRoZSBwYXJ0aXRpb24ga2V5cyBtYXRjaCB0aGUgR1JPVVAgQlkgY2xhdXNlLAogdGhp cyBjYW4gYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiB0aGUgcmVndWxhciBtZXRob2QuCisK K0VhZ2VyIGFnZ3JlZ2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCitFYWdlciBhZ2dyZWdhdGlv biBpcyBhIHF1ZXJ5IG9wdGltaXphdGlvbiB0ZWNobmlxdWUgdGhhdCBwYXJ0aWFsbHkgcHVzaGVz CithZ2dyZWdhdGlvbiBwYXN0IGEgam9pbiwgYW5kIGZpbmFsaXplcyBpdCBvbmNlIGFsbCB0aGUg cmVsYXRpb25zIGFyZSBqb2luZWQuCitFYWdlciBhZ2dyZWdhdGlvbiBtYXkgcmVkdWNlIHRoZSBu dW1iZXIgb2YgaW5wdXQgcm93cyB0byB0aGUgam9pbiBhbmQgdGh1cworY291bGQgcmVzdWx0IGlu IGEgYmV0dGVyIG92ZXJhbGwgcGxhbi4KKworRm9yIGV4YW1wbGU6CisKKyBFWFBMQUlOIChDT1NU UyBPRkYpCisgU0VMRUNUIGEuaSwgYXZnKGIueSkKKyBGUk9NIGEgSk9JTiBiIE9OIGEuaSA9IGIu agorIEdST1VQIEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtl eTogYS5pCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5qCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gYgorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBhX3BrZXkg b24gYQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGkgPSBiLmopCisKK0lmIHRoZSBwYXJ0 aWFsIGFnZ3JlZ2F0aW9uIG9uIHRhYmxlIEIgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBudW1i ZXIgb2YKK2lucHV0IHJvd3MsIHRoZSBqb2luIGFib3ZlIHdpbGwgYmUgbXVjaCBjaGVhcGVyLCBs ZWFkaW5nIHRvIGEgbW9yZSBlZmZpY2llbnQKK2ZpbmFsIHBsYW4uCisKK0ZvciB0aGUgcGFydGlh bCBhZ2dyZWdhdGlvbiB0aGF0IGlzIHB1c2hlZCBkb3duIHRvIGEgbm9uLWFnZ3JlZ2F0ZWQgcmVs YXRpb24sCit3ZSBuZWVkIHRvIGNvbnNpZGVyIGFsbCBleHByZXNzaW9ucyBmcm9tIHRoaXMgcmVs YXRpb24gdGhhdCBhcmUgaW52b2x2ZWQgaW4KK3VwcGVyIGpvaW4gY2xhdXNlcyBhbmQgaW5jbHVk ZSB0aGVtIGluIHRoZSBncm91cGluZyBrZXlzLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2UKK2hhdmUg dGhlIGNvcnJlY3QgaW5wdXQgZm9yIHRoZSB1cHBlciBqb2lucyBhbmQgdGhhdCBhbiBhZ2dyZWdh dGVkIHJvdyBmcm9tIHRoZQorcGFydGlhbCBhZ2dyZWdhdGlvbiBtYXRjaGVzIHRoZSBvdGhlciBz aWRlIG9mIHRoZSBqb2luIGlmIGFuZCBvbmx5IGlmIGVhY2ggcm93CitpbiB0aGUgcGFydGlhbCBn cm91cCBkb2VzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4K KworT25lIHJlc3RyaWN0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHB1c2ggcGFydGlhbCBhZ2dyZWdh dGlvbiBkb3duIHRvIGEgcmVsYXRpb24KK3RoYXQgaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2Yg YW4gb3V0ZXIgam9pbiwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzCitwcm9kdWNlZCBi eSB0aGUgb3V0ZXIgam9pbiB3b3VsZCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gd2UgcGVyZm9ybSB0 aGUgcGFydGlhbAorYWdncmVnYXRpb24sIHdoaWxlIHdpdGggYSBub24tZWFnZXItYWdncmVnYXRp b24gcGxhbiB0aGVzZSByb3dzIGFyZSBhdmFpbGFibGUKK2ZvciB0aGUgdG9wLWxldmVsIGFnZ3Jl Z2F0aW9uLiAgUHVzaGluZyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMgY2FzZSBtYXkKK3Jl c3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91cGVkIGRpZmZlcmVudGx5IHRoYW4gZXhwZWN0ZWQs IG9yIHByb2R1Y2UKK2luY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgYWdncmVnYXRlIGZ1bmN0aW9u cy4KKworV2UgY2FuIGFsc28gYXBwbHkgZWFnZXIgYWdncmVnYXRpb24gdG8gYSBqb2luOgorCisg RVhQTEFJTiAoQ09TVFMgT0ZGKQorIFNFTEVDVCBhLmksIGF2ZyhiLnkgKyBjLnopCisgRlJPTSBh IEpPSU4gYiBPTiBhLmkgPSBiLmoKKyAgICAgICAgSk9JTiBjIE9OIGIuaiA9IGMuaQorIEdST1VQ IEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5pCisg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgIEdyb3VwIEtleTogYi5qCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChiLmogPSBjLmkpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBjCisgICAgICAg ICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaSA9IGIuaikKKworRHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGpv aW4gdHJlZSwgd2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yIGpvaW4KK3JlbGF0aW9uIHRvIGRldGVy bWluZSBpZiBlYWdlciBhZ2dyZWdhdGlvbiBjYW4gYmUgYXBwbGllZC4gIElmIGZlYXNpYmxlLCB3 ZQorY3JlYXRlIGEgc2VwYXJhdGUgUmVsT3B0SW5mbyBjYWxsZWQgYSAiZ3JvdXBlZCByZWxhdGlv biIgYW5kIGdlbmVyYXRlIGdyb3VwZWQKK3BhdGhzIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhhc2hl ZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiB0aGUKK25vbi1ncm91cGVkIHBh dGhzLiAgVG8gbGltaXQgcGxhbm5pbmcgdGltZSwgd2UgY29uc2lkZXIgb25seSB0aGUgY2hlYXBl c3QKK25vbi1ncm91cGVkIHBhdGhzIGluIHRoaXMgc3RlcC4KKworQW5vdGhlciB3YXkgdG8gZ2Vu ZXJhdGUgZ3JvdXBlZCBwYXRocyBpcyB0byBqb2luIGEgZ3JvdXBlZCByZWxhdGlvbiB3aXRoIGEK K25vbi1ncm91cGVkIHJlbGF0aW9uLiAgSm9pbmluZyB0d28gZ3JvdXBlZCByZWxhdGlvbnMgZG9l cyBub3Qgc2VlbSB0byBiZSB2ZXJ5Cit1c2VmdWwgYW5kIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9y dGVkLgorCitJZiB3ZSBoYXZlIGdlbmVyYXRlZCBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSB0 b3Btb3N0IGpvaW4gcmVsYXRpb24sIHdlIG5lZWQKK3RvIGZpbmFsaXplIGl0cyBwYXRocyBhdCB0 aGUgZW5kLiAgVGhlIGZpbmFsIHBhdGggd2lsbCBjb21wZXRlIGluIHRoZSB1c3VhbCB3YXkKK3dp dGggcGF0aHMgYnVpbHQgZnJvbSByZWd1bGFyIHBsYW5uaW5nLgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFsLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv Z2Vxby9nZXFvX2V2YWwuYwppbmRleCAxMTQxMTU2ODk5Li5iNzc4MDVkMjdkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYwpAQCAtMzksMTAgKzM5LDIwIEBAIHR5cGVkZWYg c3RydWN0CiAJaW50CQkJc2l6ZTsJCQkvKiBudW1iZXIgb2YgaW5wdXQgcmVsYXRpb25zIGluIGNs dW1wICovCiB9IENsdW1wOwogCisvKiBUaGUgb3JpZ2luYWwgbGVuZ3RoIGFuZCBoYXNodGFibGUg b2YgYSBSZWxJbmZvTGlzdCAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQJCQlzYXZlbGVuZ3Ro OworCXN0cnVjdCBIVEFCICpzYXZlaGFzaDsKK30gUmVsSW5mb0xpc3RJbmZvOworCiBzdGF0aWMg TGlzdCAqbWVyZ2VfY2x1bXAoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmNsdW1wcywgQ2x1bXAg Km5ld19jbHVtcCwKIAkJCQkJCSBpbnQgbnVtX2dlbmUsIGJvb2wgZm9yY2UpOwogc3RhdGljIGJv b2wgZGVzaXJhYmxlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgICBSZWxPcHRJbmZv ICpvdXRlcl9yZWwsIFJlbE9wdEluZm8gKmlubmVyX3JlbCk7CitzdGF0aWMgUmVsSW5mb0xpc3RJ bmZvIHNhdmVfcmVsaW5mb2xpc3QoUmVsSW5mb0xpc3QgKnJlbGluZm9fbGlzdCk7CitzdGF0aWMg dm9pZCByZXN0b3JlX3JlbGluZm9saXN0KFJlbEluZm9MaXN0ICpyZWxpbmZvX2xpc3QsCisJCQkJ CQkJCVJlbEluZm9MaXN0SW5mbyAqaW5mbyk7CiAKIAogLyoKQEAgLTYwLDggKzcwLDkgQEAgZ2Vx b19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0b3VyLCBpbnQgbnVtX2dlbmUpCiAJTWVt b3J5Q29udGV4dCBvbGRjeHQ7CiAJUmVsT3B0SW5mbyAqam9pbnJlbDsKIAlDb3N0CQlmaXRuZXNz OwotCWludAkJCXNhdmVsZW5ndGg7Ci0Jc3RydWN0IEhUQUIgKnNhdmVoYXNoOworCVJlbEluZm9M aXN0SW5mbyBzYXZlX2pvaW5fcmVsOworCVJlbEluZm9MaXN0SW5mbyBzYXZlX2dyb3VwZWRfcmVs OworCVJlbEluZm9MaXN0SW5mbyBzYXZlX2dyb3VwZWRfaW5mbzsKIAogCS8qCiAJICogQ3JlYXRl IGEgcHJpdmF0ZSBtZW1vcnkgY29udGV4dCB0aGF0IHdpbGwgaG9sZCBhbGwgdGVtcCBzdG9yYWdl CkBAIC03OCwyNSArODksMzMgQEAgZ2Vxb19ldmFsKFBsYW5uZXJJbmZvICpyb290LCBHZW5lICp0 b3VyLCBpbnQgbnVtX2dlbmUpCiAJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG15Y29u dGV4dCk7CiAKIAkvKgotCSAqIGdpbW1lX3RyZWUgd2lsbCBhZGQgZW50cmllcyB0byByb290LT5q b2luX3JlbF9saXN0LCB3aGljaCBtYXkgb3IgbWF5Ci0JICogbm90IGFscmVhZHkgY29udGFpbiBz b21lIGVudHJpZXMuICBUaGUgbmV3bHkgYWRkZWQgZW50cmllcyB3aWxsIGJlCi0JICogcmVjeWNs ZWQgYnkgdGhlIE1lbW9yeUNvbnRleHREZWxldGUgYmVsb3csIHNvIHdlIG11c3QgZW5zdXJlIHRo YXQgdGhlCi0JICogbGlzdCBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0YXRlIGJlZm9yZSBl eGl0aW5nLiAgV2UgY2FuIGRvIHRoaXMgYnkKLQkgKiB0cnVuY2F0aW5nIHRoZSBsaXN0IHRvIGl0 cyBvcmlnaW5hbCBsZW5ndGguICBOT1RFIHRoaXMgYXNzdW1lcyB0aGF0IGFueQotCSAqIGFkZGVk IGVudHJpZXMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQhCisJICogZ2ltbWVfdHJlZSB3aWxsIGFk ZCBlbnRyaWVzIHRvIHJvb3QtPmpvaW5fcmVsX2xpc3QsIHJvb3QtPmFnZ19pbmZvX2xpc3QKKwkg KiBhbmQgcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10sIHdoaWNo IG1heSBvciBtYXkgbm90CisJICogYWxyZWFkeSBjb250YWluIHNvbWUgZW50cmllcy4gIFRoZSBu ZXdseSBhZGRlZCBlbnRyaWVzIHdpbGwgYmUgcmVjeWNsZWQKKwkgKiBieSB0aGUgTWVtb3J5Q29u dGV4dERlbGV0ZSBiZWxvdywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCBlYWNoIGxpc3Qgb2YKKwkg KiB0aGUgUmVsSW5mb0xpc3Qgc3RydWN0dXJlcyBpcyByZXN0b3JlZCB0byBpdHMgZm9ybWVyIHN0 YXRlIGJlZm9yZQorCSAqIGV4aXRpbmcuICBXZSBjYW4gZG8gdGhpcyBieSB0cnVuY2F0aW5nIGVh Y2ggbGlzdCB0byBpdHMgb3JpZ2luYWwKKwkgKiBsZW5ndGguIE5PVEUgdGhpcyBhc3N1bWVzIHRo YXQgYW55IGFkZGVkIGVudHJpZXMgYXJlIGFwcGVuZGVkIGF0IHRoZQorCSAqIGVuZCEKIAkgKgot CSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUgbm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGpvaW5f cmVsX2xpc3QtPmhhc2gsIGlmCi0JICogdGhlcmUgaXMgb25lLiAgV2UgY2FuIGRvIHRoaXMgYnkg anVzdCB0ZW1wb3JhcmlseSBzZXR0aW5nIHRoZSBsaW5rIHRvCi0JICogTlVMTC4gIChJZiB3ZSBh cmUgZGVhbGluZyB3aXRoIGVub3VnaCBqb2luIHJlbHMsIHdoaWNoIHdlIHZlcnkgbGlrZWx5Ci0J ICogYXJlLCBhIG5ldyBoYXNoIHRhYmxlIHdpbGwgZ2V0IGJ1aWx0IGFuZCB1c2VkIGxvY2FsbHku KQorCSAqIFdlIGFsc28gbXVzdCB0YWtlIGNhcmUgbm90IHRvIG1lc3MgdXAgdGhlIG91dGVyIGhh c2ggdGFibGVzIG9mIHRoZQorCSAqIFJlbEluZm9MaXN0IHN0cnVjdHVyZXMsIGlmIGFueS4gIFdl IGNhbiBkbyB0aGlzIGJ5IGp1c3QgdGVtcG9yYXJpbHkKKwkgKiBzZXR0aW5nIGVhY2ggbGluayB0 byBOVUxMLiAgKElmIHdlIGFyZSBkZWFsaW5nIHdpdGggZW5vdWdoIGpvaW4gcmVscywKKwkgKiB3 aGljaCB3ZSB2ZXJ5IGxpa2VseSBhcmUsIG5ldyBoYXNoIHRhYmxlcyB3aWxsIGdldCBidWlsdCBh bmQgdXNlZAorCSAqIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2ZWxbXSBzaG91bGRu J3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8KLQlzYXZlbGVuZ3Ro ID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMpOwotCXNhdmVoYXNoID0g cm9vdC0+am9pbl9yZWxfbGlzdC0+aGFzaDsKKwlzYXZlX2pvaW5fcmVsID0gc2F2ZV9yZWxpbmZv bGlzdChyb290LT5qb2luX3JlbF9saXN0KTsKKwlzYXZlX2dyb3VwZWRfcmVsID0KKwkJc2F2ZV9y ZWxpbmZvbGlzdCgmcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10p OworCXNhdmVfZ3JvdXBlZF9pbmZvID0gc2F2ZV9yZWxpbmZvbGlzdChyb290LT5hZ2dfaW5mb19s aXN0KTsKKwogCUFzc2VydChyb290LT5qb2luX3JlbF9sZXZlbCA9PSBOVUxMKTsKIAogCXJvb3Qt PmpvaW5fcmVsX2xpc3QtPmhhc2ggPSBOVUxMOworCXJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxf UEFSVElBTF9HUk9VUF9BR0ddLmhhc2ggPSBOVUxMOworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPmhh c2ggPSBOVUxMOwogCiAJLyogY29uc3RydWN0IHRoZSBiZXN0IHBhdGggZm9yIHRoZSBnaXZlbiBj b21iaW5hdGlvbiBvZiByZWxhdGlvbnMgKi8KIAlqb2lucmVsID0gZ2ltbWVfdHJlZShyb290LCB0 b3VyLCBudW1fZ2VuZSk7CkBAIC0xMTgsMTIgKzEzNywxNCBAQCBnZXFvX2V2YWwoUGxhbm5lcklu Zm8gKnJvb3QsIEdlbmUgKnRvdXIsIGludCBudW1fZ2VuZSkKIAkJZml0bmVzcyA9IERCTF9NQVg7 CiAKIAkvKgotCSAqIFJlc3RvcmUgam9pbl9yZWxfbGlzdCB0byBpdHMgZm9ybWVyIHN0YXRlLCBh bmQgcHV0IGJhY2sgb3JpZ2luYWwKLQkgKiBoYXNodGFibGUgaWYgYW55LgorCSAqIFJlc3RvcmUg ZWFjaCBvZiB0aGUgbGlzdCBpbiBqb2luX3JlbF9saXN0LCBhZ2dfaW5mb19saXN0IGFuZAorCSAq IHVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddIHRvIGl0cyBmb3JtZXIgc3Rh dGUsIGFuZCBwdXQKKwkgKiBiYWNrIG9yaWdpbmFsIGhhc2h0YWJsZSBpZiBhbnkuCiAJICovCi0J cm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMgPSBsaXN0X3RydW5jYXRlKHJvb3QtPmpvaW5fcmVs X2xpc3QtPml0ZW1zLAotCQkJCQkJCQkJCQkgICBzYXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3Jl bF9saXN0LT5oYXNoID0gc2F2ZWhhc2g7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5qb2lu X3JlbF9saXN0LCAmc2F2ZV9qb2luX3JlbCk7CisJcmVzdG9yZV9yZWxpbmZvbGlzdCgmcm9vdC0+ dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10sCisJCQkJCQkmc2F2ZV9ncm91 cGVkX3JlbCk7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5hZ2dfaW5mb19saXN0LCAmc2F2 ZV9ncm91cGVkX2luZm8pOwogCiAJLyogcmVsZWFzZSBhbGwgdGhlIG1lbW9yeSBhY3F1aXJlZCB3 aXRoaW4gZ2ltbWVfdHJlZSAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwpAQCAt Mjc5LDYgKzMwMCwyNyBAQCBtZXJnZV9jbHVtcChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqY2x1 bXBzLCBDbHVtcCAqbmV3X2NsdW1wLCBpbnQgbnVtX2dlbmUsCiAJCQkJLyogRmluZCBhbmQgc2F2 ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9yIHRoaXMgam9pbnJlbCAqLwogCQkJCXNldF9jaGVhcGVz dChqb2lucmVsKTsKIAorCQkJCS8qCisJCQkJICogRXhjZXB0IGZvciB0aGUgdG9wbW9zdCBzY2Fu L2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0aW5nCisJCQkJICogcGFydGlhbCBhZ2dyZWdhdGlv biBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wCisJCQkJICogb2YgdGhlIHBh dGhzIG9mIHRoaXMgcmVsLiAgQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZworCQkJCSAq IHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiwgc28gcnVuIHNldF9jaGVhcGVzdCgpLgor CQkJCSAqLworCQkJCWlmICghYm1zX2VxdWFsKGpvaW5yZWwtPnJlbGlkcywgcm9vdC0+YWxsX3F1 ZXJ5X3JlbHMpKQorCQkJCXsKKwkJCQkJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJCQkJCVJl bEFnZ0luZm8gKmFnZ19pbmZvOworCisJCQkJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3Jl bChyb290LCBqb2lucmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJCQkgICAmYWdnX2luZm8pOworCQkJ CQlpZiAocmVsX2dyb3VwZWQpCisJCQkJCXsKKwkJCQkJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMo cm9vdCwgcmVsX2dyb3VwZWQsIGpvaW5yZWwsCisJCQkJCQkJCQkJCSAgIGFnZ19pbmZvKTsKKwkJ CQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJCQkJCX0KKwkJCQl9CisKIAkJCQkvKiBB YnNvcmIgbmV3IGNsdW1wIGludG8gb2xkICovCiAJCQkJb2xkX2NsdW1wLT5qb2lucmVsID0gam9p bnJlbDsKIAkJCQlvbGRfY2x1bXAtPnNpemUgKz0gbmV3X2NsdW1wLT5zaXplOwpAQCAtMzM2LDMg KzM3OCwyNyBAQCBkZXNpcmFibGVfam9pbihQbGFubmVySW5mbyAqcm9vdCwKIAkvKiBPdGhlcndp c2UgcG9zdHBvbmUgdGhlIGpvaW4gdGlsbCBsYXRlci4gKi8KIAlyZXR1cm4gZmFsc2U7CiB9CisK Ky8qCisgKiBTYXZlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0YWJsZSBvZiBhIFJlbElu Zm9MaXN0LgorICovCitzdGF0aWMgUmVsSW5mb0xpc3RJbmZvCitzYXZlX3JlbGluZm9saXN0KFJl bEluZm9MaXN0ICpyZWxpbmZvX2xpc3QpCit7CisJUmVsSW5mb0xpc3RJbmZvIGluZm87CisKKwlp bmZvLnNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyZWxpbmZvX2xpc3QtPml0ZW1zKTsKKwlpbmZv LnNhdmVoYXNoID0gcmVsaW5mb19saXN0LT5oYXNoOworCisJcmV0dXJuIGluZm87Cit9CisKKy8q CisgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0YWJsZSBvZiBhIFJlbElu Zm9MaXN0LgorICovCitzdGF0aWMgdm9pZAorcmVzdG9yZV9yZWxpbmZvbGlzdChSZWxJbmZvTGlz dCAqcmVsaW5mb19saXN0LCBSZWxJbmZvTGlzdEluZm8gKmluZm8pCit7CisJcmVsaW5mb19saXN0 LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocmVsaW5mb19saXN0LT5pdGVtcywgaW5mby0+c2F2ZWxl bmd0aCk7CisJcmVsaW5mb19saXN0LT5oYXNoID0gaW5mby0+c2F2ZWhhc2g7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCBiNTUwZTcwN2E0Li4wMzc5NWEwZWM0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNp bmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5o IgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3By ZXAuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFy c2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgpAQCAtNDcsNiArNDgs NyBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jl d3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0 aWxzL3NlbGZ1bmNzLmgiCiAKIAogLyogQml0bWFzayBmbGFncyBmb3IgcHVzaGRvd25fc2FmZXR5 X2luZm8udW5zYWZlRmxhZ3MgKi8KQEAgLTc3LDYgKzc5LDcgQEAgdHlwZWRlZiBlbnVtIHB1c2hk b3duX3NhZmVfdHlwZQogCiAvKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYnkgR1VDICovCiBi b29sCQllbmFibGVfZ2VxbyA9IGZhbHNlOwkvKiBqdXN0IGluIGNhc2UgR1VDIGRvZXNuJ3Qgc2V0 IGl0ICovCitib29sCQllbmFibGVfZWFnZXJfYWdncmVnYXRlID0gZmFsc2U7CiBpbnQJCQlnZXFv X3RocmVzaG9sZDsKIGludAkJCW1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CiBpbnQJCQlt aW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwpAQCAtOTAsNiArOTMsNyBAQCBqb2luX3NlYXJj aF9ob29rX3R5cGUgam9pbl9zZWFyY2hfaG9vayA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIHNldF9i YXNlX3JlbF9jb25zaWRlcl9zdGFydHVwKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lk IHNldF9iYXNlX3JlbF9zaXplcyhQbGFubmVySW5mbyAqcm9vdCk7CitzdGF0aWMgdm9pZCBzZXR1 cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBzZXRf YmFzZV9yZWxfcGF0aGxpc3RzKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lkIHNldF9y ZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJIEluZGV4 IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKQEAgLTExNCw2ICsxMTgsNyBAQCBzdGF0aWMgdm9p ZCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJCQkJCUluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKIHN0YXRpYyB2b2lkIHNl dF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJCQkJCQlJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0ZSk7CitzdGF0aWMgdm9pZCBz ZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCk7CiBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJIExpc3QgKmxpdmVfY2hpbGRyZWxz LAogCQkJCQkJCQkJCSBMaXN0ICphbGxfY2hpbGRfcGF0aGtleXMpOwpAQCAtMTgyLDYgKzE4Nywx MSBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW5saXN0KQogCSAq LwogCXNldF9iYXNlX3JlbF9zaXplcyhyb290KTsKIAorCS8qCisJICogQnVpbGQgZ3JvdXBlZCBi YXNlIHJlbGF0aW9ucyBmb3IgZWFjaCBiYXNlIHJlbCBpZiBwb3NzaWJsZS4KKwkgKi8KKwlzZXR1 cF9iYXNlX2dyb3VwZWRfcmVscyhyb290KTsKKwogCS8qCiAJICogV2Ugc2hvdWxkIG5vdyBoYXZl IHNpemUgZXN0aW1hdGVzIGZvciBldmVyeSBhY3R1YWwgdGFibGUgaW52b2x2ZWQgaW4KIAkgKiB0 aGUgcXVlcnksIGFuZCB3ZSBhbHNvIGtub3cgd2hpY2ggaWYgYW55IGhhdmUgYmVlbiBkZWxldGVk IGZyb20gdGhlCkBAIC0zMjMsNiArMzMzLDUzIEBAIHNldF9iYXNlX3JlbF9zaXplcyhQbGFubmVy SW5mbyAqcm9vdCkKIAl9CiB9CiAKKy8qCisgKiBzZXR1cF9iYXNlX2dyb3VwZWRfcmVscworICoJ ICBGb3IgZWFjaCAicGxhaW4iIGJhc2UgcmVsYXRpb24sIGJ1aWxkIGEgZ3JvdXBlZCBiYXNlIHJl bGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFnZ3JlZ2F0aW9uIGlzIHBvc3NpYmxlIGFuZCBpZiB0aGlz IHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdyb3VwZWQgcGF0aHMuCisgKi8KK3N0YXRpYyB2b2lkCitz ZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlJbmRleAkJcnRp OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdy b3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJs ZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5n cm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEVhZ2VyIGFnZ3Jl Z2F0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGJhc2UgcmVscyBp bgorCSAqIHRoZSBxdWVyeS4KKwkgKi8KKwlpZiAoYm1zX21lbWJlcnNoaXAocm9vdC0+YWxsX2Jh c2VyZWxzKSAhPSBCTVNfTVVMVElQTEUpCisJCXJldHVybjsKKworCWZvciAocnRpID0gMTsgcnRp IDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8g KnJlbCA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcnRpXTsKKwkJUmVsT3B0SW5mbyAqcmVsX2dy b3VwZWQ7CisJCVJlbEFnZ0luZm8gKmFnZ19pbmZvOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0 eSBzbG90cyBjb3JyZXNwb25kaW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9 PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsJLyog c2FuaXR5IGNoZWNrIG9uIGFycmF5ICovCisJCUFzc2VydChJU19TSU1QTEVfUkVMKHJlbCkpOyAv KiBzYW5pdHkgY2hlY2sgb24gcmVsICovCisKKwkJcmVsX2dyb3VwZWQgPSBidWlsZF9zaW1wbGVf Z3JvdXBlZF9yZWwocm9vdCwgcmVsLT5yZWxpZCwgJmFnZ19pbmZvKTsKKwkJaWYgKHJlbF9ncm91 cGVkKQorCQl7CisJCQkvKiBNYWtlIHRoZSBncm91cGVkIHJlbGF0aW9uIGF2YWlsYWJsZSBmb3Ig am9pbmluZy4gKi8KKwkJCWFkZF9ncm91cGVkX3JlbChyb290LCByZWxfZ3JvdXBlZCwgYWdnX2lu Zm8pOworCQl9CisJfQorfQorCiAvKgogICogc2V0X2Jhc2VfcmVsX3BhdGhsaXN0cwogICoJICBG aW5kcyBhbGwgcGF0aHMgYXZhaWxhYmxlIGZvciBzY2FubmluZyBlYWNoIGJhc2UtcmVsYXRpb24g ZW50cnkuCkBAIC01NTksNiArNjE2LDE1IEBAIHNldF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkvKiBOb3cgZmluZCB0aGUgY2hlYXBlc3Qgb2YgdGhl IHBhdGhzIGZvciB0aGlzIHJlbCAqLwogCXNldF9jaGVhcGVzdChyZWwpOwogCisJLyoKKwkgKiBJ ZiBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoaXMgcmVsIGV4aXN0cywgYnVpbGQgcGFydGlhbCBh Z2dyZWdhdGlvbgorCSAqIHBhdGhzIGZvciBpdC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIGNh biBvbmx5IGhhcHBlbiBhZnRlciB3ZSd2ZSBjYWxsZWQgc2V0X2NoZWFwZXN0KCkgZm9yCisJICog dGhpcyBiYXNlIHJlbCwgYmVjYXVzZSB3ZSBuZWVkIGl0cyBjaGVhcGVzdCBwYXRocy4KKwkgKi8K KwlzZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3Qocm9vdCwgcmVsKTsKKwogI2lmZGVmIE9QVElNSVpF Ul9ERUJVRwogCXBwcmludChyZWwpOwogI2VuZGlmCkBAIC0xMjk0LDYgKzEzNjAsMjggQEAgc2V0 X2FwcGVuZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAlhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChyb290LCByZWwsIGxpdmVfY2hpbGRyZWxzKTsKIH0K IAorLyoKKyAqIHNldF9ncm91cGVkX3JlbF9wYXRobGlzdAorICoJICBJZiBhIGdyb3VwZWQgcmVs YXRpb24gZm9yIHRoZSBnaXZlbiAncmVsJyBleGlzdHMsIGJ1aWxkIHBhcnRpYWwKKyAqCSAgYWdn cmVnYXRpb24gcGF0aHMgZm9yIGl0LgorICovCitzdGF0aWMgdm9pZAorc2V0X2dyb3VwZWRfcmVs X3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpCit7CisJUmVsT3B0 SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkvKiBBZGQgcGF0 aHMgdG8gdGhlIGdyb3VwZWQgYmFzZSByZWxhdGlvbiBpZiBvbmUgZXhpc3RzLiAqLworCXJlbF9n cm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJlbGlkcywKKwkJCQkJCQkJICAg JmFnZ19pbmZvKTsKKwlpZiAocmVsX2dyb3VwZWQpCisJeworCQlnZW5lcmF0ZV9ncm91cGVkX3Bh dGhzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwsCisJCQkJCQkJICAgYWdnX2luZm8pOworCQlzZXRf Y2hlYXBlc3QocmVsX2dyb3VwZWQpOworCX0KK30KKwogCiAvKgogICogYWRkX3BhdGhzX3RvX2Fw cGVuZF9yZWwKQEAgLTMzMDIsNiArMzM5MCwzMTEgQEAgZ2VuZXJhdGVfdXNlZnVsX2dhdGhlcl9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBib29sIG92ZXJyaWRlX3IK IAl9CiB9CiAKKy8qCisgKiBnZW5lcmF0ZV9ncm91cGVkX3BhdGhzCisgKgkJR2VuZXJhdGUgcGF0 aHMgZm9yIGEgZ3JvdXBlZCByZWxhdGlvbiBieSBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQKKyAq CQlwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiBwYXRocyBvZiB0aGUgcGxhaW4g YmFzZSBvciBqb2luCisgKgkJcmVsYXRpb24uCisgKgorICogVGhlIGluZm9ybWF0aW9uIG5lZWRl ZCBhcmUgcHJvdmlkZWQgYnkgdGhlIFJlbEFnZ0luZm8gc3RydWN0dXJlLgorICovCit2b2lkCitn ZW5lcmF0ZV9ncm91cGVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxf Z3JvdXBlZCwKKwkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX3BsYWluLCBSZWxBZ2dJbmZvICphZ2df aW5mbykKK3sKKwlBZ2dDbGF1c2VDb3N0cyBhZ2dfY29zdHM7CisJYm9vbAkJY2FuX2hhc2g7CisJ Ym9vbAkJY2FuX3NvcnQ7CisJUGF0aAkgICAqY2hlYXBlc3RfdG90YWxfcGF0aCA9IE5VTEw7CisJ UGF0aAkgICAqY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gTlVMTDsKKwlkb3VibGUJCWROdW1Hcm91 cHMgPSAwOworCWRvdWJsZQkJZE51bVBhcnRpYWxHcm91cHMgPSAwOworCisJaWYgKElTX0RVTU1Z X1JFTChyZWxfcGxhaW4pKQorCXsKKwkJbWFya19kdW1teV9yZWwocmVsX2dyb3VwZWQpOworCQly ZXR1cm47CisJfQorCisJTWVtU2V0KCZhZ2dfY29zdHMsIDAsIHNpemVvZihBZ2dDbGF1c2VDb3N0 cykpOworCWdldF9hZ2dfY2xhdXNlX2Nvc3RzKHJvb3QsIEFHR1NQTElUX0lOSVRJQUxfU0VSSUFM LCAmYWdnX2Nvc3RzKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoZXRoZXIgaXQncyBwb3NzaWJs ZSB0byBwZXJmb3JtIHNvcnQtYmFzZWQgaW1wbGVtZW50YXRpb25zCisJICogb2YgZ3JvdXBpbmcu CisJICovCisJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJsZShhZ2dfaW5mby0+Z3JvdXBf Y2xhdXNlcyk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBjb25zaWRl ciBoYXNoLWJhc2VkIGltcGxlbWVudGF0aW9ucyBvZgorCSAqIGdyb3VwaW5nLgorCSAqLworCUFz c2VydChyb290LT5udW1PcmRlcmVkQWdncyA9PSAwKTsKKwljYW5faGFzaCA9IChhZ2dfaW5mby0+ Z3JvdXBfY2xhdXNlcyAhPSBOSUwgJiYKKwkJCQlncm91cGluZ19pc19oYXNoYWJsZShhZ2dfaW5m by0+Z3JvdXBfY2xhdXNlcykpOworCisJLyoKKwkgKiBDb25zaWRlciB3aGV0aGVyIHdlIHNob3Vs ZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBub24tcGFydGlhbAorCSAqIHBhdGhzLiAg V2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgbm9uLXBhcnRpYWwgcGF0aC4KKwkgKi8K KwlpZiAocmVsX3BsYWluLT5wYXRobGlzdCAhPSBOSUwpCisJeworCQljaGVhcGVzdF90b3RhbF9w YXRoID0gcmVsX3BsYWluLT5jaGVhcGVzdF90b3RhbF9wYXRoOworCQlBc3NlcnQoY2hlYXBlc3Rf dG90YWxfcGF0aCAhPSBOVUxMKTsKKwl9CisKKwkvKgorCSAqIElmIHBhcmFsbGVsaXNtIGlzIHBv c3NpYmxlIGZvciByZWxfZ3JvdXBlZCwgdGhlbiB3ZSBzaG91bGQgY29uc2lkZXIKKwkgKiBnZW5l cmF0aW5nIHBhcnRpYWxseS1ncm91cGVkIHBhcnRpYWwgcGF0aHMuICBIb3dldmVyLCBpZiB0aGUg cGxhaW4gcmVsCisJICogaGFzIG5vIHBhcnRpYWwgcGF0aHMsIHRoZW4gd2UgY2FuJ3QuCisJICov CisJaWYgKHJlbF9ncm91cGVkLT5jb25zaWRlcl9wYXJhbGxlbCAmJiByZWxfcGxhaW4tPnBhcnRp YWxfcGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gbGluaXRp YWwocmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0KTsKKwkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRp YWxfcGF0aCAhPSBOVUxMKTsKKwl9CisKKwkvKiBFc3RpbWF0ZSBudW1iZXIgb2YgcGFydGlhbCBn cm91cHMuICovCisJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGggIT0gTlVMTCkKKwkJZE51bUdyb3Vw cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkgYWdnX2luZm8tPmdyb3Vw X2V4cHJzLAorCQkJCQkJCQkJCSBjaGVhcGVzdF90b3RhbF9wYXRoLT5yb3dzLAorCQkJCQkJCQkJ CSBOVUxMLCBOVUxMKTsKKwlpZiAoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJCWRO dW1QYXJ0aWFsR3JvdXBzID0gZXN0aW1hdGVfbnVtX2dyb3Vwcyhyb290LAorCQkJCQkJCQkJCQkJ YWdnX2luZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCQkJY2hlYXBlc3RfcGFydGlhbF9wYXRo LT5yb3dzLAorCQkJCQkJCQkJCQkJTlVMTCwgTlVMTCk7CisKKwlpZiAoY2FuX3NvcnQgJiYgY2hl YXBlc3RfdG90YWxfcGF0aCAhPSBOVUxMKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyoK KwkJICogVXNlIGFueSBhdmFpbGFibGUgc3VpdGFibHktc29ydGVkIHBhdGggYXMgaW5wdXQsIGFu ZCBhbHNvIGNvbnNpZGVyCisJCSAqIHNvcnRpbmcgdGhlIGNoZWFwZXN0LXRvdGFsIHBhdGguCisJ CSAqLworCQlmb3JlYWNoKGxjLCByZWxfcGxhaW4tPnBhdGhsaXN0KQorCQl7CisJCQlQYXRoCSAg ICppbnB1dF9wYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwkJCVBhdGgJICAgKnBhdGg7CisJ CQlib29sCQlpc19zb3J0ZWQ7CisJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKKworCQkJLyoKKwkJ CSAqIFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1ncm91cGVkIHJlbGF0aW9u IHRoYXQgaXMKKwkJCSAqIG5vdCBhd2FyZSBvZiBlYWdlciBhZ2dyZWdhdGlvbiwgd2UgbXVzdCBl bnN1cmUgdGhhdCBpdCBwcm92aWRlcworCQkJICogdGhlIGNvcnJlY3QgaW5wdXQgZm9yIHBhcnRp YWwgYWdncmVnYXRpb24uCisJCQkgKi8KKwkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfcHJvamVj dGlvbl9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJ CSAgIGlucHV0X3BhdGgsCisJCQkJCQkJCQkJCQkgICBhZ2dfaW5mby0+YWdnX2lucHV0KTsKKwor CQkJaXNfc29ydGVkID0gcGF0aGtleXNfY291bnRfY29udGFpbmVkX2luKGFnZ19pbmZvLT5ncm91 cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkm cHJlc29ydGVkX2tleXMpOworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJCQkJLyoKKwkJCQkg KiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQgYWxzbyB0cnkKKwkJ CQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMgcGFydGlhbGx5IHNv cnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBhdGhzIHdoaWNoIGhh dmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNvcnQgaXMgZGlzYWJs ZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0aCkuCisJCQkJICov CisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfdG90YWxfcGF0aCAmJgorCQkJCQkocHJl c29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpKQorCQkJCQljb250 aW51ZTsKKworCQkJCS8qCisJCQkJICogV2UndmUgbm8gbmVlZCB0byBjb25zaWRlciBib3RoIGEg c29ydCBhbmQgaW5jcmVtZW50YWwgc29ydC4KKwkJCQkgKiBXZSdsbCBqdXN0IGRvIGEgc29ydCBp ZiB0aGVyZSBhcmUgbm8gcHJlc29ydGVkIGtleXMgYW5kIGFuCisJCQkJICogaW5jcmVtZW50YWwg c29ydCB3aGVuIHRoZXJlIGFyZSBwcmVzb3J0ZWQga2V5cy4KKwkJCQkgKi8KKwkJCQlpZiAocHJl c29ydGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCisJCQkJCXBhdGgg PSAoUGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJIHJlbF9ncm91 cGVkLAorCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCSBhZ2dfaW5mby0+Z3JvdXBf cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWVsc2UKKwkJCQkJcGF0aCA9IChQ YXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkJ CQkgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCQkJ IGFnZ19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgcHJlc29ydGVkX2tl eXMsCisJCQkJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJfQorCisJCQkvKgorCQkJICogcXVhbCBp cyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVudGls CisJCQkgKiB0aGUgZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0ZSBpcyBrbm93bi4KKwkJCSAq LworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCQly ZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdl dCwKKwkJCQkJCQkJCQkJQUdHX1NPUlRFRCwKKwkJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9T RVJJQUwsCisJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCQlO SUwsCisJCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJ CQlhZGRfcGF0aChyZWxfZ3JvdXBlZCwgcGF0aCk7CisJCX0KKwl9CisKKwlpZiAoY2FuX3NvcnQg JiYgY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJeworCQlMaXN0Q2VsbCAgICpsYzsK KworCQkvKiBTaW1pbGFyIHRvIGFib3ZlIGxvZ2ljLCBidXQgZm9yIHBhcnRpYWwgcGF0aHMuICov CisJCWZvcmVhY2gobGMsIHJlbF9wbGFpbi0+cGFydGlhbF9wYXRobGlzdCkKKwkJeworCQkJUGF0 aAkgICAqaW5wdXRfcGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRo OworCQkJYm9vbAkJaXNfc29ydGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8q CisJCQkgKiBTaW5jZSB0aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20gYSBub24tZ3JvdXBlZCByZWxh dGlvbiB0aGF0IGlzCisJCQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11 c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciBw YXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3By b2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJ CQkJCQkgICBpbnB1dF9wYXRoLAorCQkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7 CisKKwkJCWlzX3NvcnRlZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihhZ2dfaW5mby0+ Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJCQkJ CQkJJnByZXNvcnRlZF9rZXlzKTsKKworCQkJaWYgKCFpc19zb3J0ZWQpCisJCQl7CisJCQkJLyoK KwkJCQkgKiBUcnkgYXQgbGVhc3Qgc29ydGluZyB0aGUgY2hlYXBlc3QgcGF0aCBhbmQgYWxzbyB0 cnkKKwkJCQkgKiBpbmNyZW1lbnRhbGx5IHNvcnRpbmcgYW55IHBhdGggd2hpY2ggaXMgcGFydGlh bGx5IHNvcnRlZAorCQkJCSAqIGFscmVhZHkgKG5vIG5lZWQgdG8gZGVhbCB3aXRoIHBhdGhzIHdo aWNoIGhhdmUgcHJlc29ydGVkCisJCQkJICoga2V5cyB3aGVuIGluY3JlbWVudGFsIHNvcnQgaXMg ZGlzYWJsZWQgdW5sZXNzIGl0J3MgdGhlCisJCQkJICogY2hlYXBlc3QgaW5wdXQgcGF0aCkuCisJ CQkJICovCisJCQkJaWYgKGlucHV0X3BhdGggIT0gY2hlYXBlc3RfcGFydGlhbF9wYXRoICYmCisJ CQkJCShwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkpCisJ CQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBubyBuZWVkIHRvIGNvbnNpZGVy IGJvdGggYSBzb3J0IGFuZCBpbmNyZW1lbnRhbCBzb3J0LgorCQkJCSAqIFdlJ2xsIGp1c3QgZG8g YSBzb3J0IGlmIHRoZXJlIGFyZSBubyBwcmVzb3J0ZWQga2V5cyBhbmQgYW4KKwkJCQkgKiBpbmNy ZW1lbnRhbCBzb3J0IHdoZW4gdGhlcmUgYXJlIHByZXNvcnRlZCBrZXlzLgorCQkJCSAqLworCQkJ CWlmIChwcmVzb3J0ZWRfa2V5cyA9PSAwIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJ CQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkg cmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJIGFnZ19pbmZv LT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJZWxzZQorCQkJCQlw YXRoID0gKFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJ CQkJCQkJCQkJCSByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJ CQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCSBwcmVz b3J0ZWRfa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQl9CisKKwkJCS8qCisJCQkg KiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBIQVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0 ZWQgdW50aWwKKwkJCSAqIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3du LgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJ CQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCQlhZ2dfaW5m by0+dGFyZ2V0LAorCQkJCQkJCQkJCQlBR0dfU09SVEVELAorCQkJCQkJCQkJCQlBR0dTUExJVF9J TklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJ CQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkJJmFnZ19jb3N0cywKKwkJCQkJCQkJCQkJZE51bVBhcnRp YWxHcm91cHMpOworCisJCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91cGVkLCBwYXRoKTsKKwkJ fQorCX0KKworCS8qCisJICogQWRkIGEgcGFydGlhbGx5LWdyb3VwZWQgSGFzaEFnZyBQYXRoIHdo ZXJlIHBvc3NpYmxlCisJICovCisJaWYgKGNhbl9oYXNoICYmIGNoZWFwZXN0X3RvdGFsX3BhdGgg IT0gTlVMTCkKKwl7CisJCVBhdGgJICAgKnBhdGg7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHBh dGggb3JpZ2luYXRlcyBmcm9tIGEgbm9uLWdyb3VwZWQgcmVsYXRpb24gdGhhdCBpcyBub3QKKwkJ ICogYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJv dmlkZXMgdGhlCisJCSAqIGNvcnJlY3QgaW5wdXQgZm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJ CSAqLworCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJ CQkJCQkJCQkgICByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfdG90YWxfcGF0 aCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJLyoKKwkJICogcXVh bCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVu dGlsIHRoZQorCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUgYWdncmVnYXRlIGlzIGtub3duLgorCQkg Ki8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCXJl bF9ncm91cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdldCwK KwkJCQkJCQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxfU0VSSUFM LAorCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCU5JTCwKKwkJ CQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWROdW1Hcm91cHMpOworCisJCWFkZF9wYXRo KHJlbF9ncm91cGVkLCBwYXRoKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhZGQgYSBwYXJ0aWFsbHkt Z3JvdXBlZCBIYXNoQWdnIHBhcnRpYWwgUGF0aCB3aGVyZSBwb3NzaWJsZQorCSAqLworCWlmIChj YW5faGFzaCAmJiBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCkKKwl7CisJCVBhdGgJICAg KnBhdGg7CisKKwkJLyoKKwkJICogU2luY2UgdGhlIHBhdGggb3JpZ2luYXRlcyBmcm9tIGEgbm9u LWdyb3VwZWQgcmVsYXRpb24gdGhhdCBpcyBub3QKKwkJICogYXdhcmUgb2YgZWFnZXIgYWdncmVn YXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQgaXQgcHJvdmlkZXMgdGhlCisJCSAqIGNvcnJlY3Qg aW5wdXQgZm9yIHBhcnRpYWwgYWdncmVnYXRpb24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX3Byb2plY3Rpb25fcGF0aChyb290LAorCQkJCQkJCQkJCQkgICByZWxfZ3JvdXBlZCwK KwkJCQkJCQkJCQkJICAgY2hlYXBlc3RfcGFydGlhbF9wYXRoLAorCQkJCQkJCQkJCQkgICBhZ2df aW5mby0+YWdnX2lucHV0KTsKKworCQkvKgorCQkgKiBxdWFsIGlzIE5JTCBiZWNhdXNlIHRoZSBI QVZJTkcgY2xhdXNlIGNhbm5vdCBiZSBldmFsdWF0ZWQgdW50aWwgdGhlCisJCSAqIGZpbmFsIHZh bHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCSAqLworCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX2FnZ19wYXRoKHJvb3QsCisJCQkJCQkJCQkJcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJ cGF0aCwKKwkJCQkJCQkJCQlhZ2dfaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJCUFHR19IQVNIRUQs CisJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJCQkJCQkJCQkJYWdnX2luZm8t Pmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJTklMLAorCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJ CQkJCQkJCQkJZE51bVBhcnRpYWxHcm91cHMpOworCisJCWFkZF9wYXJ0aWFsX3BhdGgocmVsX2dy b3VwZWQsIHBhdGgpOworCX0KK30KKwogLyoKICAqIG1ha2VfcmVsX2Zyb21fam9pbmxpc3QKICAq CSAgQnVpbGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpvaW5saXN0IiB0byBndWlkZSB0aGUgam9p biBwYXRoIHNlYXJjaC4KQEAgLTM0NjIsNiArMzg1NSwxMCBAQCBzdGFuZGFyZF9qb2luX3NlYXJj aChQbGFubmVySW5mbyAqcm9vdCwgaW50IGxldmVsc19uZWVkZWQsIExpc3QgKmluaXRpYWxfcmVs cykKIAkJICoKIAkJICogQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZyBwYXRocyBmb3Ig dGhlIGpvaW5yZWwsIHNvIHJ1bgogCQkgKiBzZXRfY2hlYXBlc3QoKS4KKwkJICoKKwkJICogSW4g YWRkaXRpb24sIHdlIGFsc28gcnVuIGdlbmVyYXRlX2dyb3VwZWRfcGF0aHMoKSBmb3IgdGhlIGdy b3VwZWQKKwkJICogcmVsYXRpb24gb2YgZWFjaCBqdXN0LXByb2Nlc3NlZCBqb2lucmVsLCBhbmQg cnVuIHNldF9jaGVhcGVzdCgpIGZvcgorCQkgKiB0aGUgZ3JvdXBlZCByZWxhdGlvbiBhZnRlcndh cmRzLgogCQkgKi8KIAkJZm9yZWFjaChsYywgcm9vdC0+am9pbl9yZWxfbGV2ZWxbbGV2XSkKIAkJ ewpAQCAtMzQ4Miw2ICszODc5LDI3IEBAIHN0YW5kYXJkX2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZv ICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlhbF9yZWxzKQogCQkJLyogRmlu ZCBhbmQgc2F2ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9yIHRoaXMgcmVsICovCiAJCQlzZXRfY2hl YXBlc3QocmVsKTsKIAorCQkJLyoKKwkJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9q b2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGluZworCQkJICogcGFydGlhbCBhZ2dyZWdhdGlvbiBw YXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wIG9mCisJCQkgKiB0aGUgcGF0aHMg b2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzCisJCQkg KiBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3QoKS4KKwkJCSAq LworCQkJaWYgKCFibXNfZXF1YWwocmVsLT5yZWxpZHMsIHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkK KwkJCXsKKwkJCQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwkJCQlSZWxBZ2dJbmZvICphZ2df aW5mbzsKKworCQkJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJl bGlkcywKKwkJCQkJCQkJCQkJICAgJmFnZ19pbmZvKTsKKwkJCQlpZiAocmVsX2dyb3VwZWQpCisJ CQkJeworCQkJCQlnZW5lcmF0ZV9ncm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCByZWws CisJCQkJCQkJCQkJICAgYWdnX2luZm8pOworCQkJCQlzZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQp OworCQkJCX0KKwkJCX0KKwogI2lmZGVmIE9QVElNSVpFUl9ERUJVRwogCQkJcHByaW50KHJlbCk7 CiAjZW5kaWYKQEAgLTQzNTAsNiArNDc2OCwyOSBAQCBnZW5lcmF0ZV9wYXJ0aXRpb253aXNlX2pv aW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAkJaWYgKElTX0RV TU1ZX1JFTChjaGlsZF9yZWwpKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogRXhjZXB0IGZv ciB0aGUgdG9wbW9zdCBzY2FuL2pvaW4gcmVsLCBjb25zaWRlciBnZW5lcmF0aW5nIHBhcnRpYWwK KwkJICogYWdncmVnYXRpb24gcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uIG9uIHRvcCBv ZiB0aGUgcGF0aHMgb2YKKwkJICogdGhpcyBwYXJ0aXRpb25lZCBjaGlsZC1qb2luLiAgQWZ0ZXIg dGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZyBwYXRocworCQkgKiBmb3IgdGhlIGdyb3VwZWQgcmVs YXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3QoKS4KKwkJICovCisJCWlmICghYm1zX2VxdWFsKElT X09USEVSX1JFTChyZWwpID8KKwkJCQkJICAgcmVsLT50b3BfcGFyZW50X3JlbGlkcyA6IHJlbC0+ cmVsaWRzLAorCQkJCQkgICByb290LT5hbGxfcXVlcnlfcmVscykpCisJCXsKKwkJCVJlbE9wdElu Zm8gKnJlbF9ncm91cGVkOworCQkJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkJCXJlbF9ncm91 cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCBjaGlsZF9yZWwtPnJlbGlkcywKKwkJCQkJCQkJ CQkgICAmYWdnX2luZm8pOworCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJeworCQkJCWdlbmVyYXRl X2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3VwZWQsIGNoaWxkX3JlbCwKKwkJCQkJCQkJCSAg IGFnZ19pbmZvKTsKKwkJCQlzZXRfY2hlYXBlc3QocmVsX2dyb3VwZWQpOworCQkJfQorCQl9CisK ICNpZmRlZiBPUFRJTUlaRVJfREVCVUcKIAkJcHByaW50KGNoaWxkX3JlbCk7CiAjZW5kaWYKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCmluZGV4IDdkYjVlMzBlZWYuLmUxYTJkM2I0 MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTYsMTEgKzE2LDEz IEBACiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5k aW5mby5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L2pvaW5pbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAi b3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaCIK ICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgi CiAKIAogc3RhdGljIHZvaWQgbWFrZV9yZWxzX2J5X2NsYXVzZV9qb2lucyhQbGFubmVySW5mbyAq cm9vdCwKQEAgLTM1LDYgKzM3LDkgQEAgc3RhdGljIGJvb2wgaGFzX2xlZ2FsX2pvaW5jbGF1c2Uo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CiBzdGF0aWMgYm9vbCByZXN0cmlj dGlvbl9pc19jb25zdGFudF9mYWxzZShMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJICBS ZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQkJCSAgYm9vbCBvbmx5X3B1c2hlZF9kb3duKTsK K3N0YXRpYyB2b2lkIG1ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsMSwKKwkJCQkJCQkJICBSZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpq b2lucmVsLAorCQkJCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmlj dGxpc3QpOwogc3RhdGljIHZvaWQgcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDIs IFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJCQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8s IExpc3QgKnJlc3RyaWN0bGlzdCk7CkBAIC03NzEsNiArNzc2LDEwIEBAIG1ha2Vfam9pbl9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIpCiAJ CXJldHVybiBqb2lucmVsOwogCX0KIAorCS8qIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9u IGZvciAnam9pbnJlbCcgaWYgcG9zc2libGUuICovCisJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJv b3QsIHJlbDEsIHJlbDIsIGpvaW5yZWwsIHNqaW5mbywKKwkJCQkJCSAgcmVzdHJpY3RsaXN0KTsK KwogCS8qIEFkZCBwYXRocyB0byB0aGUgam9pbiByZWxhdGlvbi4gKi8KIAlwb3B1bGF0ZV9qb2lu cmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMSwgcmVsMiwgam9pbnJlbCwgc2ppbmZvLAogCQkJCQkJ CQlyZXN0cmljdGxpc3QpOwpAQCAtODgyLDYgKzg5MSwxMjcgQEAgYWRkX291dGVyX2pvaW5zX3Rv X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIGlucHV0X3JlbGlkcywKIAlyZXR1cm4g aW5wdXRfcmVsaWRzOwogfQogCisvKgorICogbWFrZV9ncm91cGVkX2pvaW5fcmVsCisgKgkgIEJ1 aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIG91dCBvZiAnam9pbnJlbCcgaWYgZWFnZXIgYWdn cmVnYXRpb24gaXMKKyAqCSAgcG9zc2libGUgYW5kIHRoZSAnam9pbnJlbCcgY2FuIHByb2R1Y2Ug Z3JvdXBlZCBwYXRocy4KKyAqCisgKiBXZSBhbHNvIGdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRp b24gcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uIGJ5CisgKiBqb2luaW5nIHRoZSBncm91 cGVkIHBhdGhzIG9mICdyZWwxJyB0byB0aGUgcGxhaW4gcGF0aHMgb2YgJ3JlbDInLCBvciBieQor ICogam9pbmluZyB0aGUgZ3JvdXBlZCBwYXRocyBvZiAncmVsMicgdG8gdGhlIHBsYWluIHBhdGhz IG9mICdyZWwxJy4KKyAqLworc3RhdGljIHZvaWQKK21ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwKKwkJCQkJICBSZWxPcHRJbmZvICpyZWwy LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBM aXN0ICpyZXN0cmljdGxpc3QpCit7CisJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsQWdn SW5mbyAqYWdnX2luZm8gPSBOVUxMOworCVJlbE9wdEluZm8gKnJlbDFfZ3JvdXBlZDsKKwlSZWxP cHRJbmZvICpyZWwyX2dyb3VwZWQ7CisJYm9vbAkJcmVsMV9lbXB0eTsKKwlib29sCQlyZWwyX2Vt cHR5OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9y IGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3Nz aWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290 LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFNlZSBpZiB3 ZSBhbHJlYWR5IGhhdmUgYSBncm91cGVkIGpvaW5yZWwgZm9yIHRoaXMgam9pbnJlbC4KKwkgKi8K KwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbC0+cmVsaWRzLCAm YWdnX2luZm8pOworCisJLyoKKwkgKiBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3IgdGhl IGdyb3VwZWQgam9pbiByZWxhdGlvbiBpZiB0aGVyZSBpcyBubworCSAqIGV4aXN0aW5nIG9uZS4K KwkgKi8KKwlpZiAocmVsX2dyb3VwZWQgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFByZXBhcmUg dGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3IgdGhpcwor CQkgKiBqb2luIHJlbGF0aW9uLgorCQkgKi8KKwkJYWdnX2luZm8gPSBjcmVhdGVfcmVsX2FnZ19p bmZvKHJvb3QsIGpvaW5yZWwpOworCQlpZiAoYWdnX2luZm8gPT0gTlVMTCkKKwkJCXJldHVybjsK KworCQkvKiBidWlsZCBhIGdyb3VwZWQgcmVsYXRpb24gb3V0IG9mIHRoZSBwbGFpbiByZWxhdGlv biAqLworCQlyZWxfZ3JvdXBlZCA9IGJ1aWxkX2dyb3VwZWRfcmVsKHJvb3QsIGpvaW5yZWwpOwor CQlyZWxfZ3JvdXBlZC0+cmVsdGFyZ2V0ID0gYWdnX2luZm8tPnRhcmdldDsKKwkJcmVsX2dyb3Vw ZWQtPnJvd3MgPSBhZ2dfaW5mby0+Z3JvdXBlZF9yb3dzOworCisJCS8qCisJCSAqIE1ha2UgdGhl IGdyb3VwZWQgcmVsYXRpb24gYXZhaWxhYmxlIGZvciBmdXJ0aGVyIGpvaW5pbmcgb3IgZm9yCisJ CSAqIGFjdGluZyBhcyB0aGUgdXBwZXIgcmVsIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHBh cnRpYWwKKwkJICogYWdncmVnYXRpb24uCisJCSAqLworCQlhZGRfZ3JvdXBlZF9yZWwocm9vdCwg cmVsX2dyb3VwZWQsIGFnZ19pbmZvKTsKKwl9CisKKwlBc3NlcnQoYWdnX2luZm8gIT0gTlVMTCk7 CisKKwkvKiBXZSBtYXkgaGF2ZSBhbHJlYWR5IHByb3ZlbiB0aGlzIGdyb3VwZWQgam9pbiByZWxh dGlvbiB0byBiZSBkdW1teS4gKi8KKwlpZiAoSVNfRFVNTVlfUkVMKHJlbF9ncm91cGVkKSkKKwkJ cmV0dXJuOworCisJLyogUmV0cmlldmUgdGhlIGdyb3VwZWQgcmVsYXRpb25zIGZvciB0aGUgdHdv IGlucHV0IHJlbHMgKi8KKwlyZWwxX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJl bDEtPnJlbGlkcywgTlVMTCk7CisJcmVsMl9ncm91cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290 LCByZWwyLT5yZWxpZHMsIE5VTEwpOworCisJcmVsMV9lbXB0eSA9IChyZWwxX2dyb3VwZWQgPT0g TlVMTCB8fCBJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7CisJcmVsMl9lbXB0eSA9IChyZWwy X2dyb3VwZWQgPT0gTlVMTCB8fCBJU19EVU1NWV9SRUwocmVsMl9ncm91cGVkKSk7CisKKwkvKiBO b3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gZ3JvdXBlZCByZWxhdGlvbi4gKi8KKwlpZiAocmVs MV9lbXB0eSAmJiByZWwyX2VtcHR5KQorCQlyZXR1cm47CisKKwkvKgorCSAqIEpvaW5pbmcgdHdv IGdyb3VwZWQgcmVsYXRpb25zIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiAgR3JvdXBpbmcg b25lCisJICogc2lkZSB3b3VsZCBhbHRlciB0aGUgb2NjdXJyZW5jZSBvZiB0aGUgb3RoZXIgc2lk ZSdzIGFnZ3JlZ2F0ZSB0cmFuc2llbnQKKwkgKiBzdGF0ZXMgaW4gdGhlIGZpbmFsIGFnZ3JlZ2F0 aW9uIGlucHV0LiAgV2hpbGUgdGhpcyBpc3N1ZSBjb3VsZCBiZQorCSAqIGFkZHJlc3NlZCBieSBh ZGp1c3RpbmcgdGhlIHRyYW5zaWVudCBzdGF0ZXMsIGl0IGlzIG5vdCBkZWVtZWQKKwkgKiB3b3J0 aHdoaWxlIGZvciBub3cuCisJICovCisJaWYgKCFyZWwxX2VtcHR5ICYmICFyZWwyX2VtcHR5KQor CQlyZXR1cm47CisKKwkvKiBHZW5lcmF0ZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0 aGUgZ3JvdXBlZCByZWxhdGlvbiAqLworCWlmICghcmVsMV9lbXB0eSkKKwl7CisJCXNldF9qb2lu cmVsX3NpemVfZXN0aW1hdGVzKHJvb3QsIHJlbF9ncm91cGVkLCByZWwxX2dyb3VwZWQsIHJlbDIs CisJCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKwkJcG9wdWxhdGVfam9pbnJlbF93 aXRoX3BhdGhzKHJvb3QsIHJlbDFfZ3JvdXBlZCwgcmVsMiwgcmVsX2dyb3VwZWQsCisJCQkJCQkJ CQlzamluZm8sIHJlc3RyaWN0bGlzdCk7CisKKwkJLyoKKwkJICogSXQgc2hvdWxkbid0IGhhcHBl biB0aGF0IHdlIGhhdmUgbWFya2VkIHJlbDFfZ3JvdXBlZCBhcyBkdW1teSBpbgorCQkgKiBwb3B1 bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMgZHVlIHRvIHByb3ZhYmx5IGNvbnN0YW50LWZhbHNlIGpv aW4KKwkJICogcmVzdHJpY3Rpb25zLCBoZW5jZSB3ZSB3b3VsZG4ndCBlbmQgdXAgd2l0aCBhIHBs YW4gdGhhdCBoYXMgQWdncmVmCisJCSAqIGluIG5vbi1BZ2cgcGxhbiBub2RlLgorCQkgKi8KKwkJ QXNzZXJ0KCFJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7CisJfQorCWVsc2UgaWYgKCFyZWwy X2VtcHR5KQorCXsKKwkJc2V0X2pvaW5yZWxfc2l6ZV9lc3RpbWF0ZXMocm9vdCwgcmVsX2dyb3Vw ZWQsIHJlbDEsIHJlbDJfZ3JvdXBlZCwKKwkJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3Qp OworCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMSwgcmVsMl9ncm91cGVk LCByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCXNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKworCQkvKgor CQkgKiBJdCBzaG91bGRuJ3QgaGFwcGVuIHRoYXQgd2UgaGF2ZSBtYXJrZWQgcmVsMl9ncm91cGVk IGFzIGR1bW15IGluCisJCSAqIHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyBkdWUgdG8gcHJv dmFibHkgY29uc3RhbnQtZmFsc2Ugam9pbgorCQkgKiByZXN0cmljdGlvbnMsIGhlbmNlIHdlIHdv dWxkbid0IGVuZCB1cCB3aXRoIGEgcGxhbiB0aGF0IGhhcyBBZ2dyZWYKKwkJICogaW4gbm9uLUFn ZyBwbGFuIG5vZGUuCisJCSAqLworCQlBc3NlcnQoIUlTX0RVTU1ZX1JFTChyZWwyX2dyb3VwZWQp KTsKKwl9Cit9CisKIC8qCiAgKiBwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMKICAqCSAgQWRk IHBhdGhzIHRvIHRoZSBnaXZlbiBqb2lucmVsIGZvciBnaXZlbiBwYWlyIG9mIGpvaW5pbmcgcmVs YXRpb25zLiBUaGUKQEAgLTE2NzQsNiArMTgwNCwxMSBAQCB0cnlfcGFydGl0aW9ud2lzZV9qb2lu KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAog CQkJCQkJIGFkanVzdF9jaGlsZF9yZWxpZHMoam9pbnJlbC0+cmVsaWRzLAogCQkJCQkJCQkJCQkg bmFwcGluZm9zLCBhcHBpbmZvcykpKTsKIAorCQkvKiBCdWlsZCBhIGdyb3VwZWQgam9pbiByZWxh dGlvbiBmb3IgJ2NoaWxkX2pvaW5yZWwnIGlmIHBvc3NpYmxlICovCisJCW1ha2VfZ3JvdXBlZF9q b2luX3JlbChyb290LCBjaGlsZF9yZWwxLCBjaGlsZF9yZWwyLAorCQkJCQkJCSAgY2hpbGRfam9p bnJlbCwgY2hpbGRfc2ppbmZvLAorCQkJCQkJCSAgY2hpbGRfcmVzdHJpY3RsaXN0KTsKKwogCQkv KiBBbmQgbWFrZSBwYXRocyBmb3IgdGhlIGNoaWxkIGpvaW4gKi8KIAkJcG9wdWxhdGVfam9pbnJl bF93aXRoX3BhdGhzKHJvb3QsIGNoaWxkX3JlbDEsIGNoaWxkX3JlbDIsCiAJCQkJCQkJCQljaGls ZF9qb2lucmVsLCBjaGlsZF9zamluZm8sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9pbml0c3BsYW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxh bi5jCmluZGV4IGUyYzY4ZmU2ZjkuLjJjYTAzNWRkODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2luaXRzcGxhbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jl cy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf dHlwZS5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25v ZGVGdW5jcy5oIgpAQCAtODAsNiArODEsOCBAQCB0eXBlZGVmIHN0cnVjdCBKb2luVHJlZUl0ZW0K IH0gSm9pblRyZWVJdGVtOwogCiAKK3N0YXRpYyB2b2lkIGNyZWF0ZV9hZ2dfY2xhdXNlX2luZm9z KFBsYW5uZXJJbmZvICpyb290KTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9ncm91cGluZ19leHByX2lu Zm9zKFBsYW5uZXJJbmZvICpyb290KTsKIHN0YXRpYyB2b2lkIGV4dHJhY3RfbGF0ZXJhbF9yZWZl cmVuY2VzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpicmVsLAogCQkJCQkJCQkJICAg SW5kZXggcnRpbmRleCk7CiBzdGF0aWMgTGlzdCAqZGVjb25zdHJ1Y3RfcmVjdXJzZShQbGFubmVy SW5mbyAqcm9vdCwgTm9kZSAqanRub2RlLApAQCAtMzI3LDYgKzMzMCwyNTUgQEAgYWRkX3ZhcnNf dG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIAl9CiB9CiAKKy8q CisgKiBzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbgorICoJICBDaGVjayBpZiBlYWdlciBhZ2dyZWdh dGlvbiBpcyBhcHBsaWNhYmxlLCBhbmQgaWYgc28gY29sbGVjdCBzdWl0YWJsZQorICoJICBhZ2dy ZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25zIGluIHRoZSBxdWVyeS4K KyAqLwordm9pZAorc2V0dXBfZWFnZXJfYWdncmVnYXRpb24oUGxhbm5lckluZm8gKnJvb3QpCit7 CisJLyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiBkaXNhYmxlZCBieSB1 c2VyLgorCSAqLworCWlmICghZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSkKKwkJcmV0dXJuOworCisJ LyoKKwkgKiBEb24ndCBhcHBseSBlYWdlciBhZ2dyZWdhdGlvbiBpZiB0aGVyZSBhcmUgbm8gYXZh aWxhYmxlIEdST1VQIEJZCisJICogY2xhdXNlcy4KKwkgKi8KKwlpZiAoIXJvb3QtPnByb2Nlc3Nl ZF9ncm91cENsYXVzZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRy eSB0byBzdXBwb3J0IGdyb3VwaW5nIHNldHMuCisJICovCisJaWYgKHJvb3QtPnBhcnNlLT5ncm91 cGluZ1NldHMpCisJCXJldHVybjsKKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8g c3VwcG9ydCBESVNUSU5DVCBvciBPUkRFUiBCWSBhZ2dyZWdhdGVzLgorCSAqLworCWlmIChyb290 LT5udW1PcmRlcmVkQWdncyA+IDApCisJCXJldHVybjsKKworCS8qCisJICogSWYgdGhlcmUgYXJl IGFueSBhZ2dyZWdhdGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgcGFydGlhbCBtb2RlLCBvciBhbnkK KwkgKiBwYXJ0aWFsIGFnZ3JlZ2F0ZXMgdGhhdCBhcmUgbm9uLXNlcmlhbGl6YWJsZSwgZG8gbm90 IGFwcGx5IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmhhc05vblBh cnRpYWxBZ2dzIHx8IHJvb3QtPmhhc05vblNlcmlhbEFnZ3MpCisJCXJldHVybjsKKworCS8qCisJ ICogV2UgZG9uJ3QgdHJ5IHRvIGFwcGx5IGVhZ2VyIGFnZ3JlZ2F0aW9uIGlmIHRoZXJlIGFyZSBz ZXQtcmV0dXJuaW5nCisJICogZnVuY3Rpb25zIGluIHRhcmdldGxpc3QuCisJICovCisJaWYgKHJv b3QtPnBhcnNlLT5oYXNUYXJnZXRTUkZzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3Qg YWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBwbGFpbiBWYXJzIHRoYXQgYXBwZWFyIGluIHRhcmdl dGxpc3QKKwkgKiBhbmQgaGF2aW5nUXVhbC4KKwkgKi8KKwljcmVhdGVfYWdnX2NsYXVzZV9pbmZv cyhyb290KTsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIHN1aXRhYmxlIGFnZ3JlZ2F0ZSBl eHByZXNzaW9ucywgd2UgY2Fubm90IGFwcGx5IGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICov CisJaWYgKHJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJ ICogQ29sbGVjdCBncm91cGluZyBleHByZXNzaW9ucyB0aGF0IGFwcGVhciBpbiBncm91cGluZyBj bGF1c2VzLgorCSAqLworCWNyZWF0ZV9ncm91cGluZ19leHByX2luZm9zKHJvb3QpOworfQorCisv KgorICogY3JlYXRlX2FnZ19jbGF1c2VfaW5mb3MKKyAqCSAgU2VhcmNoIHRoZSB0YXJnZXRsaXN0 IGFuZCBoYXZpbmdRdWFsIGZvciBBZ2dyZWZzIGFuZCBwbGFpbiBWYXJzLCBhbmQKKyAqCSAgY3Jl YXRlIGFuIEFnZ0NsYXVzZUluZm8gZm9yIGVhY2ggQWdncmVmIG5vZGUuCisgKi8KK3N0YXRpYyB2 b2lkCitjcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlMaXN0 CSAgICp0bGlzdF9leHByczsKKwlMaXN0Q2VsbCAgICpsYzsKKworCUFzc2VydChyb290LT5hZ2df Y2xhdXNlX2xpc3QgPT0gTklMKTsKKwlBc3NlcnQocm9vdC0+dGxpc3RfdmFycyA9PSBOSUwpOwor CisJdGxpc3RfZXhwcnMgPSBwdWxsX3Zhcl9jbGF1c2UoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2Vk X3RsaXN0LAorCQkJCQkJCQkgIFBWQ19JTkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkgIFBW Q19SRUNVUlNFX1dJTkRPV0ZVTkNTIHwKKwkJCQkJCQkJICBQVkNfUkVDVVJTRV9QTEFDRUhPTERF UlMpOworCisJLyoKKwkgKiBGb3Igbm93IHdlIGRvbid0IHRyeSB0byBzdXBwb3J0IEdST1VQSU5H KCkgZXhwcmVzc2lvbnMuCisJICovCisJZm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlF eHByCSAgICpleHByID0gKEV4cHIgKikgbGZpcnN0KGxjKTsKKworCQlpZiAoSXNBKGV4cHIsIEdy b3VwaW5nRnVuYykpCisJCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBBZ2dyZWdhdGVzIHdpdGhp biB0aGUgSEFWSU5HIGNsYXVzZSBuZWVkIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgc2FtZQorCSAq IHdheSBhcyB0aG9zZSBpbiB0aGUgdGFyZ2V0bGlzdC4gIE5vdGUgdGhhdCBIQVZJTkcgY2FuIGNv bnRhaW4gQWdncmVmcworCSAqIGJ1dCBub3QgV2luZG93RnVuY3MuCisJICovCisJaWYgKHJvb3Qt PnBhcnNlLT5oYXZpbmdRdWFsICE9IE5VTEwpCisJeworCQlMaXN0CSAgICpoYXZpbmdfZXhwcnM7 CisKKwkJaGF2aW5nX2V4cHJzID0gcHVsbF92YXJfY2xhdXNlKChOb2RlICopIHJvb3QtPnBhcnNl LT5oYXZpbmdRdWFsLAorCQkJCQkJCQkJICAgUFZDX0lOQ0xVREVfQUdHUkVHQVRFUyB8CisJCQkJ CQkJCQkgICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCQlpZiAoaGF2aW5nX2V4cHJzICE9 IE5JTCkKKwkJeworCQkJdGxpc3RfZXhwcnMgPSBsaXN0X2NvbmNhdCh0bGlzdF9leHBycywgaGF2 aW5nX2V4cHJzKTsKKwkJCWxpc3RfZnJlZShoYXZpbmdfZXhwcnMpOworCQl9CisJfQorCisJZm9y ZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4cHIgKikgbGZp cnN0KGxjKTsKKwkJQWdncmVmCSAgICphZ2dyZWY7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm87 CisKKwkJLyoKKwkJICogY29sbGVjdCBwbGFpbiBWYXJzIGZvciBmdXR1cmUgcmVmZXJlbmNlCisJ CSAqLworCQlpZiAoSXNBKGV4cHIsIFZhcikpCisJCXsKKwkJCXJvb3QtPnRsaXN0X3ZhcnMgPSBs aXN0X2FwcGVuZF91bmlxdWUocm9vdC0+dGxpc3RfdmFycywgZXhwcik7CisJCQljb250aW51ZTsK KwkJfQorCisJCWFnZ3JlZiA9IGNhc3ROb2RlKEFnZ3JlZiwgZXhwcik7CisKKwkJQXNzZXJ0KGFn Z3JlZi0+YWdnb3JkZXIgPT0gTklMKTsKKwkJQXNzZXJ0KGFnZ3JlZi0+YWdnZGlzdGluY3QgPT0g TklMKTsKKworCQlhY19pbmZvID0gbWFrZU5vZGUoQWdnQ2xhdXNlSW5mbyk7CisJCWFjX2luZm8t PmFnZ3JlZiA9IGFnZ3JlZjsKKwkJYWNfaW5mby0+YWdnX2V2YWxfYXQgPSBwdWxsX3Zhcm5vcyhy b290LCAoTm9kZSAqKSBhZ2dyZWYpOworCisJCXJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9CisJCQls aXN0X2FwcGVuZF91bmlxdWUocm9vdC0+YWdnX2NsYXVzZV9saXN0LCBhY19pbmZvKTsKKwl9CisK KwlsaXN0X2ZyZWUodGxpc3RfZXhwcnMpOworfQorCisvKgorICogY3JlYXRlX2dyb3VwaW5nX2V4 cHJfaW5mb3MKKyAqCSAgQ3JlYXRlIEdyb3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbiB1 c2FibGUgYXMgZ3JvdXBpbmcga2V5LgorICoKKyAqIElmIGFueSBncm91cGluZyBleHByZXNzaW9u IGlzIG5vdCBzdWl0YWJsZSwgd2Ugd2lsbCBqdXN0IHJldHVybiB3aXRoCisgKiByb290LT5ncm91 cF9leHByX2xpc3QgYmVpbmcgTklMLgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX2dyb3VwaW5n X2V4cHJfaW5mb3MoUGxhbm5lckluZm8gKnJvb3QpCit7CisJTGlzdAkgICAqZXhwcnMgPSBOSUw7 CisJTGlzdAkgICAqc29ydGdyb3VwcmVmcyA9IE5JTDsKKwlMaXN0CSAgICpidHJlZV9vcGZhbWls aWVzID0gTklMOworCUxpc3RDZWxsICAgKmxjLAorCQkJICAgKmxjMSwKKwkJCSAgICpsYzIsCisJ CQkgICAqbGMzOworCisJQXNzZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9PSBOSUwpOworCisJ Zm9yZWFjaChsYywgcm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKQorCXsKKwkJU29ydEdyb3Vw Q2xhdXNlICpzZ2MgPSBsZmlyc3Rfbm9kZShTb3J0R3JvdXBDbGF1c2UsIGxjKTsKKwkJVGFyZ2V0 RW50cnkgKnRsZSA9IGdldF9zb3J0Z3JvdXBjbGF1c2VfdGxlKHNnYywgcm9vdC0+cHJvY2Vzc2Vk X3RsaXN0KTsKKwkJVHlwZUNhY2hlRW50cnkgKnRjZTsKKwkJT2lkCQkJZXF1YWxpbWFnZXByb2M7 CisJCU9pZAkJCWVxX29wOworCQlMaXN0CSAgICplcV9vcGZhbWlsaWVzOworCQlPaWQJCQlidHJl ZV9vcGZhbWlseTsKKworCQlBc3NlcnQodGxlLT5yZXNzb3J0Z3JvdXByZWYgPiAwKTsKKworCQkv KgorCQkgKiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBwbGFpbiBWYXJzIGFzIGdyb3VwaW5nIGV4 cHJlc3Npb25zLgorCQkgKi8KKwkJaWYgKCFJc0EodGxlLT5leHByLCBWYXIpKQorCQkJcmV0dXJu OworCisJCS8qCisJCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIG9ubHkgcG9zc2libGUgaWYgZXF1 YWxpdHkgb2YgZ3JvdXBpbmcga2V5cywgYXMKKwkJICogZGVmaW5lZCBieSB0aGUgZXF1YWxpdHkg b3BlcmF0b3IsIGltcGxpZXMgYml0d2lzZSBlcXVhbGl0eS4KKwkJICogT3RoZXJ3aXNlLCBpZiB3 ZSBwdXQga2V5cyB3aXRoIGRpZmZlcmVudCBieXRlIGltYWdlcyBpbnRvIHRoZSBzYW1lCisJCSAq IGdyb3VwLCB3ZSBtYXkgbG9zZSBzb21lIGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgbmVlZGVk IHRvCisJCSAqIGV2YWx1YXRlIHVwcGVyIHF1YWwgY2xhdXNlcy4KKwkJICoKKwkJICogRm9yIGV4 YW1wbGUsIHRoZSBOVU1FUklDIGRhdGEgdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdmFs dWVzCisJCSAqIHRoYXQgZmFsbCBpbnRvIHRoZSBzYW1lIGdyb3VwIGFjY29yZGluZyB0byB0aGUg ZXF1YWxpdHkgb3BlcmF0b3IKKwkJICogKGUuZy4gMCBhbmQgMC4wKSBjYW4gaGF2ZSBkaWZmZXJl bnQgc2NhbGUuCisJCSAqLworCQl0Y2UgPSBsb29rdXBfdHlwZV9jYWNoZShleHByVHlwZSgoTm9k ZSAqKSB0bGUtPmV4cHIpLAorCQkJCQkJCQlUWVBFQ0FDSEVfQlRSRUVfT1BGQU1JTFkpOworCQlp ZiAoIU9pZElzVmFsaWQodGNlLT5idHJlZV9vcGYpIHx8CisJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0 cmVlX29waW50eXBlKSkKKwkJCXJldHVybjsKKworCQllcXVhbGltYWdlcHJvYyA9IGdldF9vcGZh bWlseV9wcm9jKHRjZS0+YnRyZWVfb3BmLAorCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5 cGUsCisJCQkJCQkJCQkJICAgdGNlLT5idHJlZV9vcGludHlwZSwKKwkJCQkJCQkJCQkgICBCVEVR VUFMSU1BR0VfUFJPQyk7CisJCWlmICghT2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKKwkJ CSFEYXR1bUdldEJvb2woT2lkRnVuY3Rpb25DYWxsMUNvbGwoZXF1YWxpbWFnZXByb2MsCisJCQkJ CQkJCQkJCSAgIHRjZS0+dHlwY29sbGF0aW9uLAorCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERh dHVtKHRjZS0+YnRyZWVfb3BpbnR5cGUpKSkpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogR2V0 IHRoZSBvcGVyYXRvciBpbiB0aGUgYnRyZWUncyBvcGZhbWlseS4KKwkJICovCisJCWVxX29wID0g Z2V0X29wZmFtaWx5X21lbWJlcih0Y2UtPmJ0cmVlX29wZiwKKwkJCQkJCQkJCXRjZS0+YnRyZWVf b3BpbnR5cGUsCisJCQkJCQkJCQl0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJQlRFcXVh bFN0cmF0ZWd5TnVtYmVyKTsKKwkJaWYgKCFPaWRJc1ZhbGlkKGVxX29wKSkKKwkJCXJldHVybjsK KwkJZXFfb3BmYW1pbGllcyA9IGdldF9tZXJnZWpvaW5fb3BmYW1pbGllcyhlcV9vcCk7CisJCWlm ICghZXFfb3BmYW1pbGllcykKKwkJCXJldHVybjsKKwkJYnRyZWVfb3BmYW1pbHkgPSBsaW5pdGlh bF9vaWQoZXFfb3BmYW1pbGllcyk7CisKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB0bGUtPmV4 cHIpOworCQlzb3J0Z3JvdXByZWZzID0gbGFwcGVuZF9pbnQoc29ydGdyb3VwcmVmcywgdGxlLT5y ZXNzb3J0Z3JvdXByZWYpOworCQlidHJlZV9vcGZhbWlsaWVzID0gbGFwcGVuZF9vaWQoYnRyZWVf b3BmYW1pbGllcywgYnRyZWVfb3BmYW1pbHkpOworCX0KKworCS8qCisJICogQ29uc3RydWN0IEdy b3VwRXhwckluZm8gZm9yIGVhY2ggZXhwcmVzc2lvbi4KKwkgKi8KKwlmb3J0aHJlZShsYzEsIGV4 cHJzLCBsYzIsIHNvcnRncm91cHJlZnMsIGxjMywgYnRyZWVfb3BmYW1pbGllcykKKwl7CisJCUV4 cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMxKTsKKwkJaW50CQkJc29ydGdyb3VwcmVm ID0gbGZpcnN0X2ludChsYzIpOworCQlPaWQJCQlidHJlZV9vcGZhbWlseSA9IGxmaXJzdF9vaWQo bGMzKTsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbzsKKworCQlnZV9pbmZvID0gbWFrZU5vZGUo R3JvdXBFeHBySW5mbyk7CisJCWdlX2luZm8tPmV4cHIgPSAoRXhwciAqKSBjb3B5T2JqZWN0KGV4 cHIpOworCQlnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPSBzb3J0Z3JvdXByZWY7CisJCWdlX2luZm8t PmJ0cmVlX29wZmFtaWx5ID0gYnRyZWVfb3BmYW1pbHk7CisKKwkJcm9vdC0+Z3JvdXBfZXhwcl9s aXN0ID0gbGFwcGVuZChyb290LT5ncm91cF9leHByX2xpc3QsIGdlX2luZm8pOworCX0KK30KIAog LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWlu LmMKaW5kZXggZmQ4YjJiMGNhMy4uZWNlNjkzNmUyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubWFpbi5jCkBAIC02Nyw2ICs2Nyw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8g KnJvb3QsCiAJcm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VOb2RlKFJlbEluZm9MaXN0KTsKIAly b290LT5qb2luX3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKIAlyb290LT5qb2luX3JlbF9saXN0LT5o YXNoID0gTlVMTDsKKwlyb290LT5hZ2dfaW5mb19saXN0ID0gbWFrZU5vZGUoUmVsSW5mb0xpc3Qp OworCXJvb3QtPmFnZ19pbmZvX2xpc3QtPml0ZW1zID0gTklMOworCXJvb3QtPmFnZ19pbmZvX2xp c3QtPmhhc2ggPSBOVUxMOwogCXJvb3QtPmpvaW5fcmVsX2xldmVsID0gTlVMTDsKIAlyb290LT5q b2luX2N1cl9sZXZlbCA9IDA7CiAJcm9vdC0+Y2Fub25fcGF0aGtleXMgPSBOSUw7CkBAIC03Nyw2 ICs4MCw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+cGxhY2Vo b2xkZXJfbGlzdCA9IE5JTDsKIAlyb290LT5wbGFjZWhvbGRlcl9hcnJheSA9IE5VTEw7CiAJcm9v dC0+cGxhY2Vob2xkZXJfYXJyYXlfc2l6ZSA9IDA7CisJcm9vdC0+YWdnX2NsYXVzZV9saXN0ID0g TklMOworCXJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9IE5JTDsKKwlyb290LT50bGlzdF92YXJzID0g TklMOwogCXJvb3QtPmZrZXlfbGlzdCA9IE5JTDsKIAlyb290LT5pbml0aWFsX3JlbHMgPSBOSUw7 CiAKQEAgLTI1OCw2ICsyNjQsMTIgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwK IAkgKi8KIAlleHRyYWN0X3Jlc3RyaWN0aW9uX29yX2NsYXVzZXMocm9vdCk7CiAKKwkvKgorCSAq IENoZWNrIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2FibGUsIGFuZCBpZiBzbywgc2V0 IHVwCisJICogcm9vdC0+YWdnX2NsYXVzZV9saXN0IGFuZCByb290LT5ncm91cF9leHByX2xpc3Qu CisJICovCisJc2V0dXBfZWFnZXJfYWdncmVnYXRpb24ocm9vdCk7CisKIAkvKgogCSAqIE5vdyBl eHBhbmQgYXBwZW5kcmVscyBieSBhZGRpbmcgIm90aGVycmVscyIgZm9yIHRoZWlyIGNoaWxkcmVu LiAgV2UKIAkgKiBkZWxheSB0aGlzIHRvIHRoZSBlbmQgc28gdGhhdCB3ZSBoYXZlIGFzIG11Y2gg aW5mb3JtYXRpb24gYXMgcG9zc2libGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpp bmRleCA5NDhhZmQ5MDk0Li5iNDAzYTQ2ZDUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCkBAIC0yMjUsNyArMjI1LDYgQEAgc3RhdGljIHZvaWQgYWRkX3BhdGhzX3RvX2dyb3Vw aW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJ CQkJICBSZWxPcHRJbmZvICpwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkgIGNvbnN0 IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCiAJCQkJCQkJCQkgIGdyb3VwaW5nX3NldHNfZGF0 YSAqZ2QsCi0JCQkJCQkJCQkgIGRvdWJsZSBkTnVtR3JvdXBzLAogCQkJCQkJCQkJICBHcm91cFBh dGhFeHRyYURhdGEgKmV4dHJhKTsKIHN0YXRpYyBSZWxPcHRJbmZvICpjcmVhdGVfcGFydGlhbF9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxPcHRJbmZv ICpncm91cGVkX3JlbCwKQEAgLTM5OTksOSArMzk5OCw3IEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91 cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJ CQkJCSAgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEsCiAJCQkJCQkJICAgUmVsT3B0SW5mbyAq KnBhcnRpYWxseV9ncm91cGVkX3JlbF9wKQogewotCVBhdGgJICAgKmNoZWFwZXN0X3BhdGggPSBp bnB1dF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CiAJUmVsT3B0SW5mbyAqcGFydGlhbGx5X2dy b3VwZWRfcmVsID0gTlVMTDsKLQlkb3VibGUJCWROdW1Hcm91cHM7CiAJUGFydGl0aW9ud2lzZUFn Z3JlZ2F0ZVR5cGUgcGF0eXBlID0gUEFSVElUSU9OV0lTRV9BR0dSRUdBVEVfTk9ORTsKIAogCS8q CkBAIC00MDgyLDIzICs0MDc5LDIxIEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91cGluZ19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCiAJLyogR2F0aGVyIGFu eSBwYXJ0aWFsbHkgZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAqLwogCWlmIChwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KQotCXsK IAkJZ2F0aGVyX2dyb3VwaW5nX3BhdGhzKHJvb3QsIHBhcnRpYWxseV9ncm91cGVkX3JlbCk7Ci0J CXNldF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwotCX0KIAogCS8qCi0JICogRXN0 aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4KKwkgKiBOb3cgY2hvb3NlIHRoZSBiZXN0IHBhdGgocykg Zm9yIHBhcnRpYWxseV9ncm91cGVkX3JlbC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgbm9uLXBh cnRpYWwgcGF0aHMgY2FuIGNvbWUgZWl0aGVyIGZyb20gdGhlIEdhdGhlciBhYm92ZQorCSAqIG9y IGZyb20gZWFnZXIgYWdncmVnYXRpb24uCiAJICovCi0JZE51bUdyb3VwcyA9IGdldF9udW1iZXJf b2ZfZ3JvdXBzKHJvb3QsCi0JCQkJCQkJCQkgIGNoZWFwZXN0X3BhdGgtPnJvd3MsCi0JCQkJCQkJ CQkgIGdkLAotCQkJCQkJCQkJICBleHRyYS0+dGFyZ2V0TGlzdCk7CisJaWYgKHBhcnRpYWxseV9n cm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhdGhsaXN0KQorCQlzZXRfY2hl YXBlc3QocGFydGlhbGx5X2dyb3VwZWRfcmVsKTsKIAogCS8qIEJ1aWxkIGZpbmFsIGdyb3VwaW5n IHBhdGhzICovCiAJYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChyb290LCBpbnB1dF9yZWwsIGdy b3VwZWRfcmVsLAogCQkJCQkJCSAgcGFydGlhbGx5X2dyb3VwZWRfcmVsLCBhZ2dfY29zdHMsIGdk LAotCQkJCQkJCSAgZE51bUdyb3VwcywgZXh0cmEpOworCQkJCQkJCSAgZXh0cmEpOwogCiAJLyog R2l2ZSBhIGhlbHBmdWwgZXJyb3IgaWYgd2UgZmFpbGVkIHRvIGZpbmQgYW55IGltcGxlbWVudGF0 aW9uICovCiAJaWYgKGdyb3VwZWRfcmVsLT5wYXRobGlzdCA9PSBOSUwpCkBAIC02OTY2LDE2ICs2 OTYxLDQyIEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCSAgUmVsT3B0SW5mbyAqZ3JvdXBlZF9yZWwsCiAJ CQkJCQkgIFJlbE9wdEluZm8gKnBhcnRpYWxseV9ncm91cGVkX3JlbCwKIAkJCQkJCSAgY29uc3Qg QWdnQ2xhdXNlQ29zdHMgKmFnZ19jb3N0cywKLQkJCQkJCSAgZ3JvdXBpbmdfc2V0c19kYXRhICpn ZCwgZG91YmxlIGROdW1Hcm91cHMsCisJCQkJCQkgIGdyb3VwaW5nX3NldHNfZGF0YSAqZ2QsCiAJ CQkJCQkgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEpCiB7CiAJUXVlcnkJICAgKnBhcnNlID0g cm9vdC0+cGFyc2U7CiAJUGF0aAkgICAqY2hlYXBlc3RfcGF0aCA9IGlucHV0X3JlbC0+Y2hlYXBl c3RfdG90YWxfcGF0aDsKKwlQYXRoCSAgICpjaGVhcGVzdF9wYXJ0aWFsbHlfZ3JvdXBlZF9wYXRo ID0gTlVMTDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlib29sCQljYW5faGFzaCA9IChleHRyYS0+Zmxh Z3MgJiBHUk9VUElOR19DQU5fVVNFX0hBU0gpICE9IDA7CiAJYm9vbAkJY2FuX3NvcnQgPSAoZXh0 cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9TT1JUKSAhPSAwOwogCUxpc3QJICAgKmhhdmlu Z1F1YWwgPSAoTGlzdCAqKSBleHRyYS0+aGF2aW5nUXVhbDsKIAlBZ2dDbGF1c2VDb3N0cyAqYWdn X2ZpbmFsX2Nvc3RzID0gJmV4dHJhLT5hZ2dfZmluYWxfY29zdHM7CisJZG91YmxlCQlkTnVtR3Jv dXBzID0gMDsKKwlkb3VibGUJCWROdW1GaW5hbEdyb3VwcyA9IDA7CisKKwkvKgorCSAqIEVzdGlt YXRlIG51bWJlciBvZiBncm91cHMgZm9yIG5vbi1zcGxpdCBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlk TnVtR3JvdXBzID0gZ2V0X251bWJlcl9vZl9ncm91cHMocm9vdCwKKwkJCQkJCQkJCSAgY2hlYXBl c3RfcGF0aC0+cm93cywKKwkJCQkJCQkJCSAgZ2QsCisJCQkJCQkJCQkgIGV4dHJhLT50YXJnZXRM aXN0KTsKKworCWlmIChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRf cmVsLT5wYXRobGlzdCkKKwl7CisJCWNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVkX3BhdGggPQor CQkJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoOworCisJCS8qCisJ CSAqIEVzdGltYXRlIG51bWJlciBvZiBncm91cHMgZm9yIGZpbmFsIHBoYXNlIG9mIHBhcnRpYWwg YWdncmVnYXRpb24uCisJCSAqLworCQlkTnVtRmluYWxHcm91cHMgPQorCQkJZ2V0X251bWJlcl9v Zl9ncm91cHMocm9vdCwKKwkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVkX3BhdGgt PnJvd3MsCisJCQkJCQkJCSBnZCwKKwkJCQkJCQkJIGV4dHJhLT50YXJnZXRMaXN0KTsKKwl9CiAK IAlpZiAoY2FuX3NvcnQpCiAJewpAQCAtNzA4Nyw3ICs3MTA4LDcgQEAgYWRkX3BhdGhzX3RvX2dy b3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJ CQlwYXRoID0gbWFrZV9vcmRlcmVkX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJIGdyb3VwZWRfcmVs LAogCQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+ Y2hlYXBlc3RfdG90YWxfcGF0aCwKKwkJCQkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9ncm91 cGVkX3BhdGgsCiAJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5cyk7CiAKIAkJCQkJaWYgKHBhdGgg PT0gTlVMTCkKQEAgLTcxMDQsNyArNzEyNSw3IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJCQkJCSBp bmZvLT5jbGF1c2VzLAogCQkJCQkJCQkJCQkJIGhhdmluZ1F1YWwsCiAJCQkJCQkJCQkJCQkgYWdn X2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJCQkJIGROdW1Hcm91cHMpKTsKKwkJCQkJCQkJCQkJCSBk TnVtRmluYWxHcm91cHMpKTsKIAkJCQkJZWxzZQogCQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWws IChQYXRoICopCiAJCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChyb290LApAQCAtNzExMiw3ICs3 MTMzLDcgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQkJCQkJICAgcGF0aCwKIAkJCQkJCQkJCQkJCSAg IGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCQkgICBoYXZpbmdRdWFsLAotCQkJCQkJCQkJCQkJ ICAgZE51bUdyb3VwcykpOworCQkJCQkJCQkJCQkJICAgZE51bUZpbmFsR3JvdXBzKSk7CiAKIAkJ CQl9CiAJCQl9CkBAIC03MTU0LDE5ICs3MTc1LDE3IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19y ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICovCiAJCWlm IChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXRobGlz dCkKIAkJewotCQkJUGF0aAkgICAqcGF0aCA9IHBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y2hlYXBl c3RfdG90YWxfcGF0aDsKLQogCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJ CSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKIAkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJCQkJCQkJ CSBwYXRoLAorCQkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVkX3BhdGgsCiAJCQkJ CQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKIAkJCQkJCQkJCSBBR0dfSEFTSEVELAogCQkJ CQkJCQkJIEFHR1NQTElUX0ZJTkFMX0RFU0VSSUFMLAogCQkJCQkJCQkJIHJvb3QtPnByb2Nlc3Nl ZF9ncm91cENsYXVzZSwKIAkJCQkJCQkJCSBoYXZpbmdRdWFsLAogCQkJCQkJCQkJIGFnZ19maW5h bF9jb3N0cywKLQkJCQkJCQkJCSBkTnVtR3JvdXBzKSk7CisJCQkJCQkJCQkgZE51bUZpbmFsR3Jv dXBzKSk7CiAJCX0KIAl9CiAKQEAgLTcyMTYsNiArNzIzNSwyMSBAQCBjcmVhdGVfcGFydGlhbF9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlib29sCQljYW5faGFzaCA9IChleHRy YS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX0hBU0gpICE9IDA7CiAJYm9vbAkJY2FuX3NvcnQg PSAoZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9TT1JUKSAhPSAwOwogCisJLyoKKwkg KiBUaGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IGNyZWF0 ZWQgZHVlIHRvIGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJcGFydGlhbGx5X2dyb3Vw ZWRfcmVsID0gZmluZF9ncm91cGVkX3JlbChyb290LCBpbnB1dF9yZWwtPnJlbGlkcywgTlVMTCk7 CisJQXNzZXJ0KGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgfHwgcGFydGlhbGx5X2dyb3VwZWRfcmVs ID09IE5VTEwpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwgY3JlYXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIGR1bW15LiAg SW4gdGhpcyBjYXNlIHdlIGp1c3Qgc2V0IGl0IHRvIE5VTEwuICBJdCBtaWdodAorCSAqIGJlIGNy ZWF0ZWQgYWdhaW4gYnkgdGhlIGZvbGxvd2luZyBsb2dpYyBpZiBwb3NzaWJsZS4KKwkgKi8KKwlp ZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsICYmIElTX0RVTU1ZX1JFTChwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwpKQorCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPSBOVUxMOworCiAJLyoKIAkgKiBDb25z aWRlciB3aGV0aGVyIHdlIHNob3VsZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBub24t cGFydGlhbAogCSAqIHBhdGhzLiAgV2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgbm9u LXBhcnRpYWwgcGF0aCwgYW5kIG9ubHkgaWYKQEAgLTcyMzksMTkgKzcyNzMsMjcgQEAgY3JlYXRl X3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogSWYgd2UgY2Fu J3QgcGFydGlhbGx5IGFnZ3JlZ2F0ZSBwYXJ0aWFsIHBhdGhzLCBhbmQgd2UgY2FuJ3QgcGFydGlh bGx5CiAJICogYWdncmVnYXRlIG5vbi1wYXJ0aWFsIHBhdGhzLCB0aGVuIGRvbid0IGJvdGhlciBj cmVhdGluZyB0aGUgbmV3CiAJICogUmVsT3B0SW5mbyBhdCBhbGwsIHVubGVzcyB0aGUgY2FsbGVy IHNwZWNpZmllZCBmb3JjZV9yZWxfY3JlYXRpb24uCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIHBh cnRpYWxseV9ncm91cGVkX3JlbCBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVhdGVkIGFuZAor CSAqIHBvcHVsYXRlZCB3aXRoIGFwcHJvcHJpYXRlIHBhdGhzIGJ5IGVhZ2VyIGFnZ3JlZ2F0aW9u LgogCSAqLwogCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoID09IE5VTEwgJiYKIAkJY2hlYXBlc3Rf cGFydGlhbF9wYXRoID09IE5VTEwgJiYKKwkJKHBhcnRpYWxseV9ncm91cGVkX3JlbCA9PSBOVUxM IHx8CisJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09IE5JTCkgJiYKIAkJIWZv cmNlX3JlbF9jcmVhdGlvbikKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEJ1aWxkIGEgbmV3 IHVwcGVyIHJlbGF0aW9uIHRvIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHBhcnRpYWxseQotCSAq IGFnZ3JlZ2F0aW5nIHRoZSByb3dzIGZyb20gdGhlIGlucHV0IHJlbGF0aW9uLgotCSAqLwotCXBh cnRpYWxseV9ncm91cGVkX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAotCQkJCQkJCQkJCQlV UFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHRywKLQkJCQkJCQkJCQkJZ3JvdXBlZF9yZWwtPnJlbGlk cyk7CisJICogYWdncmVnYXRpbmcgdGhlIHJvd3MgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uICBU aGUgcmVsYXRpb24gbWF5IGFscmVhZHkKKwkgKiBleGlzdCBkdWUgdG8gZWFnZXIgYWdncmVnYXRp b24sIGluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUKKwkgKiBpdC4KKwkgKi8K KwlpZiAocGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5VTEwpCisJCXBhcnRpYWxseV9ncm91cGVk X3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAorCQkJCQkJCQkJCQkJVVBQRVJSRUxfUEFSVElB TF9HUk9VUF9BR0csCisJCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+cmVsaWRzKTsKIAlwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0KIAkJZ3JvdXBlZF9yZWwtPmNvbnNp ZGVyX3BhcmFsbGVsOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsb3B0a2luZCA9IGdyb3Vw ZWRfcmVsLT5yZWxvcHRraW5kOwpAQCAtNzI2MCw2ICs3MzAyLDE0IEBAIGNyZWF0ZV9wYXJ0aWFs X2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCXBhcnRpYWxseV9ncm91cGVkX3Jl bC0+dXNlcmlkaXNjdXJyZW50ID0gZ3JvdXBlZF9yZWwtPnVzZXJpZGlzY3VycmVudDsKIAlwYXJ0 aWFsbHlfZ3JvdXBlZF9yZWwtPmZkd3JvdXRpbmUgPSBncm91cGVkX3JlbC0+ZmR3cm91dGluZTsK IAorCS8qCisJICogUGFydGlhbGx5LWdyb3VwZWQgcGFydGlhbCBwYXRocyBtYXkgaGF2ZSBiZWVu IGdlbmVyYXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLiAgSWYgd2UgZmluZCB0aGF0IHBh cmFsbGVsaXNtIGlzIG5vdCBwb3NzaWJsZSBmb3IKKwkgKiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWws IHdlIG5lZWQgdG8gZHJvcCB0aGVzZSBwYXJ0aWFsIHBhdGhzLgorCSAqLworCWlmICghcGFydGlh bGx5X2dyb3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCkKKwkJcGFydGlhbGx5X2dyb3VwZWRf cmVsLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCiAJLyoKIAkgKiBCdWlsZCB0YXJnZXQgbGlz dCBmb3IgcGFydGlhbCBhZ2dyZWdhdGUgcGF0aHMuICBUaGVzZSBwYXRocyBjYW5ub3QganVzdAog CSAqIGVtaXQgdGhlIHNhbWUgdGxpc3QgYXMgcmVndWxhciBhZ2dyZWdhdGUgcGF0aHMsIGJlY2F1 c2UgKDEpIHdlIG11c3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2Fw cGVuZGluZm8uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYwppbmRl eCA0OTg5NzIyNjM3Li40ODg0ZDlkZGVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9hcHBlbmRpbmZvLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBw ZW5kaW5mby5jCkBAIC00OTksNiArNDk5LDY2IEBAIGFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0 YXRvcihOb2RlICpub2RlLAogCQlyZXR1cm4gKE5vZGUgKikgbmV3aW5mbzsKIAl9CiAKKwkvKgor CSAqIFdlIGhhdmUgdG8gcHJvY2VzcyBSZWxBZ2dJbmZvIG5vZGVzIHNwZWNpYWxseS4KKwkgKi8K KwlpZiAoSXNBKG5vZGUsIFJlbEFnZ0luZm8pKQorCXsKKwkJUmVsQWdnSW5mbyAqb2xkaW5mbyA9 IChSZWxBZ2dJbmZvICopIG5vZGU7CisJCVJlbEFnZ0luZm8gKm5ld2luZm8gPSBtYWtlTm9kZShS ZWxBZ2dJbmZvKTsKKworCQkvKiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxkcyAqLworCQlt ZW1jcHkobmV3aW5mbywgb2xkaW5mbywgc2l6ZW9mKFJlbEFnZ0luZm8pKTsKKworCQluZXdpbmZv LT5yZWxpZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPnJlbGlkcywKKwkJCQkJCQkJ CQkJICBjb250ZXh0LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCSAgY29udGV4dC0+YXBwaW5mb3Mp OworCisJCW5ld2luZm8tPnRhcmdldCA9IChQYXRoVGFyZ2V0ICopCisJCQlhZGp1c3RfYXBwZW5k cmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJCSAg IGNvbnRleHQpOworCisJCW5ld2luZm8tPmFnZ19pbnB1dCA9IChQYXRoVGFyZ2V0ICopCisJCQlh ZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+YWdnX2lucHV0 LAorCQkJCQkJCQkJCSAgIGNvbnRleHQpOworCisJCW5ld2luZm8tPmdyb3VwX2NsYXVzZXMgPSAo TGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2RlICopIG9sZGlu Zm8tPmdyb3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5mby0+ Z3JvdXBfZXhwcnMgPSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9y KChOb2RlICopIG9sZGluZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCSAgIGNvbnRleHQpOwor CisJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOworCX0KKworCS8qCisJICogV2UgaGF2ZSB0byBw cm9jZXNzIFBhdGhUYXJnZXQgbm9kZXMgc3BlY2lhbGx5LgorCSAqLworCWlmIChJc0Eobm9kZSwg UGF0aFRhcmdldCkpCisJeworCQlQYXRoVGFyZ2V0ICpvbGR0YXJnZXQgPSAoUGF0aFRhcmdldCAq KSBub2RlOworCQlQYXRoVGFyZ2V0ICpuZXd0YXJnZXQgPSBtYWtlTm9kZShQYXRoVGFyZ2V0KTsK KworCQkvKiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxkcyAqLworCQltZW1jcHkobmV3dGFy Z2V0LCBvbGR0YXJnZXQsIHNpemVvZihQYXRoVGFyZ2V0KSk7CisKKwkJaWYgKG9sZHRhcmdldC0+ c29ydGdyb3VwcmVmcykKKwkJeworCQkJU2l6ZQkJbmJ5dGVzID0gbGlzdF9sZW5ndGgob2xkdGFy Z2V0LT5leHBycykgKiBzaXplb2YoSW5kZXgpOworCisJCQluZXd0YXJnZXQtPmV4cHJzID0gKExp c3QgKikKKwkJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkdGFy Z2V0LT5leHBycywKKwkJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJCW5ld3RhcmdldC0+c29y dGdyb3VwcmVmcyA9IChJbmRleCAqKSBwYWxsb2MobmJ5dGVzKTsKKwkJCW1lbWNweShuZXd0YXJn ZXQtPnNvcnRncm91cHJlZnMsIG9sZHRhcmdldC0+c29ydGdyb3VwcmVmcywgbmJ5dGVzKTsKKwkJ fQorCisJCXJldHVybiAoTm9kZSAqKSBuZXd0YXJnZXQ7CisJfQorCiAJLyoKIAkgKiBOT1RFOiB3 ZSBkbyBub3QgbmVlZCB0byByZWN1cnNlIGludG8gc3VibGlua3MsIGJlY2F1c2UgdGhleSBzaG91 bGQKIAkgKiBhbHJlYWR5IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gc3VicGxhbnMgYmVmb3JlIHdl IHNlZSB0aGVtLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5v ZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggNTRlMDQy YThhNS4uM2NiNDUwYjM3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0yNzAyLDggKzI3MDIsNyBAQCBjcmVhdGVfcHJvamVjdGlvbl9wYXRoKFBsYW5uZXJJbmZvICpy b290LAogCXBhdGhub2RlLT5wYXRoLnBhdGh0eXBlID0gVF9SZXN1bHQ7CiAJcGF0aG5vZGUtPnBh dGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSB0YXJnZXQ7Ci0J LyogRm9yIG5vdywgYXNzdW1lIHdlIGFyZSBhYm92ZSBhbnkgam9pbnMsIHNvIG5vIHBhcmFtZXRl cml6YXRpb24gKi8KLQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gTlVMTDsKKwlwYXRobm9k ZS0+cGF0aC5wYXJhbV9pbmZvID0gc3VicGF0aC0+cGFyYW1faW5mbzsKIAlwYXRobm9kZS0+cGF0 aC5wYXJhbGxlbF9hd2FyZSA9IGZhbHNlOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX3NhZmUg PSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsICYmCiAJCXN1YnBhdGgtPnBhcmFsbGVsX3NhZmUgJiYK QEAgLTI5NTUsOCArMjk1NCw3IEBAIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCS8qIFNvcnQgZG9l c24ndCBwcm9qZWN0LCBzbyB1c2Ugc291cmNlIHBhdGgncyBwYXRodGFyZ2V0ICovCiAJcGF0aG5v ZGUtPnBhdGgucGF0aHRhcmdldCA9IHN1YnBhdGgtPnBhdGh0YXJnZXQ7Ci0JLyogRm9yIG5vdywg YXNzdW1lIHdlIGFyZSBhYm92ZSBhbnkgam9pbnMsIHNvIG5vIHBhcmFtZXRlcml6YXRpb24gKi8K LQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gTlVMTDsKKwlwYXRobm9kZS0+cGF0aC5wYXJh bV9pbmZvID0gc3VicGF0aC0+cGFyYW1faW5mbzsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9h d2FyZSA9IGZhbHNlOwogCXBhdGhub2RlLT5wYXRoLnBhcmFsbGVsX3NhZmUgPSByZWwtPmNvbnNp ZGVyX3BhcmFsbGVsICYmCiAJCXN1YnBhdGgtPnBhcmFsbGVsX3NhZmU7CkBAIC0zMDAyLDggKzMw MDAsNyBAQCBjcmVhdGVfc29ydF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5w YXRoLnBhcmVudCA9IHJlbDsKIAkvKiBTb3J0IGRvZXNuJ3QgcHJvamVjdCwgc28gdXNlIHNvdXJj ZSBwYXRoJ3MgcGF0aHRhcmdldCAqLwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSBzdWJw YXRoLT5wYXRodGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpv aW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5m byA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2lu Zm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+ cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRo LT5wYXJhbGxlbF9zYWZlOwpAQCAtMzE2MSw4ICszMTU4LDcgQEAgY3JlYXRlX2FnZ19wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5wYXRoLnBhdGh0eXBlID0gVF9BZ2c7CiAJcGF0 aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSB0 YXJnZXQ7Ci0JLyogRm9yIG5vdywgYXNzdW1lIHdlIGFyZSBhYm92ZSBhbnkgam9pbnMsIHNvIG5v IHBhcmFtZXRlcml6YXRpb24gKi8KLQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gTlVMTDsK KwlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0gc3VicGF0aC0+cGFyYW1faW5mbzsKIAlwYXRo bm9kZS0+cGF0aC5wYXJhbGxlbF9hd2FyZSA9IGZhbHNlOwogCXBhdGhub2RlLT5wYXRoLnBhcmFs bGVsX3NhZmUgPSByZWwtPmNvbnNpZGVyX3BhcmFsbGVsICYmCiAJCXN1YnBhdGgtPnBhcmFsbGVs X3NhZmU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggNzZlMTM5NzFmNy4u ZWVjNjc4YjkzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9k ZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtMTYsNiAr MTYsNyBAQAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nv bnN0cmFpbnQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rl RnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5kaW5mby5oIgpAQCAtMjcsMjIgKzI4 LDI1IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3BsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNsdWRl ICJvcHRpbWl6ZXIvcGxhbm5lci5oIgogI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8u aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2Vf b3Blci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInJl d3JpdGUvcmV3cml0ZU1hbmlwLmgiCiAjaW5jbHVkZSAidXRpbHMvaHNlYXJjaC5oIgogI2luY2x1 ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAKIAog LyoKLSAqIEFuIGVudHJ5IG9mIGEgaGFzaCB0YWJsZSB0aGF0IHdlIHVzZSB0byBtYWtlIGxvb2t1 cCBmb3IgUmVsT3B0SW5mbwotICogc3RydWN0dXJlcyBtb3JlIGVmZmljaWVudC4KKyAqIEFuIGVu dHJ5IG9mIGEgaGFzaCB0YWJsZSB0aGF0IHdlIHVzZSB0byBtYWtlIGxvb2t1cCBmb3IgUmVsT3B0 SW5mbyBvcgorICogUmVsQWdnSW5mbyBzdHJ1Y3R1cmVzIG1vcmUgZWZmaWNpZW50LgogICovCiB0 eXBlZGVmIHN0cnVjdCBSZWxJbmZvRW50cnkKIHsKIAlSZWxpZHMJCXJlbGlkczsJCQkvKiBoYXNo IGtleSAtLS0gTVVTVCBCRSBGSVJTVCAqLwotCVJlbE9wdEluZm8gKnJlbDsKKwl2b2lkCSAgICpk YXRhOwogfSBSZWxJbmZvRW50cnk7CiAKIHN0YXRpYyB2b2lkIGJ1aWxkX2pvaW5yZWxfdGxpc3Qo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCkBAIC04Nyw2ICs5MSwxNSBA QCBzdGF0aWMgdm9pZCBidWlsZF9jaGlsZF9qb2luX3JlbHRhcmdldChQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmNoaWxkcmVsLAogCQkJCQkJCQkJICAgaW50IG5h cHBpbmZvcywKIAkJCQkJCQkJCSAgIEFwcGVuZFJlbEluZm8gKiphcHBpbmZvcyk7CitzdGF0aWMg Ym9vbCBlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxhbm5lckluZm8g KnJvb3QsCisJCQkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyBib29sIGluaXRf Z3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJ CQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwgUGF0aFRhcmdldCAqYWdnX2lucHV0LAorCQkJCQkJ CQkgIExpc3QgKipncm91cF9leHByc19leHRyYV9wLAorCQkJCQkJCQkgIEluZGV4ICptYXhTb3J0 R3JvdXBSZWYpOworc3RhdGljIGJvb2wgaXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5uZXJJbmZv ICpyb290LCBWYXIgKnZhcik7CitzdGF0aWMgYm9vbCBpc192YXJfbmVlZGVkX2J5X2pvaW4oUGxh bm5lckluZm8gKnJvb3QsIFZhciAqdmFyLCBSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIEluZGV4 IGdldF9leHByZXNzaW9uX3NvcnRncm91cHJlZihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhw cik7CiAKIAogLyoKQEAgLTQxMCw2ICs0MjMsMTAxIEBAIGJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCXJldHVybiByZWw7 CiB9CiAKKy8qCisgKiBidWlsZF9zaW1wbGVfZ3JvdXBlZF9yZWwKKyAqCSAgQ29uc3RydWN0IGEg bmV3IFJlbE9wdEluZm8gZm9yIGEgZ3JvdXBlZCBiYXNlIHJlbGF0aW9uIG91dCBvZiBhbiBleGlz dGluZworICoJICBub24tZ3JvdXBlZCBiYXNlIHJlbGF0aW9uLgorICoKKyAqIE9uIHN1Y2Nlc3Ms IHRoZSBuZXcgUmVsT3B0SW5mbyBpcyByZXR1cm5lZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgUmVs QWdnSW5mbworICogaXMgc3RvcmVkIGluICphZ2dfaW5mb19wLgorICovCitSZWxPcHRJbmZvICoK K2J1aWxkX3NpbXBsZV9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAor CQkJCQkJIFJlbEFnZ0luZm8gKiphZ2dfaW5mb19wKQoreworCVJlbE9wdEluZm8gKnJlbF9wbGFp bjsKKwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKwlSZWxBZ2dJbmZvICphZ2dfaW5mbzsKKwor CS8qCisJICogV2Ugc2hvdWxkIGhhdmUgYXZhaWxhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBh bmQgZ3JvdXBpbmcKKwkgKiBleHByZXNzaW9ucywgb3RoZXJ3aXNlIHdlIGNhbm5vdCByZWFjaCBo ZXJlLgorCSAqLworCUFzc2VydChyb290LT5hZ2dfY2xhdXNlX2xpc3QgIT0gTklMKTsKKwlBc3Nl cnQocm9vdC0+Z3JvdXBfZXhwcl9saXN0ICE9IE5JTCk7CisKKwlyZWxfcGxhaW4gPSBmaW5kX2Jh c2VfcmVsKHJvb3QsIHJlbGlkKTsKKworCS8qIG5vdGhpbmcgdG8gZG8gZm9yIGR1bW15IHJlbCAq LworCWlmIChJU19EVU1NWV9SRUwocmVsX3BsYWluKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgor CSAqIFByZXBhcmUgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRo cyBmb3IgdGhpcyBiYXNlCisJICogcmVsYXRpb24uCisJICovCisJYWdnX2luZm8gPSBjcmVhdGVf cmVsX2FnZ19pbmZvKHJvb3QsIHJlbF9wbGFpbik7CisJaWYgKGFnZ19pbmZvID09IE5VTEwpCisJ CXJldHVybiBOVUxMOworCisJLyogYnVpbGQgYSBncm91cGVkIHJlbGF0aW9uIG91dCBvZiB0aGUg cGxhaW4gcmVsYXRpb24gKi8KKwlyZWxfZ3JvdXBlZCA9IGJ1aWxkX2dyb3VwZWRfcmVsKHJvb3Qs IHJlbF9wbGFpbik7CisJcmVsX2dyb3VwZWQtPnJlbHRhcmdldCA9IGFnZ19pbmZvLT50YXJnZXQ7 CisJcmVsX2dyb3VwZWQtPnJvd3MgPSBhZ2dfaW5mby0+Z3JvdXBlZF9yb3dzOworCisJLyogcmV0 dXJuIHRoZSBSZWxBZ2dJbmZvIHN0cnVjdHVyZSAqLworCSphZ2dfaW5mb19wID0gYWdnX2luZm87 CisKKwlyZXR1cm4gcmVsX2dyb3VwZWQ7Cit9CisKKy8qCisgKiBidWlsZF9ncm91cGVkX3JlbAor ICoJICBCdWlsZCBhIGdyb3VwZWQgcmVsYXRpb24gYnkgZmxhdCBjb3B5aW5nIGEgcGxhaW4gcmVs YXRpb24gYW5kIHJlc2V0dGluZworICoJICB0aGUgbmVjZXNzYXJ5IGZpZWxkcy4KKyAqLworUmVs T3B0SW5mbyAqCitidWlsZF9ncm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsX3BsYWluKQoreworCVJlbE9wdEluZm8gKnJlbF9ncm91cGVkOworCisJcmVsX2dyb3Vw ZWQgPSBtYWtlTm9kZShSZWxPcHRJbmZvKTsKKwltZW1jcHkocmVsX2dyb3VwZWQsIHJlbF9wbGFp biwgc2l6ZW9mKFJlbE9wdEluZm8pKTsKKworCS8qCisJICogY2xlYXIgcGF0aCBpbmZvCisJICov CisJcmVsX2dyb3VwZWQtPnBhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVkLT5wcGlsaXN0ID0g TklMOworCXJlbF9ncm91cGVkLT5wYXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCXJlbF9ncm91cGVk LT5jaGVhcGVzdF9zdGFydHVwX3BhdGggPSBOVUxMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF90 b3RhbF9wYXRoID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+Y2hlYXBlc3RfdW5pcXVlX3BhdGggPSBO VUxMOworCXJlbF9ncm91cGVkLT5jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX3BhdGhzID0gTklMOwor CisJLyoKKwkgKiBjbGVhciBwYXJ0aXRpb24gaW5mbworCSAqLworCXJlbF9ncm91cGVkLT5wYXJ0 X3NjaGVtZSA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPm5wYXJ0cyA9IC0xOworCXJlbF9ncm91cGVk LT5ib3VuZGluZm8gPSBOVUxMOworCXJlbF9ncm91cGVkLT5wYXJ0Ym91bmRzX21lcmdlZCA9IGZh bHNlOworCXJlbF9ncm91cGVkLT5wYXJ0aXRpb25fcXVhbCA9IE5JTDsKKwlyZWxfZ3JvdXBlZC0+ cGFydF9yZWxzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+bGl2ZV9wYXJ0cyA9IE5VTEw7CisJcmVs X2dyb3VwZWQtPmFsbF9wYXJ0cmVscyA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPnBhcnRleHBycyA9 IE5VTEw7CisJcmVsX2dyb3VwZWQtPm51bGxhYmxlX3BhcnRleHBycyA9IE5VTEw7CisJcmVsX2dy b3VwZWQtPmNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZhbHNlOworCisJLyoKKwkgKiBj bGVhciBzaXplIGVzdGltYXRlcworCSAqLworCXJlbF9ncm91cGVkLT5yb3dzID0gMDsKKworCXJl dHVybiByZWxfZ3JvdXBlZDsKK30KKwogLyoKICAqIGZpbmRfYmFzZV9yZWwKICAqCSAgRmluZCBh IGJhc2Ugb3Igb3RoZXJyZWwgcmVsYXRpb24gZW50cnksIHdoaWNoIG11c3QgYWxyZWFkeSBleGlz dC4KQEAgLTQ4NCw3ICs1OTIsNyBAQCBmaW5kX2Jhc2VfcmVsX2lnbm9yZV9qb2luKFBsYW5uZXJJ bmZvICpyb290LCBpbnQgcmVsaWQpCiAKIC8qCiAgKiBidWlsZF9yZWxfaGFzaAotICoJICBDb25z dHJ1Y3QgdGhlIGF1eGlsaWFyeSBoYXNoIHRhYmxlIGZvciByZWxhdGlvbnMuCisgKgkgIENvbnN0 cnVjdCB0aGUgYXV4aWxpYXJ5IGhhc2ggdGFibGUgZm9yIHJlbGF0aW9uLXNwZWNpZmljIGVudHJp ZXMuCiAgKi8KIHN0YXRpYyB2b2lkCiBidWlsZF9yZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkK QEAgLTUwNCwxOSArNjEyLDI3IEBAIGJ1aWxkX3JlbF9oYXNoKFJlbEluZm9MaXN0ICpsaXN0KQog CQkJCQkJICAmaGFzaF9jdGwsCiAJCQkJCQkgIEhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBI QVNIX0NPTVBBUkUgfCBIQVNIX0NPTlRFWFQpOwogCi0JLyogSW5zZXJ0IGFsbCB0aGUgYWxyZWFk eS1leGlzdGluZyByZWxhdGlvbnMgKi8KKwkvKiBJbnNlcnQgYWxsIHRoZSBhbHJlYWR5LWV4aXN0 aW5nIHJlbGF0aW9uLXNwZWNpZmljIGVudHJpZXMgKi8KIAlmb3JlYWNoKGwsIGxpc3QtPml0ZW1z KQogCXsKLQkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOworCQl2 b2lkCSAgICppdGVtID0gbGZpcnN0KGwpOwogCQlSZWxJbmZvRW50cnkgKmhlbnRyeTsKIAkJYm9v bAkJZm91bmQ7CisJCVJlbGlkcwkJcmVsaWRzOworCisJCUFzc2VydChJc0EoaXRlbSwgUmVsT3B0 SW5mbykgfHwgSXNBKGl0ZW0sIFJlbEFnZ0luZm8pKTsKKworCQlpZiAoSXNBKGl0ZW0sIFJlbE9w dEluZm8pKQorCQkJcmVsaWRzID0gKChSZWxPcHRJbmZvICopIGl0ZW0pLT5yZWxpZHM7CisJCWVs c2UKKwkJCXJlbGlkcyA9ICgoUmVsQWdnSW5mbyAqKSBpdGVtKS0+cmVsaWRzOwogCiAJCWhlbnRy eSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFyY2goaGFzaHRhYiwKLQkJCQkJCQkJCQkJICAm KHJlbC0+cmVsaWRzKSwKKwkJCQkJCQkJCQkJICAmcmVsaWRzLAogCQkJCQkJCQkJCQkgIEhBU0hf RU5URVIsCiAJCQkJCQkJCQkJCSAgJmZvdW5kKTsKIAkJQXNzZXJ0KCFmb3VuZCk7Ci0JCWhlbnRy eS0+cmVsID0gcmVsOworCQloZW50cnktPmRhdGEgPSBpdGVtOwogCX0KIAogCWxpc3QtPmhhc2gg PSBoYXNodGFiOwpAQCAtNTI0LDkgKzY0MCw5IEBAIGJ1aWxkX3JlbF9oYXNoKFJlbEluZm9MaXN0 ICpsaXN0KQogCiAvKgogICogZmluZF9yZWxfaW5mbwotICoJICBGaW5kIGFuIFJlbE9wdEluZm8g ZW50cnkuCisgKgkgIEZpbmQgYSBSZWxPcHRJbmZvIG9yIGEgUmVsQWdnSW5mbyBlbnRyeS4KICAq Lwotc3RhdGljIFJlbE9wdEluZm8gKgorc3RhdGljIHZvaWQgKgogZmluZF9yZWxfaW5mbyhSZWxJ bmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykKIHsKIAlpZiAobGlzdCA9PSBOVUxMKQpAQCAt NTU3LDcgKzY3Myw3IEBAIGZpbmRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyBy ZWxpZHMpCiAJCQkJCQkJCQkJCSAgSEFTSF9GSU5ELAogCQkJCQkJCQkJCQkgIE5VTEwpOwogCQlp ZiAoaGVudHJ5KQotCQkJcmV0dXJuIGhlbnRyeS0+cmVsOworCQkJcmV0dXJuIGhlbnRyeS0+ZGF0 YTsKIAl9CiAJZWxzZQogCXsKQEAgLTU2NSwxMCArNjgxLDE4IEBAIGZpbmRfcmVsX2luZm8oUmVs SW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMpCiAKIAkJZm9yZWFjaChsLCBsaXN0LT5pdGVt cykKIAkJewotCQkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9wdEluZm8gKikgbGZpcnN0KGwpOwor CQkJdm9pZAkgICAqaXRlbSA9IGxmaXJzdChsKTsKKwkJCVJlbGlkcwkJaXRlbV9yZWxpZHM7CisK KwkJCUFzc2VydChJc0EoaXRlbSwgUmVsT3B0SW5mbykgfHwgSXNBKGl0ZW0sIFJlbEFnZ0luZm8p KTsKIAotCQkJaWYgKGJtc19lcXVhbChyZWwtPnJlbGlkcywgcmVsaWRzKSkKLQkJCQlyZXR1cm4g cmVsOworCQkJaWYgKElzQShpdGVtLCBSZWxPcHRJbmZvKSkKKwkJCQlpdGVtX3JlbGlkcyA9ICgo UmVsT3B0SW5mbyAqKSBpdGVtKS0+cmVsaWRzOworCQkJZWxzZQorCQkJCWl0ZW1fcmVsaWRzID0g KChSZWxBZ2dJbmZvICopIGl0ZW0pLT5yZWxpZHM7CisKKwkJCWlmIChibXNfZXF1YWwoaXRlbV9y ZWxpZHMsIHJlbGlkcykpCisJCQkJcmV0dXJuIGl0ZW07CiAJCX0KIAl9CiAKQEAgLTU4Myw0NCAr NzA3LDQ2IEBAIGZpbmRfcmVsX2luZm8oUmVsSW5mb0xpc3QgKmxpc3QsIFJlbGlkcyByZWxpZHMp CiBSZWxPcHRJbmZvICoKIGZpbmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyBy ZWxpZHMpCiB7Ci0JcmV0dXJuIGZpbmRfcmVsX2luZm8ocm9vdC0+am9pbl9yZWxfbGlzdCwgcmVs aWRzKTsKKwlyZXR1cm4gKFJlbE9wdEluZm8gKikgZmluZF9yZWxfaW5mbyhyb290LT5qb2luX3Jl bF9saXN0LCByZWxpZHMpOwogfQogCiAvKgotICogYWRkX3JlbF9pbmZvCi0gKgkJQWRkIGdpdmVu IHJlbGF0aW9uIHRvIHRoZSBnaXZlbiBsaXN0LiBBbHNvIGFkZCBpdCB0byB0aGUgYXV4aWxpYXJ5 Ci0gKgkJaGFzaHRhYmxlIGlmIHRoZXJlIGlzIG9uZS4KKyAqIGZpbmRfZ3JvdXBlZF9yZWwKKyAq CSAgUmV0dXJucyByZWxhdGlvbiBlbnRyeSBjb3JyZXNwb25kaW5nIHRvICdyZWxpZHMnIChhIHNl dCBvZiBSVCBpbmRleGVzKSwKKyAqCSAgb3IgTlVMTCBpZiBub25lIGV4aXN0cy4gIFRoaXMgaXMg Zm9yIGdyb3VwZWQgcmVsYXRpb25zLgorICoKKyAqIElmIGFnZ19pbmZvX3AgaXMgbm90IE5VTEws IHRoZW4gYWxzbyB0aGUgY29ycmVzcG9uZGluZyBSZWxBZ2dJbmZvIChpZiBvbmUKKyAqIGV4aXN0 cykgd2lsbCBiZSByZXR1cm5lZCBpbiAqYWdnX2luZm9fcC4KICAqLwotc3RhdGljIHZvaWQKLWFk ZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsT3B0SW5mbyAqcmVsKQorUmVsT3B0SW5m byAqCitmaW5kX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzLCBS ZWxBZ2dJbmZvICoqYWdnX2luZm9fcCkKIHsKLQkvKiBHRVFPIHJlcXVpcmVzIHVzIHRvIGFwcGVu ZCB0aGUgbmV3IHJlbGF0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QhICovCi0JbGlzdC0+aXRl bXMgPSBsYXBwZW5kKGxpc3QtPml0ZW1zLCByZWwpOworCVJlbE9wdEluZm8gKnJlbDsKIAotCS8q IHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLiAq LwotCWlmIChsaXN0LT5oYXNoKQorCXJlbCA9IChSZWxPcHRJbmZvICopIGZpbmRfcmVsX2luZm8o JnJvb3QtPnVwcGVyX3JlbHNbVVBQRVJSRUxfUEFSVElBTF9HUk9VUF9BR0ddLAorCQkJCQkJCQkJ ICAgcmVsaWRzKTsKKwlpZiAocmVsID09IE5VTEwpCiAJewotCQlSZWxJbmZvRW50cnkgKmhlbnRy eTsKLQkJYm9vbAkJZm91bmQ7CisJCWlmIChhZ2dfaW5mb19wKQorCQkJKmFnZ19pbmZvX3AgPSBO VUxMOwogCi0JCWhlbnRyeSA9IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFyY2gobGlzdC0+aGFz aCwKLQkJCQkJCQkJCQkJICAmKHJlbC0+cmVsaWRzKSwKLQkJCQkJCQkJCQkJICBIQVNIX0VOVEVS LAotCQkJCQkJCQkJCQkgICZmb3VuZCk7Ci0JCUFzc2VydCghZm91bmQpOwotCQloZW50cnktPnJl bCA9IHJlbDsKKwkJcmV0dXJuIE5VTEw7CiAJfQotfQogCi0vKgotICogYWRkX2pvaW5fcmVsCi0g KgkJQWRkIGdpdmVuIGpvaW4gcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2Ygam9pbiByZWxhdGlvbnMg aW4gdGhlIGdpdmVuCi0gKgkJUGxhbm5lckluZm8uCi0gKi8KLXN0YXRpYyB2b2lkCi1hZGRfam9p bl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwpCi17Ci0JYWRkX3Jl bF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3QsIGpvaW5yZWwpOworCS8qIGFsc28gcmV0dXJuIHRo ZSBjb3JyZXNwb25kaW5nIFJlbEFnZ0luZm8sIGlmIGFza2VkICovCisJaWYgKGFnZ19pbmZvX3Ap CisJeworCQlSZWxBZ2dJbmZvICphZ2dfaW5mbzsKKworCQlhZ2dfaW5mbyA9IChSZWxBZ2dJbmZv ICopIGZpbmRfcmVsX2luZm8ocm9vdC0+YWdnX2luZm9fbGlzdCwgcmVsaWRzKTsKKworCQkvKiBU aGUgcmVsYXRpb24gZXhpc3RzLCBzbyB0aGUgYWdnX2luZm8gc2hvdWxkIGJlIHRoZXJlIHRvby4g Ki8KKwkJQXNzZXJ0KGFnZ19pbmZvICE9IE5VTEwpOworCisJCSphZ2dfaW5mb19wID0gYWdnX2lu Zm87CisJfQorCisJcmV0dXJuIHJlbDsKIH0KIAogLyoKQEAgLTY3Miw2ICs3OTgsNjQgQEAgc2V0 X2ZvcmVpZ25fcmVsX3Byb3BlcnRpZXMoUmVsT3B0SW5mbyAqam9pbnJlbCwgUmVsT3B0SW5mbyAq b3V0ZXJfcmVsLAogCX0KIH0KIAorLyoKKyAqIGFkZF9yZWxfaW5mbworICoJCUFkZCByZWxhdGlv bi1zcGVjaWZpYyBlbnRyeSB0byBhIGxpc3QsIGFuZCBhbHNvIGFkZCBpdCB0byB0aGUgYXV4aWxp YXJ5CisgKgkJaGFzaHRhYmxlIGlmIHRoZXJlIGlzIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK2Fk ZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgdm9pZCAqZGF0YSkKK3sKKwlBc3NlcnQoSXNB KGRhdGEsIFJlbE9wdEluZm8pIHx8IElzQShkYXRhLCBSZWxBZ2dJbmZvKSk7CisKKwkvKiBHRVFP IHJlcXVpcmVzIHVzIHRvIGFwcGVuZCB0aGUgbmV3IHJlbGF0aW9uIHRvIHRoZSBlbmQgb2YgdGhl IGxpc3QhICovCisJbGlzdC0+aXRlbXMgPSBsYXBwZW5kKGxpc3QtPml0ZW1zLCBkYXRhKTsKKwor CS8qIHN0b3JlIGl0IGludG8gdGhlIGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMgb25l LiAqLworCWlmIChsaXN0LT5oYXNoKQorCXsKKwkJUmVsSW5mb0VudHJ5ICpoZW50cnk7CisJCWJv b2wJCWZvdW5kOworCQlSZWxpZHMJCXJlbGlkczsKKworCQlpZiAoSXNBKGRhdGEsIFJlbE9wdElu Zm8pKQorCQkJcmVsaWRzID0gKChSZWxPcHRJbmZvICopIGRhdGEpLT5yZWxpZHM7CisJCWVsc2UK KwkJCXJlbGlkcyA9ICgoUmVsQWdnSW5mbyAqKSBkYXRhKS0+cmVsaWRzOworCisJCWhlbnRyeSA9 IChSZWxJbmZvRW50cnkgKikgaGFzaF9zZWFyY2gobGlzdC0+aGFzaCwKKwkJCQkJCQkJCQkJICAm cmVsaWRzLAorCQkJCQkJCQkJCQkgIEhBU0hfRU5URVIsCisJCQkJCQkJCQkJCSAgJmZvdW5kKTsK KwkJQXNzZXJ0KCFmb3VuZCk7CisJCWhlbnRyeS0+ZGF0YSA9IGRhdGE7CisJfQorfQorCisvKgor ICogYWRkX2pvaW5fcmVsCisgKgkJQWRkIGdpdmVuIGpvaW4gcmVsYXRpb24gdG8gdGhlIGxpc3Qg b2Ygam9pbiByZWxhdGlvbnMgaW4gdGhlIGdpdmVuCisgKgkJUGxhbm5lckluZm8uCisgKi8KK3N0 YXRpYyB2b2lkCithZGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpv aW5yZWwpCit7CisJYWRkX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3QsIGpvaW5yZWwpOwor fQorCisvKgorICogYWRkX2dyb3VwZWRfcmVsCisgKgkJQWRkIGdpdmVuIGdyb3VwZWQgcmVsYXRp b24gdG8gdGhlIGxpc3Qgb2YgZ3JvdXBlZCByZWxhdGlvbnMgaW4gdGhlCisgKgkJZ2l2ZW4gUGxh bm5lckluZm8uICBBbHNvIGFkZCB0aGUgY29ycmVzcG9uZGluZyBSZWxBZ2dJbmZvIHRvCisgKgkJ cm9vdC0+YWdnX2luZm9fbGlzdC4KKyAqLwordm9pZAorYWRkX2dyb3VwZWRfcmVsKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJlbEFnZ0luZm8gKmFnZ19pbmZvKQoreworCWFk ZF9yZWxfaW5mbygmcm9vdC0+dXBwZXJfcmVsc1tVUFBFUlJFTF9QQVJUSUFMX0dST1VQX0FHR10s IHJlbCk7CisJYWRkX3JlbF9pbmZvKHJvb3QtPmFnZ19pbmZvX2xpc3QsIGFnZ19pbmZvKTsKK30K KwogLyoKICAqIGJ1aWxkX2pvaW5fcmVsCiAgKgkgIFJldHVybnMgcmVsYXRpb24gZW50cnkgY29y cmVzcG9uZGluZyB0byB0aGUgdW5pb24gb2YgdHdvIGdpdmVuIHJlbHMsCkBAIC0xNDkxLDcgKzE2 NzUsNyBAQCBmZXRjaF91cHBlcl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFVwcGVyUmVsYXRpb25L aW5kIGtpbmQsIFJlbGlkcyByZWxpZHMpCiAJLyogSWYgd2UgYWxyZWFkeSBtYWRlIHRoaXMgdXBw ZXJyZWwgZm9yIHRoZSBxdWVyeSwgcmV0dXJuIGl0ICovCiAJaWYgKGxpc3QpCiAJewotCQl1cHBl cnJlbCA9IGZpbmRfcmVsX2luZm8obGlzdCwgcmVsaWRzKTsKKwkJdXBwZXJyZWwgPSAoUmVsT3B0 SW5mbyAqKSBmaW5kX3JlbF9pbmZvKGxpc3QsIHJlbGlkcyk7CiAJCWlmICh1cHBlcnJlbCkKIAkJ CXJldHVybiB1cHBlcnJlbDsKIAl9CkBAIC0yNTI4LDMgKzI3MTIsNTAzIEBAIGJ1aWxkX2NoaWxk X2pvaW5fcmVsdGFyZ2V0KFBsYW5uZXJJbmZvICpyb290LAogCWNoaWxkcmVsLT5yZWx0YXJnZXQt PmNvc3QucGVyX3R1cGxlID0gcGFyZW50cmVsLT5yZWx0YXJnZXQtPmNvc3QucGVyX3R1cGxlOwog CWNoaWxkcmVsLT5yZWx0YXJnZXQtPndpZHRoID0gcGFyZW50cmVsLT5yZWx0YXJnZXQtPndpZHRo OwogfQorCisvKgorICogY3JlYXRlX3JlbF9hZ2dfaW5mbworICoJICBDcmVhdGUgdGhlIFJlbEFn Z0luZm8gc3RydWN0dXJlIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24gaWYgaXQgY2FuIHByb2R1Y2UK KyAqCSAgZ3JvdXBlZCBwYXRocy4gIFRoZSBnaXZlbiByZWxhdGlvbiBpcyB0aGUgbm9uLWdyb3Vw ZWQgb25lIHdoaWNoIGhhcyB0aGUKKyAqCSAgcmVsdGFyZ2V0IGFscmVhZHkgY29uc3RydWN0ZWQu CisgKi8KK1JlbEFnZ0luZm8gKgorY3JlYXRlX3JlbF9hZ2dfaW5mbyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsKQoreworCUxpc3RDZWxsICAgKmxjOworCVJlbEFnZ0luZm8gKnJl c3VsdDsKKwlQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7CisJUGF0aFRhcmdldCAqdGFyZ2V0OworCUlu ZGV4CQltYXhTb3J0R3JvdXBSZWY7CisJTGlzdAkgICAqZ3JwX2V4cHJzX2V4dHJhID0gTklMOwor CUxpc3QJICAgKmVhZ2VyX2dyb3VwX2NsYXVzZXM7CisJaW50CQkJaTsKKworCS8qCisJICogVGhl IGxpc3RzIG9mIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBhbmQgZ3JvdXBpbmcgZXhwcmVzc2lvbnMg c2hvdWxkIGhhdmUKKwkgKiBiZWVuIGNvbnN0cnVjdGVkLgorCSAqLworCUFzc2VydChyb290LT5h Z2dfY2xhdXNlX2xpc3QgIT0gTklMKTsKKwlBc3NlcnQocm9vdC0+Z3JvdXBfZXhwcl9saXN0ICE9 IE5JTCk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgYSBjaGlsZCByZWwsIHRoZSBncm91cGVkIHJl bCBmb3IgaXRzIHBhcmVudCByZWwgbXVzdCBoYXZlCisJICogYmVlbiBjcmVhdGVkIGlmIGl0IGNh bi4gIFNvIHdlIGNhbiBqdXN0IHVzZSBwYXJlbnQncyBSZWxBZ2dJbmZvIGlmCisJICogdGhlcmUg aXMgb25lLCB3aXRoIGFwcHJvcHJpYXRlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMuCisJICovCisJ aWYgKElTX09USEVSX1JFTChyZWwpKQorCXsKKwkJUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJ CVJlbEFnZ0luZm8gKmFnZ19pbmZvOworCisJCUFzc2VydCghYm1zX2lzX2VtcHR5KHJlbC0+dG9w X3BhcmVudF9yZWxpZHMpKTsKKwkJcmVsX2dyb3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3Qs IHJlbC0+dG9wX3BhcmVudF9yZWxpZHMsICZhZ2dfaW5mbyk7CisKKwkJaWYgKHJlbF9ncm91cGVk ID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKworCQlBc3NlcnQoYWdnX2luZm8gIT0gTlVMTCk7 CisJCS8qIE11c3QgZG8gbXVsdGktbGV2ZWwgdHJhbnNmb3JtYXRpb24gKi8KKwkJYWdnX2luZm8g PSAoUmVsQWdnSW5mbyAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdWx0aWxldmVsKHJv b3QsCisJCQkJCQkJCQkJCSAgKE5vZGUgKikgYWdnX2luZm8sCisJCQkJCQkJCQkJCSAgcmVsLAor CQkJCQkJCQkJCQkgIHJlbC0+dG9wX3BhcmVudCk7CisKKwkJYWdnX2luZm8tPmdyb3VwZWRfcm93 cyA9CisJCQllc3RpbWF0ZV9udW1fZ3JvdXBzKHJvb3QsIGFnZ19pbmZvLT5ncm91cF9leHBycywK KwkJCQkJCQkJcmVsLT5yb3dzLCBOVUxMLCBOVUxMKTsKKworCQlyZXR1cm4gYWdnX2luZm87CisJ fQorCisJLyogQ2hlY2sgaWYgaXQncyBwb3NzaWJsZSB0byBwcm9kdWNlIGdyb3VwZWQgcGF0aHMg Zm9yIHRoaXMgcmVsYXRpb24uICovCisJaWYgKCFlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9m b3JfcmVsYXRpb24ocm9vdCwgcmVsKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIENyZWF0 ZSB0YXJnZXRzIGZvciB0aGUgZ3JvdXBlZCBwYXRocyBhbmQgZm9yIHRoZSBpbnB1dCBwYXRocyBv ZiB0aGUKKwkgKiBncm91cGVkIHBhdGhzLgorCSAqLworCXRhcmdldCA9IGNyZWF0ZV9lbXB0eV9w YXRodGFyZ2V0KCk7CisJYWdnX2lucHV0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKKwor CS8qIC4uLiBhbmQgaW5pdGlhbGl6ZSB0aGVzZSB0YXJnZXRzICovCisJaWYgKCFpbml0X2dyb3Vw aW5nX3RhcmdldHMocm9vdCwgcmVsLCB0YXJnZXQsIGFnZ19pbnB1dCwKKwkJCQkJCQkgICAmZ3Jw X2V4cHJzX2V4dHJhLCAmbWF4U29ydEdyb3VwUmVmKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgor CSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIG5vdCBhcHBsaWNhYmxlIGlmIHRoZXJlIGFyZSBubyBh dmFpbGFibGUgZ3JvdXBpbmcKKwkgKiBleHByZXNzaW9ucy4KKwkgKi8KKwlpZiAobWF4U29ydEdy b3VwUmVmID09IDAgJiYKKwkJbGlzdF9sZW5ndGgoZ3JwX2V4cHJzX2V4dHJhKSA9PSAwKQorCQly ZXR1cm4gTlVMTDsKKworCS8qCisJICogV2l0aCB0aGUgY3VycmVudCBtYXggU29ydEdyb3VwUmVm IHdpdGhpbiBhZ2dfaW5wdXQgZGV0ZXJtaW5lZCwgd2UgY2FuCisJICogbm93IGFkZCB0aGUgZXhw cmVzc2lvbnMgdGhhdCBhcmUgbmVlZGVkIGJ5IHVwcGVyIGpvaW5zIHRvIHRoZSBncm91cGluZwor CSAqIGNsYXVzZXMgYW5kIHRoZSB0YXJnZXRzLgorCSAqLworCWVhZ2VyX2dyb3VwX2NsYXVzZXMg PSBsaXN0X2NvcHkocm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKTsKKwlmb3JlYWNoKGxjLCBn cnBfZXhwcnNfZXh0cmEpCisJeworCQlWYXIJCSAgICp2YXIgPSBsZmlyc3Rfbm9kZShWYXIsIGxj KTsKKwkJU29ydEdyb3VwQ2xhdXNlICpjbCA9IG1ha2VOb2RlKFNvcnRHcm91cENsYXVzZSk7CisK KwkJLyogSW5pdGlhbGl6ZSB0aGUgU29ydEdyb3VwQ2xhdXNlLiAqLworCQljbC0+dGxlU29ydEdy b3VwUmVmID0gKyttYXhTb3J0R3JvdXBSZWY7CisJCWdldF9zb3J0X2dyb3VwX29wZXJhdG9ycyh2 YXItPnZhcnR5cGUsCisJCQkJCQkJCSBmYWxzZSwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkJCSAmY2wt PnNvcnRvcCwgJmNsLT5lcW9wLCBOVUxMLAorCQkJCQkJCQkgJmNsLT5oYXNoYWJsZSk7CisKKwkJ ZWFnZXJfZ3JvdXBfY2xhdXNlcyA9IGxhcHBlbmQoZWFnZXJfZ3JvdXBfY2xhdXNlcywgY2wpOwor CisJCS8qIFRoaXMgVmFyIHNob3VsZCBiZSBlbWl0dGVkIGJ5IHRoZSBncm91cGVkIHBhdGhzICov CisJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHByICopIHZhciwKKwkJCQkJ CQkJIGNsLT50bGVTb3J0R3JvdXBSZWYpOworCisJCS8qIC4uLiBhbmQgaXQgYWxzbyBzaG91bGQg YmUgZW1pdHRlZCBieSB0aGUgaW5wdXQgcGF0aHMuICovCisJCWFkZF9jb2x1bW5fdG9fcGF0aHRh cmdldChhZ2dfaW5wdXQsIChFeHByICopIHZhciwKKwkJCQkJCQkJIGNsLT50bGVTb3J0R3JvdXBS ZWYpOworCX0KKworCS8qCisJICogQnVpbGQgYSBsaXN0IG9mIGdyb3VwaW5nIGV4cHJlc3Npb25z IGFuZCBhIGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiBTb3J0R3JvdXBDbGF1c2VzLgor CSAqLworCWkgPSAwOworCXJlc3VsdCA9IG1ha2VOb2RlKFJlbEFnZ0luZm8pOworCWZvcmVhY2go bGMsIHRhcmdldC0+ZXhwcnMpCisJeworCQlJbmRleAkJc29ydGdyb3VwcmVmID0gMDsKKwkJU29y dEdyb3VwQ2xhdXNlICpjbDsKKwkJRXhwcgkgICAqdGV4cHI7CisKKwkJdGV4cHIgPSAoRXhwciAq KSBsZmlyc3QobGMpOworCisJCUFzc2VydChJc0EodGV4cHIsIFZhcikpOworCisJCXNvcnRncm91 cHJlZiA9IHRhcmdldC0+c29ydGdyb3VwcmVmc1tpKytdOworCQlpZiAoc29ydGdyb3VwcmVmID09 IDApCisJCQljb250aW51ZTsKKworCQkvKiBmaW5kIHRoZSBTb3J0R3JvdXBDbGF1c2UgaW4gZWFn ZXJfZ3JvdXBfY2xhdXNlcyAqLworCQljbCA9IGdldF9zb3J0Z3JvdXByZWZfY2xhdXNlKHNvcnRn cm91cHJlZiwgZWFnZXJfZ3JvdXBfY2xhdXNlcyk7CisKKwkJLyogZG8gbm90IGFkZCB0aGlzIFNv cnRHcm91cENsYXVzZSBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkICovCisJCWlmIChsaXN0 X21lbWJlcihyZXN1bHQtPmdyb3VwX2NsYXVzZXMsIGNsKSkKKwkJCWNvbnRpbnVlOworCisJCXJl c3VsdC0+Z3JvdXBfY2xhdXNlcyA9IGxhcHBlbmQocmVzdWx0LT5ncm91cF9jbGF1c2VzLCBjbCk7 CisJCXJlc3VsdC0+Z3JvdXBfZXhwcnMgPSBsaXN0X2FwcGVuZF91bmlxdWUocmVzdWx0LT5ncm91 cF9leHBycywKKwkJCQkJCQkJCQkJCSB0ZXhwcik7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUg cGF0aGtleXMgdGhhdCByZXByZXNlbnQgdGhpcyBncm91cGluZyByZXF1aXJlbWVudHMuCisJICov CisJcmVzdWx0LT5ncm91cF9wYXRoa2V5cyA9CisJCW1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1 c2VzKHJvb3QsIHJlc3VsdC0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCSAgbWFrZV90bGlzdF9m cm9tX3BhdGh0YXJnZXQodGFyZ2V0KSk7CisKKwkvKgorCSAqIEFkZCBhZ2dyZWdhdGVzIHRvIHRo ZSBncm91cGluZyB0YXJnZXQuCisJICovCisJZm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9s aXN0KQorCXsKKwkJQWdnQ2xhdXNlSW5mbyAqYWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVz ZUluZm8sIGxjKTsKKwkJQWdncmVmCSAgICphZ2dyZWY7CisKKwkJQXNzZXJ0KElzQShhY19pbmZv LT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCWFnZ3JlZiA9IChBZ2dyZWYgKikgY29weU9iamVjdChh Y19pbmZvLT5hZ2dyZWYpOworCQltYXJrX3BhcnRpYWxfYWdncmVmKGFnZ3JlZiwgQUdHU1BMSVRf SU5JVElBTF9TRVJJQUwpOworCisJCWFkZF9jb2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChF eHByICopIGFnZ3JlZiwgMCk7CisJfQorCisJLyogU2V0IHRoZSBlc3RpbWF0ZWQgZXZhbCBjb3N0 IGFuZCBvdXRwdXQgd2lkdGggZm9yIGJvdGggdGFyZ2V0cyAqLworCXNldF9wYXRodGFyZ2V0X2Nv c3Rfd2lkdGgocm9vdCwgdGFyZ2V0KTsKKwlzZXRfcGF0aHRhcmdldF9jb3N0X3dpZHRoKHJvb3Qs IGFnZ19pbnB1dCk7CisKKwlyZXN1bHQtPnJlbGlkcyA9IGJtc19jb3B5KHJlbC0+cmVsaWRzKTsK KwlyZXN1bHQtPnRhcmdldCA9IHRhcmdldDsKKwlyZXN1bHQtPmFnZ19pbnB1dCA9IGFnZ19pbnB1 dDsKKwlyZXN1bHQtPmdyb3VwZWRfcm93cyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwgcmVz dWx0LT5ncm91cF9leHBycywKKwkJCQkJCQkJCQkJICAgcmVsLT5yb3dzLCBOVUxMLCBOVUxMKTsK KworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJs ZV9mb3JfcmVsYXRpb24KKyAqIAkgIENoZWNrIGlmIGl0J3MgcG9zc2libGUgdG8gcHJvZHVjZSBn cm91cGVkIHBhdGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24uCisgKi8KK3N0YXRpYyBib29sCitl YWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQljdXJfcmVsaWQ7 CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMgaW4gdGhl IG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIKKwkgKiBqb2luLiAgSW4gdGhpcyBjYXNlLCB3ZSBj YW5ub3QgcHVzaCBhIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byB0aGUKKwkgKiByZWxhdGlv biwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdXRlciBq b2luCisJICogd291bGQgbm90IGJlIGF2YWlsYWJsZSB3aGVuIHdlIHBlcmZvcm0gdGhlIHBhcnRp YWwgYWdncmVnYXRpb24sIHdoaWxlCisJICogd2l0aCBhIG5vbi1lYWdlci1hZ2dyZWdhdGlvbiBw bGFuIHRoZXNlIHJvd3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlCisJICogdG9wLWxldmVsIGFnZ3Jl Z2F0aW9uLiAgRG9pbmcgc28gbWF5IHJlc3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91cGVkCisJ ICogZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJlY3QgdmFsdWVz IGZyb20gdGhlCisJICogYWdncmVnYXRlIGZ1bmN0aW9ucy4KKwkgKi8KKwljdXJfcmVsaWQgPSAt MTsKKwl3aGlsZSAoKGN1cl9yZWxpZCA9IGJtc19uZXh0X21lbWJlcihyZWwtPnJlbGlkcywgY3Vy X3JlbGlkKSkgPj0gMCkKKwl7CisJCVJlbE9wdEluZm8gKmJhc2VyZWwgPSBmaW5kX2Jhc2VfcmVs X2lnbm9yZV9qb2luKHJvb3QsIGN1cl9yZWxpZCk7CisKKwkJaWYgKGJhc2VyZWwgPT0gTlVMTCkK KwkJCWNvbnRpbnVlOwkJCS8qIGlnbm9yZSBvdXRlciBqb2lucyBpbiByZWwtPnJlbGlkcyAqLwor CisJCWlmICghYm1zX2lzX3N1YnNldChiYXNlcmVsLT5udWxsaW5nX3JlbGlkcywgcmVsLT5yZWxp ZHMpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0 cnkgdG8gc3VwcG9ydCBQbGFjZUhvbGRlclZhcnMuCisJICovCisJZm9yZWFjaChsYywgcmVsLT5y ZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IGxmaXJzdChsYyk7CisKKwkJ aWYgKElzQShleHByLCBQbGFjZUhvbGRlclZhcikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ LyogQ2FsbGVyIHNob3VsZCBvbmx5IHBhc3MgYmFzZSByZWxhdGlvbnMgb3Igam9pbnMuICovCisJ QXNzZXJ0KHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCB8fAorCQkgICByZWwtPnJl bG9wdGtpbmQgPT0gUkVMT1BUX0pPSU5SRUwpOworCisJLyoKKwkgKiBDaGVjayBpZiBhbGwgYWdn cmVnYXRlIGV4cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgb24gdGhpcyByZWxhdGlvbgorCSAq IGxldmVsLgorCSAqLworCWZvcmVhY2gobGMsIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJ CUFnZ0NsYXVzZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rfbm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7 CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCS8qCisJCSAq IEdpdmUgdXAgaWYgYW55IGFnZ3JlZ2F0ZSBuZWVkcyByZWxhdGlvbnMgb3RoZXIgdGhhbiB0aGUg Y3VycmVudAorCQkgKiBvbmUuCisJCSAqCisJCSAqIElmIHRoZSBhZ2dyZWdhdGUgbmVlZHMgdGhl IGN1cnJlbnQgcmVsIHBsdXMgYW55dGhpbmcgZWxzZSwgZ3JvdXBpbmcKKwkJICogdGhlIGN1cnJl bnQgcmVsIGNvdWxkIG1ha2Ugc29tZSBpbnB1dCB2YXJpYWJsZXMgdW5hdmFpbGFibGUgZm9yIHRo ZQorCQkgKiBoaWdoZXIgYWdncmVnYXRlIGFuZCBhbHNvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGlu cHV0IHJvd3MgaXQKKwkJICogcmVjZWl2ZXMuCisJCSAqCisJCSAqIElmIHRoZSBhZ2dyZWdhdGUg ZG9lcyBub3QgbmVlZCB0aGUgY3VycmVudCByZWwgYXQgYWxsLCB0aGVuIHRoZQorCQkgKiBjdXJy ZW50IHJlbCBzaG91bGQgbm90IGJlIGdyb3VwZWQsIGFzIHdlIGRvIG5vdCBzdXBwb3J0IGpvaW5p bmcgdHdvCisJCSAqIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFibXNfaXNfc3Vi c2V0KGFjX2luZm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykpCisJCQlyZXR1cm4gZmFsc2U7 CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0X2dyb3VwaW5nX3RhcmdldHMK KyAqCSAgSW5pdGlhbGl6ZSB0aGUgdGFyZ2V0IGZvciBncm91cGVkIHBhdGhzICh0YXJnZXQpIGFz IHdlbGwgYXMgdGhlIHRhcmdldAorICoJICBmb3IgcGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBm b3IgdGhlIGdyb3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgorICogKmdyb3VwX2V4cHJzX2V4 dHJhX3AgcmVjZWl2ZXMgYSBsaXN0IG9mIFZhciBub2RlcyBmb3Igd2hpY2ggd2UgbmVlZCB0bwor ICogY29uc3RydWN0IFNvcnRHcm91cENsYXVzZXMuICBUaG9zZSBWYXJzIHdpbGwgdGhlbiBiZSB1 c2VkIGFzIGFkZGl0aW9uYWwKKyAqIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBmb3IgdGhlIHNha2Ug b2Ygam9pbiBjbGF1c2VzLgorICoKKyAqICptYXhTb3J0R3JvdXBSZWYgcmVjZWl2ZXMgdGhlIG1h eCBTb3J0R3JvdXBSZWYgd2l0aGluIGFnZ19pbnB1dC4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0 aGUgdGFyZ2V0cyBjb3VsZCBiZSBpbml0aWFsaXplZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitz dGF0aWMgYm9vbAoraW5pdF9ncm91cGluZ190YXJnZXRzKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsCisJCQkJCSAgUGF0aFRhcmdldCAqdGFyZ2V0LCBQYXRoVGFyZ2V0ICphZ2df aW5wdXQsCisJCQkJCSAgTGlzdCAqKmdyb3VwX2V4cHJzX2V4dHJhX3AsCisJCQkJCSAgSW5kZXgg Km1heFNvcnRHcm91cFJlZikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpwb3NzaWJs eV9kZXBlbmRlbnQgPSBOSUw7CisKKwkqbWF4U29ydEdyb3VwUmVmID0gMDsKKworCWZvcmVhY2go bGMsIHJlbC0+cmVsdGFyZ2V0LT5leHBycykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAq KSBsZmlyc3QobGMpOworCQlJbmRleAkJc29ydGdyb3VwcmVmOworCisJCS8qCisJCSAqIEdpdmVu IHRoYXQgUGxhY2VIb2xkZXJWYXIgY3VycmVudGx5IHByZXZlbnRzIHVzIGZyb20gZG9pbmcgZWFn ZXIKKwkJICogYWdncmVnYXRpb24sIHRoZSBzb3VyY2UgdGFyZ2V0IGNhbm5vdCBjb250YWluIGFu eXRoaW5nIG1vcmUgY29tcGxleAorCQkgKiB0aGFuIGEgVmFyLgorCQkgKi8KKwkJQXNzZXJ0KElz QShleHByLCBWYXIpKTsKKworCQkvKiBHZXQgdGhlIHNvcnRncm91cHJlZiBpZiB0aGUgZXhwciBj YW4gYWN0IGFzIGdyb3VwaW5nIGV4cHJlc3Npb24uICovCisJCXNvcnRncm91cHJlZiA9IGdldF9l eHByZXNzaW9uX3NvcnRncm91cHJlZihyb290LCBleHByKTsKKwkJaWYgKHNvcnRncm91cHJlZiA+ IDApCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gY2FuIGJlIHVz ZWQgYXMgYSBncm91cGluZyBrZXksIGl0CisJCQkgKiBzaG91bGQgYmUgZW1pdHRlZCBieSB0aGUg Z3JvdXBlZCBwYXRocyB0aGF0IGhhdmUgYmVlbiBwdXNoZWQKKwkJCSAqIGRvd24gdG8gdGhpcyBy ZWxhdGlvbiBsZXZlbC4KKwkJCSAqLworCQkJYWRkX2NvbHVtbl90b19wYXRodGFyZ2V0KHRhcmdl dCwgZXhwciwgc29ydGdyb3VwcmVmKTsKKworCQkJLyoKKwkJCSAqIC4uLiBhbmQgaXQgYWxzbyBz aG91bGQgYmUgZW1pdHRlZCBieSB0aGUgaW5wdXQgcGF0aHMuCisJCQkgKi8KKwkJCWFkZF9jb2x1 bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIGV4cHIsIHNvcnRncm91cHJlZik7CisKKwkJCS8q IFVwZGF0ZSB0aGUgbWF4IFNvcnRHcm91cFJlZiAqLworCQkJaWYgKHNvcnRncm91cHJlZiA+ICpt YXhTb3J0R3JvdXBSZWYpCisJCQkJKm1heFNvcnRHcm91cFJlZiA9IHNvcnRncm91cHJlZjsKKwkJ fQorCQllbHNlIGlmIChpc192YXJfbmVlZGVkX2J5X2pvaW4ocm9vdCwgKFZhciAqKSBleHByLCBy ZWwpKQorCQl7CisJCQkvKgorCQkJICogVGhlIGV4cHJlc3Npb24gaXMgbmVlZGVkIGZvciBhbiB1 cHBlciBqb2luIGJ1dCBpcyBuZWl0aGVyIGluCisJCQkgKiB0aGUgR1JPVVAgQlkgY2xhdXNlIG5v ciBkZXJpdmFibGUgZnJvbSBpdCB1c2luZyBFQyAob3RoZXJ3aXNlLAorCQkJICogaXQgd291bGQg aGF2ZSBhbHJlYWR5IGJlZW4gaW5jbHVkZWQgaW4gdGhlIHRhcmdldHMgYWJvdmUpLiAgV2UKKwkJ CSAqIG5lZWQgdG8gY3JlYXRlIGEgc3BlY2lhbCBTb3J0R3JvdXBDbGF1c2UgZm9yIHRoaXMgZXhw cmVzc2lvbi4KKwkJCSAqCisJCQkgKiBOb3RlIHRoYXQgaXRzIHRsZVNvcnRHcm91cFJlZiBuZWVk cyB0byBiZSB1bmlxdWUgd2l0aGluCisJCQkgKiBhZ2dfaW5wdXQsIHNvIHdlIG5lZWQgdG8gcG9z dHBvbmUgY3JlYXRpb24gb2YgdGhpcworCQkJICogU29ydEdyb3VwQ2xhdXNlIHVudGlsIHdlJ3Jl IGRvbmUgd2l0aCB0aGUgaXRlcmF0aW9uIG9mCisJCQkgKiByZWwtPnJlbHRhcmdldC0+ZXhwcnMu CisJCQkgKi8KKwkJCSpncm91cF9leHByc19leHRyYV9wID0gbGFwcGVuZCgqZ3JvdXBfZXhwcnNf ZXh0cmFfcCwgZXhwcik7CisJCX0KKwkJZWxzZSBpZiAoaXNfdmFyX2luX2FnZ3JlZl9vbmx5KHJv b3QsIChWYXIgKikgZXhwcikpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgZXhwcmVzc2lvbiBpcyBy ZWZlcmVuY2VkIGJ5IGFuIGFnZ3JlZ2F0ZSBmdW5jdGlvbiBwdXNoZWQKKwkJCSAqIGRvd24gdG8g dGhpcyByZWxhdGlvbiBhbmQgZG9lcyBub3QgYXBwZWFyIGVsc2V3aGVyZSBpbiB0aGUKKwkJCSAq IHRhcmdldGxpc3Qgb3IgaGF2aW5nUXVhbC4gIEFkZCBpdCB0byAnYWdnX2lucHV0JyBidXQgbm90 IHRvCisJCQkgKiAndGFyZ2V0Jy4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1bW5fdG9fcGF0aHRh cmdldChhZ2dfaW5wdXQsIGV4cHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRo ZSBleHByZXNzaW9uIG1heSBiZSBmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uIG90aGVyCisJCQkg KiBleHByZXNzaW9ucyBpbiB0aGUgdGFyZ2V0LCBidXQgd2UgY2Fubm90IHZlcmlmeSB0aGlzIHVu dGlsIGFsbAorCQkJICogdGFyZ2V0IGV4cHJlc3Npb25zIGhhdmUgYmVlbiBjb25zdHJ1Y3RlZC4K KwkJCSAqLworCQkJcG9zc2libHlfZGVwZW5kZW50ID0gbGFwcGVuZChwb3NzaWJseV9kZXBlbmRl bnQsIGV4cHIpOworCQl9CisJfQorCisJLyoKKwkgKiBOb3cgd2UgY2FuIHZlcmlmeSB3aGV0aGVy IGFuIGV4cHJlc3Npb24gaXMgZnVuY3Rpb25hbGx5IGRlcGVuZGVudCBvbgorCSAqIG90aGVycy4K KwkgKi8KKwlmb3JlYWNoKGxjLCBwb3NzaWJseV9kZXBlbmRlbnQpCisJeworCQlWYXIJCSAgICp0 dmFyOworCQlMaXN0CSAgICpkZXBzID0gTklMOworCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJ dHZhciA9IGxmaXJzdF9ub2RlKFZhciwgbGMpOworCQlydGUgPSByb290LT5zaW1wbGVfcnRlX2Fy cmF5W3R2YXItPnZhcm5vXTsKKworCQlpZiAoY2hlY2tfZnVuY3Rpb25hbF9ncm91cGluZyhydGUt PnJlbGlkLCB0dmFyLT52YXJubywKKwkJCQkJCQkJCSAgdHZhci0+dmFybGV2ZWxzdXAsCisJCQkJ CQkJCQkgIHRhcmdldC0+ZXhwcnMsICZkZXBzKSkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBleHBy ZXNzaW9uIGlzIGZ1bmN0aW9uYWxseSBkZXBlbmRlbnQgb24gb3RoZXIgdGFyZ2V0CisJCQkgKiBl eHByZXNzaW9ucywgc28gaXQgY2FuIGJlIGluY2x1ZGVkIGluIHRoZSB0YXJnZXRzLiAgU2luY2Ug aXQKKwkJCSAqIHdpbGwgbm90IGJlIHVzZWQgYXMgYSBncm91cGluZyBrZXksIGEgc29ydGdyb3Vw cmVmIGlzIG5vdAorCQkJICogbmVlZGVkIGZvciBpdC4KKwkJCSAqLworCQkJYWRkX25ld19jb2x1 bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHByICopIHR2YXIpOworCQkJYWRkX25ld19jb2x1 bW5fdG9fcGF0aHRhcmdldChhZ2dfaW5wdXQsIChFeHByICopIHR2YXIpOworCQl9CisJCWVsc2UK KwkJeworCQkJLyoKKwkJCSAqIFdlIG1heSBhcnJpdmUgaGVyZSB3aXRoIGEgZ3JvdXBpbmcgZXhw cmVzc2lvbiB0aGF0IGlzIHByb3ZlbgorCQkJICogcmVkdW5kYW50IGJ5IEVxdWl2YWxlbmNlQ2xh c3MgcHJvY2Vzc2luZywgc3VjaCBhcyAndDEuYScgaW4gdGhlCisJCQkgKiBxdWVyeSBiZWxvdy4K KwkJCSAqCisJCQkgKiBzZWxlY3QgbWF4KHQxLmMpIGZyb20gdCB0MSwgdCB0MiB3aGVyZSB0MS5h ID0gMSBncm91cCBieSB0MS5hLAorCQkJICogdDEuYjsKKwkJCSAqCisJCQkgKiBGb3Igbm93IHdl IGp1c3QgZ2l2ZSB1cCBpbiB0aGlzIGNhc2UuCisJCQkgKi8KKwkJCXJldHVybiBmYWxzZTsKKwkJ fQorCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogaXNfdmFyX2luX2FnZ3JlZl9vbmx5 CisgKgkgIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFZhciBhcHBlYXJzIGluIGFnZ3JlZ2F0ZSBl eHByZXNzaW9ucyBhbmQgbm90CisgKgkgIGVsc2V3aGVyZSBpbiB0aGUgdGFyZ2V0bGlzdCBvciBo YXZpbmdRdWFsLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5u ZXJJbmZvICpyb290LCBWYXIgKnZhcikKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICog U2VhcmNoIHRoZSBsaXN0IG9mIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBmb3IgdGhlIFZhci4KKwkg Ki8KKwlmb3JlYWNoKGxjLCByb290LT5hZ2dfY2xhdXNlX2xpc3QpCisJeworCQlBZ2dDbGF1c2VJ bmZvICphY19pbmZvID0gbGZpcnN0X25vZGUoQWdnQ2xhdXNlSW5mbywgbGMpOworCQlMaXN0CSAg ICp2YXJzOworCisJCUFzc2VydChJc0EoYWNfaW5mby0+YWdncmVmLCBBZ2dyZWYpKTsKKworCQlp ZiAoIWJtc19pc19tZW1iZXIodmFyLT52YXJubywgYWNfaW5mby0+YWdnX2V2YWxfYXQpKQorCQkJ Y29udGludWU7CisKKwkJdmFycyA9IHB1bGxfdmFyX2NsYXVzZSgoTm9kZSAqKSBhY19pbmZvLT5h Z2dyZWYsCisJCQkJCQkJICAgUFZDX1JFQ1VSU0VfQUdHUkVHQVRFUyB8CisJCQkJCQkJICAgUFZD X1JFQ1VSU0VfV0lORE9XRlVOQ1MgfAorCQkJCQkJCSAgIFBWQ19SRUNVUlNFX1BMQUNFSE9MREVS Uyk7CisKKwkJaWYgKGxpc3RfbWVtYmVyKHZhcnMsIHZhcikpCisJCXsKKwkJCWxpc3RfZnJlZSh2 YXJzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9mcmVlKHZhcnMpOworCX0KKworCXJldHVy biAobGMgIT0gTlVMTCAmJiAhbGlzdF9tZW1iZXIocm9vdC0+dGxpc3RfdmFycywgdmFyKSk7Cit9 CisKKy8qCisgKiBpc192YXJfbmVlZGVkX2J5X2pvaW4KKyAqCSAgQ2hlY2sgaWYgdGhlIGdpdmVu IFZhciBpcyBuZWVkZWQgYnkgam9pbnMgYWJvdmUgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIENv bnNpZGVyIHB1c2hpbmcgdGhlIGFnZ3JlZ2F0ZSBhdmcoYi55KSBkb3duIHRvIHJlbGF0aW9uIGIg Zm9yIHRoZSBmb2xsb3dpbmcKKyAqIHF1ZXJ5OgorICoKKyAqICAgIFNFTEVDVCBhLmksIGF2Zyhi LnkpCisgKiAgICBGUk9NIGEgSk9JTiBiIE9OIGEuaiA9IGIuagorICogICAgR1JPVVAgQlkgYS5p OworICoKKyAqIENvbHVtbiBiLmogbmVlZHMgdG8gYmUgdXNlZCBhcyB0aGUgZ3JvdXBpbmcga2V5 IGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGNhbm5vdAorICogZmluZCBpdHMgd2F5IHRvIHRoZSBpbnB1 dCBvZiB0aGUgam9pbiBleHByZXNzaW9uLgorICovCitzdGF0aWMgYm9vbAoraXNfdmFyX25lZWRl ZF9ieV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhciwgUmVsT3B0SW5mbyAqcmVsKQor eworCVJlbGlkcwkJcmVsaWRzOworCWludAkJCWF0dG5vOworCVJlbE9wdEluZm8gKmJhc2VyZWw7 CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3aGVuIGNoZWNraW5nIGlmIHRoZSBWYXIgaXMgbmVlZGVk IGJ5IGpvaW5zIGFib3ZlLCB3ZSB3YW50IHRvCisJICogZXhjbHVkZSBjYXNlcyB3aGVyZSB0aGUg VmFyIGlzIG9ubHkgbmVlZGVkIGluIHRoZSBmaW5hbCBvdXRwdXQuICBTbworCSAqIGluY2x1ZGUg InJlbGF0aW9uIDAiIGluIHRoZSBjaGVjay4KKwkgKi8KKwlyZWxpZHMgPSBibXNfY29weShyZWwt PnJlbGlkcyk7CisJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCAwKTsKKworCWJhc2Vy ZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHZhci0+dmFybm8pOworCWF0dG5vID0gdmFyLT52YXJh dHRubyAtIGJhc2VyZWwtPm1pbl9hdHRyOworCisJcmV0dXJuIGJtc19ub25lbXB0eV9kaWZmZXJl bmNlKGJhc2VyZWwtPmF0dHJfbmVlZGVkW2F0dG5vXSwgcmVsaWRzKTsKK30KKworLyoKKyAqIGdl dF9leHByZXNzaW9uX3NvcnRncm91cHJlZgorICoJICBSZXR1cm4gc29ydGdyb3VwcmVmIGlmIHRo ZSBnaXZlbiAnZXhwcicgY2FuIGJlIHVzZWQgYXMgYSBncm91cGluZyBrZXkgaW4KKyAqCSAgZ3Jv dXBlZCBwYXRocyBmb3IgYmFzZSBvciBqb2luIHJlbGF0aW9ucywgb3IgMCBvdGhlcndpc2UuCisg KgorICogV2UgZmlyc3QgY2hlY2sgaWYgJ2V4cHInIGlzIGFtb25nIHRoZSBncm91cGluZyBleHBy ZXNzaW9ucy4gIElmIGl0IGlzIG5vdCwKKyAqIHdlIHRoZW4gY2hlY2sgaWYgJ2V4cHInIGlzIGtu b3duIGVxdWFsIHRvIGFueSBvZiB0aGUgZ3JvdXBpbmcgZXhwcmVzc2lvbnMKKyAqIGR1ZSB0byBl cXVpdmFsZW5jZSByZWxhdGlvbnNoaXBzLgorICovCitzdGF0aWMgSW5kZXgKK2dldF9leHByZXNz aW9uX3NvcnRncm91cHJlZihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwcikKK3sKKwlMaXN0 Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHJvb3QtPmdyb3VwX2V4cHJfbGlzdCkKKwl7CisJ CUdyb3VwRXhwckluZm8gKmdlX2luZm8gPSBsZmlyc3Rfbm9kZShHcm91cEV4cHJJbmZvLCBsYyk7 CisKKwkJQXNzZXJ0KElzQShnZV9pbmZvLT5leHByLCBWYXIpKTsKKworCQlpZiAoZXF1YWwoZ2Vf aW5mby0+ZXhwciwgZXhwcikgfHwKKwkJCWV4cHJzX2tub3duX2VxdWFsKHJvb3QsIChOb2RlICop IGV4cHIsIChOb2RlICopIGdlX2luZm8tPmV4cHIsCisJCQkJCQkJICBnZV9pbmZvLT5idHJlZV9v cGZhbWlseSkpCisJCXsKKwkJCUFzc2VydChnZV9pbmZvLT5zb3J0Z3JvdXByZWYgPiAwKTsKKwor CQkJcmV0dXJuIGdlX2luZm8tPnNvcnRncm91cHJlZjsKKwkJfQorCX0KKworCS8qIFRoZSBleHBy ZXNzaW9uIGNhbm5vdCBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcga2V5LiAqLworCXJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCA3OWVjYWE0YzRjLi5kM2Q4NmEx MDhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtOTI5LDYgKzkyOSwxNiBA QCBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwKIAkJ TlVMTCwgTlVMTCwgTlVMTAogCX0sCisJeworCQl7ImVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUiLCBQ R0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxl cyBlYWdlciBhZ2dyZWdhdGlvbi4iKSwKKwkJCU5VTEwsCisJCQlHVUNfRVhQTEFJTgorCQl9LAor CQkmZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwK Kwl9LAogCXsKIAkJeyJlbmFibGVfcGFyYWxsZWxfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZ X1RVTklOR19NRVRIT0QsCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1 c2Ugb2YgcGFyYWxsZWwgYXBwZW5kIHBsYW5zLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IDY2N2UwZGM0MGEuLjJlOWRmNTZjZjQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQor KysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTQx Myw2ICs0MTMsNyBAQAogI2VuYWJsZV9zb3J0ID0gb24KICNlbmFibGVfdGlkc2NhbiA9IG9uCiAj ZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmcgPSBvbgorI2VuYWJsZV9lYWdlcl9hZ2dyZWdhdGUg PSBvZmYKIAogIyAtIFBsYW5uZXIgQ29zdCBDb25zdGFudHMgLQogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDE5NTFhZTdjMTEuLjgxNWMxNGM3MWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0z ODcsNiArMzg3LDE1IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCS8qIGxpc3Qgb2YgUGxhY2VIb2xk ZXJJbmZvcyAqLwogCUxpc3QJICAgKnBsYWNlaG9sZGVyX2xpc3Q7CiAKKwkvKiBsaXN0IG9mIEFn Z0NsYXVzZUluZm9zICovCisJTGlzdAkgICAqYWdnX2NsYXVzZV9saXN0OworCisJLyogbGlzdCBv ZiBHcm91cEV4cHJJbmZvcyAqLworCUxpc3QJICAgKmdyb3VwX2V4cHJfbGlzdDsKKworCS8qIGxp c3Qgb2YgcGxhaW4gVmFycyBjb250YWluZWQgaW4gdGFyZ2V0bGlzdCBhbmQgaGF2aW5nUXVhbCAq LworCUxpc3QJICAgKnRsaXN0X3ZhcnM7CisKIAkvKiBhcnJheSBvZiBQbGFjZUhvbGRlckluZm9z IGluZGV4ZWQgYnkgcGhpZCAqLwogCXN0cnVjdCBQbGFjZUhvbGRlckluZm8gKipwbGFjZWhvbGRl cl9hcnJheSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUsIGFycmF5X3NpemUocGxhY2Vo b2xkZXJfYXJyYXlfc2l6ZSkpOwogCS8qIGFsbG9jYXRlZCBzaXplIG9mIGFycmF5ICovCkBAIC00 MjksNiArNDM4LDEyIEBAIHN0cnVjdCBQbGFubmVySW5mbwogCSAqLwogCVJlbEluZm9MaXN0IHVw cGVyX3JlbHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25v cmUpOwogCisJLyoKKwkgKiBsaXN0IG9mIGdyb3VwZWQtcmVsYXRpb24gUmVsQWdnSW5mb3MsIHdp dGggb25lIGluc3RhbmNlIHBlciBpdGVtIG9mIHRoZQorCSAqIHVwcGVyX3JlbHNbVVBQRVJSRUxf UEFSVElBTF9HUk9VUF9BR0ddIGxpc3QuCisJICovCisJUmVsSW5mb0xpc3QgKmFnZ19pbmZvX2xp c3Q7CisKIAkvKiBSZXN1bHQgdGxpc3RzIGNob3NlbiBieSBncm91cGluZ19wbGFubmVyIGZvciB1 cHBlci1zdGFnZSBwcm9jZXNzaW5nICovCiAJc3RydWN0IFBhdGhUYXJnZXQgKnVwcGVyX3Rhcmdl dHNbVVBQRVJSRUxfRklOQUwgKyAxXSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwog CkBAIC0xMDc5LDYgKzEwOTQsNTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCSgocmVs KS0+cGFydF9zY2hlbWUgJiYgKHJlbCktPmJvdW5kaW5mbyAmJiAocmVsKS0+bnBhcnRzID4gMCAm JiBcCiAJIChyZWwpLT5wYXJ0X3JlbHMgJiYgKHJlbCktPnBhcnRleHBycyAmJiAocmVsKS0+bnVs bGFibGVfcGFydGV4cHJzKQogCisvKgorICogUmVsQWdnSW5mbworICoJCUluZm9ybWF0aW9uIG5l ZWRlZCB0byBjcmVhdGUgZ3JvdXBlZCBwYXRocyBmb3IgYmFzZSBhbmQgam9pbiByZWxzLgorICoK KyAqICJyZWxpZHMiIGlzIHRoZSBzZXQgb2YgcmVsYXRpb24gaWRlbnRpZmllcnMgKFJUIGluZGV4 ZXMpLgorICoKKyAqICJ0YXJnZXQiIGlzIHRoZSBvdXRwdXQgdGxpc3QgZm9yIHRoZSBncm91cGVk IHBhdGhzLgorICoKKyAqICJhZ2dfaW5wdXQiIGlzIHRoZSBvdXRwdXQgdGxpc3QgZm9yIHRoZSBw YXRocyB0aGF0IHByb3ZpZGUgaW5wdXQgdG8gdGhlCisgKiBncm91cGVkIHBhdGhzLiAgT25lIGRp ZmZlcmVuY2UgZnJvbSB0aGUgcmVsdGFyZ2V0IG9mIHRoZSBub24tZ3JvdXBlZAorICogcmVsYXRp b24gaXMgdGhhdCBhZ2dfaW5wdXQgaGFzIGl0cyBzb3J0Z3JvdXByZWZzW10gaW5pdGlhbGl6ZWQu CisgKgorICogImdyb3VwZWRfcm93cyIgaXMgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YgcmVzdWx0 IHR1cGxlcyBvZiB0aGUgZ3JvdXBlZAorICogcmVsYXRpb24uCisgKgorICogImdyb3VwX2NsYXVz ZXMiLCAiZ3JvdXBfZXhwcnMiIGFuZCAiZ3JvdXBfcGF0aGtleXMiIGFyZSBsaXN0cyBvZgorICog U29ydEdyb3VwQ2xhdXNlcywgdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXBpbmcgZXhwcmVzc2lvbnMg YW5kIFBhdGhLZXlzCisgKiByZXNwZWN0aXZlbHkuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJlbEFn Z0luZm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fY29weV9lcXVhbCwgbm9fcmVhZCwgbm9fcXVlcnlf anVtYmxlKQorCisJTm9kZVRhZwkJdHlwZTsKKworCS8qIHNldCBvZiBiYXNlICsgT0ogcmVsaWRz IChyYW5nZXRhYmxlIGluZGV4ZXMpICovCisJUmVsaWRzCQlyZWxpZHM7CisKKwkvKgorCSAqIGRl ZmF1bHQgcmVzdWx0IHRhcmdldGxpc3QgZm9yIFBhdGhzIHNjYW5uaW5nIHRoaXMgZ3JvdXBlZCBy ZWxhdGlvbjsKKwkgKiBsaXN0IG9mIFZhcnMvRXhwcnMsIGNvc3QsIHdpZHRoCisJICovCisJc3Ry dWN0IFBhdGhUYXJnZXQgKnRhcmdldDsKKworCS8qCisJICogdGhlIHRhcmdldGxpc3QgZm9yIFBh dGhzIHRoYXQgcHJvdmlkZSBpbnB1dCB0byB0aGUgZ3JvdXBlZCBwYXRocworCSAqLworCXN0cnVj dCBQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7CisKKwkvKiBlc3RpbWF0ZWQgbnVtYmVyIG9mIHJlc3Vs dCB0dXBsZXMgKi8KKwlDYXJkaW5hbGl0eSBncm91cGVkX3Jvd3M7CisKKwkvKiBhIGxpc3Qgb2Yg U29ydEdyb3VwQ2xhdXNlcyAqLworCUxpc3QJICAgKmdyb3VwX2NsYXVzZXM7CisJLyogYSBsaXN0 IG9mIGdyb3VwaW5nIGV4cHJlc3Npb25zICovCisJTGlzdAkgICAqZ3JvdXBfZXhwcnM7CisJLyog YSBsaXN0IG9mIFBhdGhLZXlzICovCisJTGlzdAkgICAqZ3JvdXBfcGF0aGtleXM7Cit9IFJlbEFn Z0luZm87CisKIC8qCiAgKiBJbmRleE9wdEluZm8KICAqCQlQZXItaW5kZXggaW5mb3JtYXRpb24g Zm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgpAQCAtMzE0Nyw2ICszMjEyLDQxIEBAIHR5cGVkZWYg c3RydWN0IE1pbk1heEFnZ0luZm8KIAlQYXJhbQkgICAqcGFyYW07CiB9IE1pbk1heEFnZ0luZm87 CiAKKy8qCisgKiBUaGUgYWdncmVnYXRlIGV4cHJlc3Npb25zIHRoYXQgYXBwZWFyIGluIHRhcmdl dGxpc3QgYW5kIGhhdmluZyBjbGF1c2VzCisgKi8KK3R5cGVkZWYgc3RydWN0IEFnZ0NsYXVzZUlu Zm8KK3sKKwlwZ19ub2RlX2F0dHIobm9fcmVhZCwgbm9fcXVlcnlfanVtYmxlKQorCisJTm9kZVRh ZwkJdHlwZTsKKworCS8qIHRoZSBBZ2dyZWYgZXhwciAqLworCUFnZ3JlZgkgICAqYWdncmVmOwor CisJLyogbG93ZXN0IGxldmVsIHdlIGNhbiBldmFsdWF0ZSB0aGlzIGFnZ3JlZ2F0ZSBhdCAqLwor CVJlbGlkcwkJYWdnX2V2YWxfYXQ7Cit9IEFnZ0NsYXVzZUluZm87CisKKy8qCisgKiBUaGUgZ3Jv dXBpbmcgZXhwcmVzc2lvbnMgdGhhdCBhcHBlYXIgaW4gZ3JvdXBpbmcgY2xhdXNlcworICovCit0 eXBlZGVmIHN0cnVjdCBHcm91cEV4cHJJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX3JlYWQsIG5v X3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7CisKKwkvKiB0aGUgcmVwcmVzZW50ZWQg ZXhwcmVzc2lvbiAqLworCUV4cHIJICAgKmV4cHI7CisKKwkvKiB0aGUgdGxlU29ydEdyb3VwUmVm IG9mIHRoZSBjb3JyZXNwb25kaW5nIFNvcnRHcm91cENsYXVzZSAqLworCUluZGV4CQlzb3J0Z3Jv dXByZWY7CisKKwkvKiBidHJlZSBvcGZhbWlseSBkZWZpbmluZyB0aGUgb3JkZXJpbmcgKi8KKwlP aWQJCQlidHJlZV9vcGZhbWlseTsKK30gR3JvdXBFeHBySW5mbzsKKwogLyoKICAqIEF0IHJ1bnRp bWUsIFBBUkFNX0VYRUMgc2xvdHMgYXJlIHVzZWQgdG8gcGFzcyB2YWx1ZXMgYXJvdW5kIGZyb20g b25lIHBsYW4KICAqIG5vZGUgdG8gYW5vdGhlci4gIFRoZXkgY2FuIGJlIHVzZWQgdG8gcGFzcyB2 YWx1ZXMgZG93biBpbnRvIHN1YnF1ZXJpZXMgKGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BhdGhub2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApp bmRleCBmMDBiZDU1ZjM5Li5kNTI4MmU5MTZiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aG5vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApA QCAtMzEwLDEwICszMTAsMTggQEAgZXh0ZXJuIHZvaWQgc2V0dXBfc2ltcGxlX3JlbF9hcnJheXMo UGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgZXhwYW5kX3BsYW5uZXJfYXJyYXlzKFBs YW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxk X3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKIAkJCQkJCQkJCVJlbE9w dEluZm8gKnBhcmVudCk7CitleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfc2ltcGxlX2dyb3VwZWRf cmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJCQkJCQkJCVJlbEFnZ0luZm8g KiphZ2dfaW5mb19wKTsKK2V4dGVybiBSZWxPcHRJbmZvICpidWlsZF9ncm91cGVkX3JlbChQbGFu bmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWxfcGxhaW4pOwogZXh0ZXJu IFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCk7 CiBleHRlcm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbF9ub2VycihQbGFubmVySW5mbyAqcm9v dCwgaW50IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVsX2lnbm9yZV9q b2luKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZp bmRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpOworZXh0ZXJuIHZv aWQgYWRkX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCisJ CQkJCQkJUmVsQWdnSW5mbyAqYWdnX2luZm8pOworZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfZ3Jv dXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsCisJCQkJCQkJCQlSZWxB Z2dJbmZvICoqYWdnX2luZm9fcCk7CiBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfam9pbl9yZWwo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgUmVsaWRzIGpvaW5yZWxpZHMsCiAJCQkJCQkJ CSAgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLApAQCAtMzQ5LDQgKzM1Nyw1IEBAIGV4dGVybiBSZWxP cHRJbmZvICpidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJ CQlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywKIAkJCQkJCQkJCQlpbnQgbmFwcGluZm9zLCBBcHBl bmRSZWxJbmZvICoqYXBwaW5mb3MpOwogCitleHRlcm4gUmVsQWdnSW5mbyAqY3JlYXRlX3JlbF9h Z2dfaW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKICNlbmRpZgkJCQkJ CQkvKiBQQVRITk9ERV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IDk3MDQ5OWM0NjkuLjkz OTJhMjdhNGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBi L3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC0yMSw2ICsyMSw3IEBACiAgKiBhbGxw YXRocy5jCiAgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9nZXFvOworZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElN UE9SVCBpbnQgZ2Vxb190aHJlc2hvbGQ7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9wYXJh bGxlbF90YWJsZV9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1pbl9wYXJhbGxl bF9pbmRleF9zY2FuX3NpemU7CkBAIC01Nyw2ICs1OCwxMCBAQCBleHRlcm4gdm9pZCBnZW5lcmF0 ZV9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJ CQkJICBib29sIG92ZXJyaWRlX3Jvd3MpOwogZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfdXNlZnVsX2dh dGhlcl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJ CSBib29sIG92ZXJyaWRlX3Jvd3MpOworZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfZ3JvdXBlZF9wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQs CisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbF9wbGFpbiwKKwkJCQkJCQkJICAgUmVsQWdnSW5m byAqYWdnX2luZm8pOwogZXh0ZXJuIGludAljb21wdXRlX3BhcmFsbGVsX3dvcmtlcihSZWxPcHRJ bmZvICpyZWwsIGRvdWJsZSBoZWFwX3BhZ2VzLAogCQkJCQkJCQkJZG91YmxlIGluZGV4X3BhZ2Vz LCBpbnQgbWF4X3dvcmtlcnMpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX3BhcnRpYWxfYml0bWFwX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFu bWFpbi5oCmluZGV4IGFhZmMxNzM3OTIuLmNlZGNkODhlYmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL29wdGltaXplci9wbGFubWFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFu bWFpbi5oCkBAIC03Miw2ICs3Miw3IEBAIGV4dGVybiB2b2lkIGFkZF9vdGhlcl9yZWxzX3RvX3F1 ZXJ5KFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGJ1aWxkX2Jhc2VfcmVsX3RsaXN0 cyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZmluYWxfdGxpc3QpOwogZXh0ZXJuIHZvaWQgYWRk X3ZhcnNfdG9fdGFyZ2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIAkJCQkJ CQkJICAgUmVsaWRzIHdoZXJlX25lZWRlZCk7CitleHRlcm4gdm9pZCBzZXR1cF9lYWdlcl9hZ2dy ZWdhdGlvbihQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBmaW5kX2xhdGVyYWxfcmVm ZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBjcmVhdGVfbGF0ZXJhbF9q b2luX2luZm8oUGxhbm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIExpc3QgKmRlY29uc3RydWN0X2pv aW50cmVlKFBsYW5uZXJJbmZvICpyb290KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZWFnZXJfYWdncmVnYXRlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv ZWFnZXJfYWdncmVnYXRlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4wM2ZmMTFmOGUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9lYWdlcl9hZ2dyZWdhdGUub3V0CkBAIC0wLDAgKzEsMTI5MyBAQAorLS0KKy0tIEVBR0VSIEFH R1JFR0FUSU9OCistLSBUZXN0IHdlIGNhbiBwdXNoIGFnZ3JlZ2F0aW9uIGRvd24gYmVsb3cgam9p bgorLS0KKy0tIEVuYWJsZSBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBk aXNhYmxlZC4KK1NFVCBlbmFibGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworQ1JFQVRFIFRBQkxF IGVhZ2VyX2FnZ190MSAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190MiAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOwor Q1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190MyAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNp b24pOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QxIFNFTEVDVCBpLCBpLCBpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MiBTRUxFQ1QgaSwg aSUxMCwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdl cl9hZ2dfdDMgU0VMRUNUIGklMTAsIGklMTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MClpOworQU5BTFlaRSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZ WkUgZWFnZXJfYWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gb3ZlciBiYXNl IHJlbAorLS0KKy0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhlIHJlc3Vs dCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVn YXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQy LmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0 Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg RmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBH cm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJU SUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkK KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisoMTggcm93cykK KworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2Vy X2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7Cisg YSB8IGF2ZyAKKy0tLSstLS0tLQorIDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0 OTkKKyA1IHwgNTAwCisgNiB8IDUwMQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorKDkg cm93cykKKworLS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VU IGVuYWJsZV9oYXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2df dDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAg T3V0cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQK KyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgU29y dCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1 dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5j CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlh bCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5i LCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYgorKDIxIHJv d3MpCisKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworIGEgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0 IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQK Kyg5IHJvd3MpCisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworLS0KKy0tIFRlc3QgZWFnZXIgYWdn cmVnYXRpb24gb3ZlciBqb2luIHJlbAorLS0KKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJsZXMsIGFn Z3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5kIGZp bmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEg PSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91 dHB1dDogdDEuYSwgYXZnKCh0Mi5jICsgdDMuYykpCisgICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMp KSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKSkKKyAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykp KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQz LmMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQzLmMsIHQyLmIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQzLmEgPSB0Mi5hKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDMgdDMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMuYSwgdDMuYiwg dDMuYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQorKDI1IHJvd3MpCisKK1NFTEVDVCB0 MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdn X3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5h IEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8 IDQ5NworIDIgfCA0OTkKKyAzIHwgNTAxCisgNCB8IDUwMworIDUgfCA1MDUKKyA2IHwgNTA3Cisg NyB8IDUwOQorIDggfCA1MTEKKyA5IHwgNTEzCisoOSByb3dzKQorCistLSBQcm9kdWNlIHJlc3Vs dHMgd2l0aCBzb3J0aW5nIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOwor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMu YykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQy LmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBh dmcoKHQyLmMgKyB0My5jKSkKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAg ICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAg U29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91 dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5h LCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi5jLCB0My5jLCB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0 IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0 My5jLCB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0My5hID0gdDIuYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQy LmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygyOCBy b3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0 MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0 MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2ZyAK Ky0tLSstLS0tLQorIDEgfCA0OTcKKyAyIHwgNDk5CisgMyB8IDUwMQorIDQgfCA1MDMKKyA1IHwg NTA1CisgNiB8IDUwNworIDcgfCA1MDkKKyA4IHwgNTExCisgOSB8IDUxMworKDkgcm93cykKKwor UkVTRVQgZW5hYmxlX2hhc2hhZ2c7CistLQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9u IHdvcmtzIGZvciBvdXRlciBqb2luCistLQorLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbiBiZSBw dXNoZWQgZG93biB0byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENP U1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklH SFQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0 ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4g IFNvcnQKKyAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAg ICAgU29ydCBLZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIFJpZ2h0IEpvaW4KKyAgICAgICAg ICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5h LCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMKKygxOCByb3dzKQorCitTRUxFQ1QgdDEuYSwg YXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QyIHQy IE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAor LS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1 MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDggfCA1MDMKKyA5IHwgNTA0CisgICB8IDUwNQorKDEw IHJvd3MpCisKKy0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUgcHVzaGVkIGRvd24gdG8g dGhlIG51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0 Mi5iLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190 MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CisgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFNvcnQKKyAgIE91dHB1dDogdDIuYiwgKGF2Zyh0Mi5jKSkKKyAgIFNvcnQgS2V5OiB0Mi5i CisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0Mi5iLCBhdmcodDIuYykK KyAgICAgICAgIEdyb3VwIEtleTogdDIuYgorICAgICAgICAgLT4gIEhhc2ggUmlnaHQgSm9pbgor ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCB0Mi5jCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Mi5iID0gdDEuYikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIs IHQyLmMKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxLmIKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3QxIHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKygx NSByb3dzKQorCitTRUxFQ1QgdDIuYiwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIExF RlQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBPUkRF UiBCWSB0Mi5iOworIGIgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMg fCA0OTgKKyA0IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMwor IDkgfCA1MDQKKyAgIHwgICAgCisoMTAgcm93cykKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdlciBh Z2dyZWdhdGlvbiB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCitTRVQgcGFyYWxsZWxfc2V0 dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsKK1NFVCBtaW5fcGFyYWxsZWxf dGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcj00 OworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBG Uk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBH Uk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRw dXQ6IHQxLmEsIGF2Zyh0Mi5jKQorICAgR3JvdXAgS2V5OiB0MS5hCisgICAtPiAgR2F0aGVyIE1l cmdlCisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAg IFdvcmtlcnMgUGxhbm5lZDogMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIE91 dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgU29ydCBLZXk6 IHQxLmEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIs IHQyLmMKKygyMSByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdn X3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEg T1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0OTcK KyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDggfCA1 MDMKKyA5IHwgNTA0CisoOSByb3dzKQorCitSRVNFVCBwYXJhbGxlbF9zZXR1cF9jb3N0OworUkVT RVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3Np emU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOworRFJPUCBUQUJMRSBl YWdlcl9hZ2dfdDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFnZXJf YWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gZm9yIHBhcnRpdGlvbndpc2Ug am9pbgorLS0KKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2ggYnkgZGVm YXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgVE8g dHJ1ZTsKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1bHQgaXMg ZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190YWIxKHggaW50LCB5IGludCkgUEFSVElUSU9OIEJZIFJBTkdFKHgp OworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2df dGFiMSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3RhYjFfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMTAp IFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDMgUEFSVElUSU9OIE9GIGVh Z2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgzMCk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYjIoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeSk7CitDUkVB VEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZP UiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9w MiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIw KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYjIgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2Fn Z190YWIxIFNFTEVDVCBpICUgMzAsIGkgJSAyMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTks IDIpIGk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMiBTRUxFQ1QgaSAlIDIwLCBpICUgMzAg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwgMjk5LCAzKSBpOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFi MTsKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYjI7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRj aGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3Vu dCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54 ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91 dHB1dDogdDEueCwgKHN1bSh0MS55KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54Cisg ICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgT3V0cHV0OiB0MS54LCBzdW0odDEueSksIGNvdW50KCopCisgICAgICAgICAgICAg ICBHcm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi55ID0gdDEueCkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh YjJfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueQorICAgICAg ICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkpLCBQ QVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQxLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDEueCwgdDEueQorICAgICAgICAgLT4gIEZpbmFsaXplIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0odDFfMS55KSwg Y291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBB UlRJQUwgc3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIgdDJfMQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwg c3VtKHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLnkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzEueCwgdDFfMS55CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSh0MV8yLnkpLCBjb3Vu dCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElB TCBzdW0odDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDJfMi55ID0gdDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8yCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzIueQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0o dDFfMi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwgc3VtKHQxXzIueSksIFBBUlRJQUwgY291bnQoKikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54LCB0MV8yLnkKKyg0OSByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQx LnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBX SEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCBzdW0g IHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0tCisgIDAgfCAgNTAwIHwgICAxMDAKKyAgNiB8 IDExMDAgfCAgIDEwMAorIDEyIHwgIDcwMCB8ICAgMTAwCisgMTggfCAxMzAwIHwgICAxMDAKKyAy NCB8ICA5MDAgfCAgIDEwMAorKDUgcm93cykKKworLS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1h dGNoaW5nIGtleQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1 bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIg dDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55OworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTb3J0CisgICBPdXRwdXQ6IHQyLnksIChzdW0odDEueSkpLCAoY291bnQoKikpCisgICBTb3J0 IEtleTogdDIueQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKQor ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi55CisgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIChQQVJUSUFMIHN1bSh0MS55 KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo dDIueSA9IHQxLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWIyX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSh0MS55KSksIChQQVJUSUFMIGNvdW50 KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBQQVJUSUFM IHN1bSh0MS55KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLnksIHQxLngKKyAgICAgICAgIC0+ ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwg c3VtKHQxXzEueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueQor ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8xLnksIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnkgPSB0MV8xLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQyXzEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55CisgICAgICAgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8x LngsIChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgUEFSVElBTCBzdW0odDFfMS55KSwg UEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAg S2V5OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLnksIHQxXzEueAorICAgICAgICAgLT4gIEZp bmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCBzdW0o dDFfMi55KSwgY291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi55CisgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzIueSwgKFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAg ICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDMgdDJfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwg KFBBUlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBQQVJUSUFMIHN1bSh0MV8yLnkpLCBQQVJU SUFMIGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQxXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMyB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueSwgdDFfMi54CisoNDkgcm93cykKKworU0VMRUNU IHQyLnksIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJf YWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55 OworIHkgIHwgc3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0tLQorICAwIHwgIDUwMCB8 ICAgMTAwCisgIDYgfCAxMTAwIHwgICAxMDAKKyAxMiB8ICA3MDAgfCAgIDEwMAorIDE4IHwgMTMw MCB8ICAgMTAwCisgMjQgfCAgOTAwIHwgICAxMDAKKyg1IHJvd3MpCisKKy0tIFdoZW4gR1JPVVAg QlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1l ZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdl cl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmco dDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQyLngsIChzdW0odDEueCkpLCAo Y291bnQoKikpCisgICBTb3J0IEtleTogdDIueAorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgIE91dHB1dDogdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKQorICAgICAgICAg R3JvdXAgS2V5OiB0Mi54CisgICAgICAgICBGaWx0ZXI6IChhdmcodDEueCkgPiAnMTAnOjpudW1l cmljKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0MV8xLngp KSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMS54KSkKKyAgICAgICAgICAg ICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDEgdDJfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQyXzEueQorICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFf MS54LCAoUEFSVElBTCBzdW0odDFfMS54KSksIChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwg YXZnKHQxXzEueCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEu eCwgUEFSVElBTCBzdW0odDFfMS54KSwgUEFSVElBTCBjb3VudCgqKSwgUEFSVElBTCBhdmcodDFf MS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSksIChQ QVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0Ml8yLnkgPSB0MV8yLngpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQyXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0Ml8yLnkKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwg KFBBUlRJQUwgc3VtKHQxXzIueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0 MV8yLngpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIFBB UlRJQUwgc3VtKHQxXzIueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgYXZnKHQxXzIueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWIxX3AyIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFSVElB TCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDJfMy55ID0gdDFfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8zCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgdDJfMy55CisgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIChQQVJU SUFMIHN1bSh0MV8zLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMy54 KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCBQQVJUSUFM IHN1bSh0MV8zLngpLCBQQVJUSUFMIGNvdW50KCopLCBQQVJUSUFMIGF2Zyh0MV8zLngpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiMV9wMyB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzMueAorKDQ0IHJvd3MpCisKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50KCop IEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0 Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7Cisg eCAgfCBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0tCisgIDIgfCAgNjAwIHwgICAg NTAKKyAgNCB8IDEyMDAgfCAgICA1MAorICA4IHwgIDkwMCB8ICAgIDUwCisgMTIgfCAgNjAwIHwg ICAgNTAKKyAxNCB8IDEyMDAgfCAgICA1MAorIDE4IHwgIDkwMCB8ICAgIDUwCisoNiByb3dzKQor CistLSBDaGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwg YWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBz dW0odDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFi MSB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54 IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBP dXRwdXQ6IHQxLngsIChzdW0oKHQyLnkgKyB0My55KSkpCisgICBTb3J0IEtleTogdDEueAorICAg LT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgIE91dHB1dDogdDEueCwgc3VtKCh0Mi55ICsgdDMueSkpCisgICAgICAgICAgICAgICBH cm91cCBLZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQorICAg ICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEueCA9IHQyLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngs IChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDIueCwgdDMueCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54ID0gdDMueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiMV9wMSB0MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1bSgodDJfMS55ICsgdDNfMS55 KSkKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwg c3VtKCh0Ml8xLnkgKyB0M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDog KHQxXzEueCA9IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQy XzEueSArIHQzXzEueSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8xLngsIHQzXzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9 IHQzXzEueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDJfMQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAg ICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFf Mi54LCBzdW0oKHQyXzIueSArIHQzXzIueSkpCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQx XzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngs IHQzXzIueCwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIFBBUlRJQUwgc3VtKCh0Ml8y LnkgKyB0M18yLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0 Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3Az IHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQzXzIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDNfMi55LCB0M18yLngKKyg3MCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0 My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEu eCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0 MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwgMTAw MDAKKyAgMiB8IDE0MDAwCisgIDQgfCAxODAwMAorICA2IHwgMjIwMDAKKyAgOCB8IDI2MDAwCisg MTAgfCAxMDAwMAorIDEyIHwgMTQwMDAKKyAxNCB8IDE4MDAwCisgMTYgfCAyMjAwMAorIDE4IHwg MjYwMDAKKyAyMCB8IDEwMDAwCisgMjIgfCAxNDAwMAorIDI0IHwgMTgwMDAKKyAyNiB8IDIyMDAw CisgMjggfCAyNjAwMAorKDE1IHJvd3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK1NFVCBl bmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0 Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg RmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMueSwgc3VtKCh0Mi55ICsgdDMu eSkpCisgICBHcm91cCBLZXk6IHQzLnkKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQz LnksIChQQVJUSUFMIHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0My55 CisgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0 M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQxXzEu eCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDJfMS54LCB0M18xLngsIFBB UlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg R3JvdXAgS2V5OiB0M18xLnksIHQyXzEueCwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 Ml8xLnksIHQzXzEueSwgdDJfMS54LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNvcnQgS2V5OiB0M18xLnksIHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8xLnksIHQzXzEueSwgdDJfMS54LCB0M18xLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQzXzEueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDEgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2Vy X2FnZ190YWIxX3AxIHQxXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQzXzIueSwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkKKyAg ICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQxXzIueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDJfMi54LCB0M18yLngsIFBBUlRJQUwgc3VtKCh0 Ml8yLnkgKyB0M18yLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0 M18yLnksIHQyXzIueCwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQzXzIu eSwgdDJfMi54LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQg S2V5OiB0M18yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8yLnksIHQzXzIueSwgdDJfMi54LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJf YWdnX3RhYjFfcDIgdDJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh YjFfcDIgdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3Ay IHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54Cisg ICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQzXzMueSwgKFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSkKKyAgICAgICAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQyXzMueCA9IHQxXzMueCkKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzMueSwgdDJfMy54LCB0M18zLngsIFBBUlRJQUwgc3VtKCh0Ml8zLnkgKyB0M18z LnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0M18zLnksIHQyXzMu eCwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQzXzMueSwgdDJfMy54LCB0 M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiB0M18zLnks IHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQz XzMueSwgdDJfMy54LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMg dDJfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8zLnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDNfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisoNzMgcm93cykKKwor U0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lO IGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMg T04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworIHkgIHwgIHN1bSAg CistLS0tKy0tLS0tLS0KKyAgMCB8ICA3NTAwCisgIDIgfCAxMzUwMAorICA0IHwgMTk1MDAKKyAg NiB8IDI1NTAwCisgIDggfCAzMTUwMAorIDEwIHwgMjI1MDAKKyAxMiB8IDI4NTAwCisgMTQgfCAz NDUwMAorIDE2IHwgNDA1MDAKKyAxOCB8IDQ2NTAwCisoMTAgcm93cykKKworUkVTRVQgZW5hYmxl X2hhc2hhZ2c7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIxOworRFJPUCBUQUJMRSBlYWdlcl9h Z2dfdGFiMjsKKy0tCistLSBUZXN0IHdpdGggbXVsdGktbGV2ZWwgcGFydGl0aW9uaW5nIHNjaGVt ZQorLS0KK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sKHggaW50LCB5IGludCkgUEFSVElU SU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDEgUEFSVElU SU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJf bWwgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190YWJfbWxfcDJfczIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDIgRk9S IFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21s X3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRP ICgzMCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJf bWxfcDNfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9N ICgyMCkgVE8gKDI1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AzX3MyIFBBUlRJ VElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAoMjUpIFRPICgzMCk7 CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiX21sIFNFTEVDVCBpICUgMzAsIGkgJSAzMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiX21sOwor LS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBpcyBwZXJm b3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS54IE9S REVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1bSh0Mi55KSks IChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBwZW5kCisgICAgICAgICAt PiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBz dW0odDIueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEu eCwgKFBBUlRJQUwgc3VtKHQyLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCAoUEFSVElBTCBzdW0o dDIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDIueCwgUEFSVElBTCBzdW0odDIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyLnksIHQyLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3VtKHQyXzEueSksIGNvdW50KCopCisgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwg KFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8x LnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJQUwgc3VtKHQyXzEueSkpLCAo UEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFs IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMS54LCBQQVJUSUFMIHN1bSh0Ml8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AyX3MxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKHQyXzIueSksIGNvdW50KCopCisgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSh0Ml8y LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6 ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFfMgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJQUwgc3VtKHQyXzIu eSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQ YXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMi54LCBQQVJUSUFMIHN1bSh0Ml8yLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AyX3MyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueCwgc3VtKHQyXzMueSksIGNvdW50KCop CisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIChQQVJUSUFMIHN1 bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfMworICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3Vt KHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy54LCBQQVJUSUFMIHN1bSh0Ml8zLnkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzMueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AzX3MxIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgc3VtKHQyXzQueSksIGNv dW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzQueAorICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngsIChQQVJU SUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgKFBBUlRJ QUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfNC54LCBQQVJUSUFMIHN1bSh0Ml80LnkpLCBQQVJUSUFMIGNv dW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyg3OSByb3dzKQorCitTRUxFQ1Qg dDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBl YWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnggT1JERVIgQlkg dDEueDsKKyB4ICB8ICBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLS0rLS0tLS0tLQorICAwIHwg ICAgIDAgfCAgMTA4OQorICAxIHwgIDExNTYgfCAgMTE1NgorICAyIHwgIDIzMTIgfCAgMTE1Ngor ICAzIHwgIDM0NjggfCAgMTE1NgorICA0IHwgIDQ2MjQgfCAgMTE1NgorICA1IHwgIDU3ODAgfCAg MTE1NgorICA2IHwgIDY5MzYgfCAgMTE1NgorICA3IHwgIDgwOTIgfCAgMTE1NgorICA4IHwgIDky NDggfCAgMTE1NgorICA5IHwgMTA0MDQgfCAgMTE1NgorIDEwIHwgMTE1NjAgfCAgMTE1NgorIDEx IHwgMTE5NzkgfCAgMTA4OQorIDEyIHwgMTMwNjggfCAgMTA4OQorIDEzIHwgMTQxNTcgfCAgMTA4 OQorIDE0IHwgMTUyNDYgfCAgMTA4OQorIDE1IHwgMTYzMzUgfCAgMTA4OQorIDE2IHwgMTc0MjQg fCAgMTA4OQorIDE3IHwgMTg1MTMgfCAgMTA4OQorIDE4IHwgMTk2MDIgfCAgMTA4OQorIDE5IHwg MjA2OTEgfCAgMTA4OQorIDIwIHwgMjE3ODAgfCAgMTA4OQorIDIxIHwgMjI4NjkgfCAgMTA4OQor IDIyIHwgMjM5NTggfCAgMTA4OQorIDIzIHwgMjUwNDcgfCAgMTA4OQorIDI0IHwgMjYxMzYgfCAg MTA4OQorIDI1IHwgMjcyMjUgfCAgMTA4OQorIDI2IHwgMjgzMTQgfCAgMTA4OQorIDI3IHwgMjk0 MDMgfCAgMTA4OQorIDI4IHwgMzA0OTIgfCAgMTA4OQorIDI5IHwgMzE1ODEgfCAgMTA4OQorKDMw IHJvd3MpCisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFs IGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9N IGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0 Mi54IEdST1VQIEJZIHQxLnkgT1JERVIgQlkgdDEueTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0 OiB0MS55LCAoc3VtKHQyLnkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQxLnkKKyAgIC0+ ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxLnksIHN1bSh0Mi55 KSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDEueQorICAgICAgICAgLT4gIEFwcGVu ZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV8xLnksIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEg dDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLnksIHQxXzEueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMS54LCAoUEFSVElBTCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIFBBUlRJQUwg c3VtKHQyXzEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDJfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAor ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLnksIChQQVJUSUFMIHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEg dDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLnksIHQxXzIueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIFBBUlRJQUwg c3VtKHQyXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDJfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIu eAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV8zLnksIChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czIgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLnksIHQxXzMu eAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDJfMy55KSksIChQQVJUSUFMIGNvdW50 KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIFBBUlRJ QUwgc3VtKHQyXzMueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDJfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQy XzMueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV80LnksIChQQVJUSUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikp CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDNfczEgdDFfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LnksIHQx XzQueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIFBB UlRJQUwgc3VtKHQyXzQueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDJf NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80Lnks IHQyXzQueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV81LnksIChQQVJUSUFMIHN1bSh0Ml81LnkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV81LnggPSB0Ml81LngpCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDNfczIgdDFfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV81Lnks IHQxXzUueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfNS54LCAoUEFSVElBTCBzdW0odDJfNS55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81Lngs IFBBUlRJQUwgc3VtKHQyXzUueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNS54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIg dDJfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81 LnksIHQyXzUueAorKDY3IHJvd3MpCisKK1NFTEVDVCB0MS55LCBzdW0odDIueSksIGNvdW50KCop IEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEu eCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55OworIHkgIHwgIHN1bSAgfCBjb3Vu dCAKKy0tLS0rLS0tLS0tLSstLS0tLS0tCisgIDAgfCAgICAgMCB8ICAxMDg5CisgIDEgfCAgMTE1 NiB8ICAxMTU2CisgIDIgfCAgMjMxMiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8ICAxMTU2CisgIDQg fCAgNDYyNCB8ICAxMTU2CisgIDUgfCAgNTc4MCB8ICAxMTU2CisgIDYgfCAgNjkzNiB8ICAxMTU2 CisgIDcgfCAgODA5MiB8ICAxMTU2CisgIDggfCAgOTI0OCB8ICAxMTU2CisgIDkgfCAxMDQwNCB8 ICAxMTU2CisgMTAgfCAxMTU2MCB8ICAxMTU2CisgMTEgfCAxMTk3OSB8ICAxMDg5CisgMTIgfCAx MzA2OCB8ICAxMDg5CisgMTMgfCAxNDE1NyB8ICAxMDg5CisgMTQgfCAxNTI0NiB8ICAxMDg5Cisg MTUgfCAxNjMzNSB8ICAxMDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTcgfCAxODUxMyB8ICAx MDg5CisgMTggfCAxOTYwMiB8ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5CisgMjAgfCAyMTc4 MCB8ICAxMDg5CisgMjEgfCAyMjg2OSB8ICAxMDg5CisgMjIgfCAyMzk1OCB8ICAxMDg5CisgMjMg fCAyNTA0NyB8ICAxMDg5CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjUgfCAyNzIyNSB8ICAxMDg5 CisgMjYgfCAyODMxNCB8ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAxMDg5CisgMjggfCAzMDQ5MiB8 ICAxMDg5CisgMjkgfCAzMTU4MSB8ICAxMDg5CisoMzAgcm93cykKKworLS0gQ2hlY2sgd2l0aCBl YWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSwg Y291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0 MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLngg R1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1bSgodDIueSArIHQz LnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBwZW5kCisgICAg ICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0 MS54LCBzdW0oKHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh Yl9tbF9wMSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54CisgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi54LCB0My54LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueCwgdDMu eCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54ID0gdDMueCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDEgdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0oKHQyXzEueSArIHQzXzEu eSkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54 LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKSwgKFBB UlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSksIFBBUlRJQUwgY291 bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0 M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQy XzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDNf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBzdW0oKHQyXzIueSArIHQzXzIueSkpLCBj b3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFS VElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFf MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwg dDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSksIFBBUlRJQUwgY291bnQoKikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54LCB0M18yLnks IHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDNfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M18yLnksIHQzXzIueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgIE91dHB1dDogdDFfMy54LCBzdW0oKHQyXzMueSArIHQzXzMueSkpLCBjb3VudCgq KQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8zLngKKyAgICAgICAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCAoUEFSVElBTCBz dW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfMworICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwg dDNfMy54LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgdDNfMy54 LCBQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54LCB0M18zLnksIHQzXzMu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJf My54ID0gdDNfMy54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQyXzMKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8z LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwg dDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDNfMworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnks IHQzXzMueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgIE91dHB1dDogdDFfNC54LCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBjb3VudCgqKQorICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV80LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54LCAoUEFSVElBTCBzdW0oKHQy XzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNfNC54 LCAoUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNfNC54LCBQQVJU SUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54LCB0M180LnksIHQzXzQueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfNC54ID0g dDNfNC54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDNfNC54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDNfNAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQu eAorKDExNCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikg RlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54 ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkg dDEueCBPUkRFUiBCWSB0MS54OworIHggIHwgICBzdW0gICB8IGNvdW50IAorLS0tLSstLS0tLS0t LS0rLS0tLS0tLQorICAwIHwgICAgICAgMCB8IDM1OTM3CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQK KyAgMiB8ICAxNTcyMTYgfCAzOTMwNAorICAzIHwgIDIzNTgyNCB8IDM5MzA0CisgIDQgfCAgMzE0 NDMyIHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAzOTMwNAorICA2IHwgIDQ3MTY0OCB8IDM5MzA0 CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAgOCB8ICA2Mjg4NjQgfCAzOTMwNAorICA5IHwgIDcw NzQ3MiB8IDM5MzA0CisgMTAgfCAgNzg2MDgwIHwgMzkzMDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkz NworIDEyIHwgIDg2MjQ4OCB8IDM1OTM3CisgMTMgfCAgOTM0MzYyIHwgMzU5MzcKKyAxNCB8IDEw MDYyMzYgfCAzNTkzNworIDE1IHwgMTA3ODExMCB8IDM1OTM3CisgMTYgfCAxMTQ5OTg0IHwgMzU5 MzcKKyAxNyB8IDEyMjE4NTggfCAzNTkzNworIDE4IHwgMTI5MzczMiB8IDM1OTM3CisgMTkgfCAx MzY1NjA2IHwgMzU5MzcKKyAyMCB8IDE0Mzc0ODAgfCAzNTkzNworIDIxIHwgMTUwOTM1NCB8IDM1 OTM3CisgMjIgfCAxNTgxMjI4IHwgMzU5MzcKKyAyMyB8IDE2NTMxMDIgfCAzNTkzNworIDI0IHwg MTcyNDk3NiB8IDM1OTM3CisgMjUgfCAxNzk2ODUwIHwgMzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAz NTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3CisgMjggfCAyMDEyNDcyIHwgMzU5MzcKKyAyOSB8 IDIwODQzNDYgfCAzNTkzNworKDMwIHJvd3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkp LCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMu eCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDMu eSwgKHN1bSgodDIueSArIHQzLnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0My55Cisg ICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0My55LCBzdW0o KHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQzLnkKKyAgICAg ICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMS55LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0 MV8xLnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEueSwgdDJfMS54LCB0M18xLngsIChQQVJUSUFM IHN1bSgodDJfMS55ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0Ml8xLngsIHQzXzEueCwgUEFSVElB TCBzdW0oKHQyXzEueSArIHQzXzEueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQzXzEueSwgdDJfMS54LCB0M18xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0M18xLnksIHQyXzEu eCwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDJfMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnks IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNf MS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0M18xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEu eSwgdDNfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQzXzIueSwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSksIChQ QVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54 ID0gdDJfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0M18yLnksIHQyXzIueCwgdDNfMi54LCAoUEFSVElBTCBz dW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDJfMi54LCB0M18yLngsIFBBUlRJQUwg c3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0M18yLnksIHQyXzIueCwgdDNfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDNfMi55LCB0Ml8yLngs IHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDNfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQx XzMueCA9IHQyXzMueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMy55LCB0Ml8zLngsIHQzXzMueCwgKFBBUlRJ QUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnksIHQyXzMueCwgdDNfMy54LCBQQVJU SUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDNfMy55LCB0Ml8zLngsIHQzXzMueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQzXzMueSwgdDJf My54LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0Ml8z CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQzXzMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCAoUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQu eSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6 ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfNAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDJfNC54LCB0M180LngsIChQ QVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCB0Ml80LngsIHQzXzQueCwg UEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQzXzQueSwgdDJfNC54LCB0M180 LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0M180Lnks IHQyXzQueCwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0Ml80LnggPSB0M180LngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEg dDJfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0 M180CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgKFBBUlRJQUwgc3VtKCh0Ml81LnkgKyB0 M181LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfNS54ID0gdDJfNS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfNS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M181LnksIHQyXzUueCwgdDNfNS54 LCAoUEFSVElBTCBzdW0oKHQyXzUueSArIHQzXzUueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgdDJfNS54LCB0M181 LngsIFBBUlRJQUwgc3VtKCh0Ml81LnkgKyB0M181LnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0M181LnksIHQyXzUueCwg dDNfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueSwgdDNf NS55LCB0Ml81LngsIHQzXzUueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDJfNS54ID0gdDNfNS54KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Az X3MyIHQyXzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfNS55LCB0Ml81LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzUueSwgdDNfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNf czIgdDNfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M181LnksIHQzXzUueAorKDEwMiByb3dzKQorCitTRUxFQ1QgdDMueSwgc3Vt KHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMg b24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworIHkgIHwgICBzdW0g ICB8IGNvdW50IAorLS0tLSstLS0tLS0tLS0rLS0tLS0tLQorICAwIHwgICAgICAgMCB8IDM1OTM3 CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQKKyAgMiB8ICAxNTcyMTYgfCAzOTMwNAorICAzIHwgIDIz NTgyNCB8IDM5MzA0CisgIDQgfCAgMzE0NDMyIHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAzOTMw NAorICA2IHwgIDQ3MTY0OCB8IDM5MzA0CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAgOCB8ICA2 Mjg4NjQgfCAzOTMwNAorICA5IHwgIDcwNzQ3MiB8IDM5MzA0CisgMTAgfCAgNzg2MDgwIHwgMzkz MDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8IDM1OTM3CisgMTMgfCAg OTM0MzYyIHwgMzU5MzcKKyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDE1IHwgMTA3ODExMCB8IDM1 OTM3CisgMTYgfCAxMTQ5OTg0IHwgMzU5MzcKKyAxNyB8IDEyMjE4NTggfCAzNTkzNworIDE4IHwg MTI5MzczMiB8IDM1OTM3CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyMCB8IDE0Mzc0ODAgfCAz NTkzNworIDIxIHwgMTUwOTM1NCB8IDM1OTM3CisgMjIgfCAxNTgxMjI4IHwgMzU5MzcKKyAyMyB8 IDE2NTMxMDIgfCAzNTkzNworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjUgfCAxNzk2ODUwIHwg MzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3CisgMjgg fCAyMDEyNDcyIHwgMzU5MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworKDMwIHJvd3MpCisKK0RS T1AgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKaW5kZXggZmFkN2ZjM2E3ZS4uMWRkYTY5ZTdjMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1MCw2ICsxNTAsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGlu ZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0KICBlbmFibGVfYXN5bmNfYXBwZW5kICAg ICAgICAgICAgfCBvbgogIGVuYWJsZV9iaXRtYXBzY2FuICAgICAgICAgICAgICB8IG9uCisgZW5h YmxlX2VhZ2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb2ZmCiAgZW5hYmxlX2dhdGhlcm1lcmdlICAg ICAgICAgICAgIHwgb24KICBlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyAgICAgfCBvbgogIGVu YWJsZV9oYXNoYWdnICAgICAgICAgICAgICAgICB8IG9uCkBAIC0xNzAsNyArMTcxLDcgQEAgc2Vs ZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJs ZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQg ICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAg fCBvbgotKDIyIHJvd3MpCisoMjMgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2 ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBt YXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3Qg cG9zdG1hc3RlciBzdGFydC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxf c2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDI0Mjll YzJiYmEuLmQ1Njk3ZTU2NTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxf c2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTE5 LDcgKzExOSw3IEBAIHRlc3Q6IHBsYW5jYWNoZSBsaW1pdCBwbHBnc3FsIGNvcHkyIHRlbXAgZG9t YWluIHJhbmdlZnVuY3MgcHJlcGFyZSBjb252ZXJzaW9uIHRyCiAjIFRoZSBzdGF0cyB0ZXN0IHJl c2V0cyBzdGF0cywgc28gbm90aGluZyBlbHNlIG5lZWRpbmcgc3RhdHMgYWNjZXNzIGNhbiBiZSBp bgogIyB0aGlzIGdyb3VwLgogIyAtLS0tLS0tLS0tCi10ZXN0OiBwYXJ0aXRpb25fbWVyZ2UgcGFy dGl0aW9uX3NwbGl0IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhh c2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxl c29ydCBleHBsYWluIGNvbXByZXNzaW9uIG1lbW9pemUgc3RhdHMgcHJlZGljYXRlCit0ZXN0OiBw YXJ0aXRpb25fbWVyZ2UgcGFydGl0aW9uX3NwbGl0IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9w cnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBh cnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9uIG1lbW9pemUgc3RhdHMg cHJlZGljYXRlIGVhZ2VyX2FnZ3JlZ2F0ZQogCiAjIGV2ZW50X3RyaWdnZXIgZGVwZW5kcyBvbiBj cmVhdGVfYW0gYW5kIGNhbm5vdCBydW4gY29uY3VycmVudGx5IHdpdGgKICMgYW55IHRlc3QgdGhh dCBydW5zIERETApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVn YXRlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0ZS5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDA1MGU0ZGY0NAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VhZ2VyX2FnZ3JlZ2F0ZS5zcWwKQEAgLTAsMCAr MSwxOTIgQEAKKy0tCistLSBFQUdFUiBBR0dSRUdBVElPTgorLS0gVGVzdCB3ZSBjYW4gcHVzaCBh Z2dyZWdhdGlvbiBkb3duIGJlbG93IGpvaW4KKy0tCisKKy0tIEVuYWJsZSBlYWdlciBhZ2dyZWdh dGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfZWFnZXJfYWdn cmVnYXRlIFRPIG9uOworCitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QxIChhIGludCwgYiBpbnQs IGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QyIChhIGludCwg YiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3QzIChh IGludCwgYiBpbnQsIGMgZG91YmxlIHByZWNpc2lvbik7CisKK0lOU0VSVCBJTlRPIGVhZ2VyX2Fn Z190MSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitJTlNF UlQgSU5UTyBlYWdlcl9hZ2dfdDIgU0VMRUNUIGksIGklMTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMClpOworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QzIFNFTEVDVCBpJTEwLCBpJTEw LCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKKworQU5BTFlaRSBlYWdlcl9hZ2df dDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZWkUgZWFnZXJfYWdnX3QzOworCisKKy0t CistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgYmFzZSByZWwKKy0tCisKKy0tIFBlcmZv cm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9pbiBpdCB0byB0aGUg b3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24uCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdn X3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEg T1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEg dDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBzb3J0aW5nIGFnZ3JlZ2F0aW9u CitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBP RkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFn ZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsK K1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9h Z2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCitS RVNFVCBlbmFibGVfaGFzaGFnZzsKKworCistLQorLS0gVGVzdCBlYWdlciBhZ2dyZWdhdGlvbiBv dmVyIGpvaW4gcmVsCistLQorCistLSBQZXJmb3JtIGpvaW4gb2YgdGFibGVzLCBhZ2dyZWdhdGUg dGhlIHJlc3VsdCwgam9pbiBpdCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0 aGUgYWdncmVnYXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEu YSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190 MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBH Uk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5j KSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIu YiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5hID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVS IEJZIHQxLmE7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRpb24K K1NFVCBlbmFibGVfaGFzaGFnZyBUTyBvZmY7CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9G RikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpP SU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9O IHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBh dmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQy IE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQ IEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKworUkVTRVQgZW5hYmxlX2hhc2hhZ2c7CisKKworLS0K Ky0tIFRlc3QgdGhhdCBlYWdlciBhZ2dyZWdhdGlvbiB3b3JrcyBmb3Igb3V0ZXIgam9pbgorLS0K KworLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbiBiZSBwdXNoZWQgZG93biB0byB0aGUgbm9uLW51 bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBh dmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklHSFQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIg T04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEs IGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBSSUdIVCBKT0lOIGVhZ2VyX2FnZ190MiB0 MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisKKy0tIEVuc3Vy ZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUgcHVzaGVkIGRvd24gdG8gdGhlIG51bGxhYmxlIHNpZGUK K0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi5iLCBhdmcodDIuYykgRlJP TSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIu YiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CitTRUxFQ1QgdDIuYiwgYXZnKHQyLmMpIEZS T00gZWFnZXJfYWdnX3QxIHQxIExFRlQgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQy LmIgR1JPVVAgQlkgdDIuYiBPUkRFUiBCWSB0Mi5iOworCisKKy0tCistLSBUZXN0IHRoYXQgZWFn ZXIgYWdncmVnYXRpb24gd29ya3MgZm9yIHBhcmFsbGVsIHBsYW5zCistLQorCitTRVQgcGFyYWxs ZWxfc2V0dXBfY29zdD0wOworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsKK1NFVCBtaW5fcGFy YWxsZWxfdGFibGVfc2Nhbl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlcj00OworCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZn KHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIg PSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIu YykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQy LmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworCitSRVNFVCBwYXJhbGxlbF9zZXR1cF9j b3N0OworUkVTRVQgcGFyYWxsZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9wYXJhbGxlbF90YWJs ZV9zY2FuX3NpemU7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOworCisK K0RST1AgVEFCTEUgZWFnZXJfYWdnX3QxOworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdDI7CitEUk9Q IFRBQkxFIGVhZ2VyX2FnZ190MzsKKworCistLQorLS0gVGVzdCBlYWdlciBhZ2dyZWdhdGlvbiBm b3IgcGFydGl0aW9ud2lzZSBqb2luCistLQorCistLSBFbmFibGUgcGFydGl0aW9ud2lzZSBhZ2dy ZWdhdGUsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlv bndpc2VfYWdncmVnYXRlIFRPIHRydWU7CistLSBFbmFibGUgcGFydGl0aW9ud2lzZSBqb2luLCB3 aGljaCBieSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pv aW4gVE8gdHJ1ZTsKKworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxKHggaW50LCB5IGludCkg UEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AxIFBB UlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIx IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3Rh YjFfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRP ICgzMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjIoeCBpbnQsIHkgaW50KSBQQVJUSVRJ T04gQlkgUkFOR0UoeSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjJfcDEgUEFSVElUSU9O IE9GIGVhZ2VyX2FnZ190YWIyIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBU QUJMRSBlYWdlcl9hZ2dfdGFiMl9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZB TFVFUyBGUk9NICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMyBQ QVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsK K0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIxIFNFTEVDVCBpICUgMzAsIGkgJSAyMCBGUk9NIGdl bmVyYXRlX3NlcmllcygwLCAyOTksIDIpIGk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMiBT RUxFQ1QgaSAlIDIwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCwgMjk5LCAzKSBpOwor CitBTkFMWVpFIGVhZ2VyX2FnZ190YWIxOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiMjsKKworLS0g V2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBpcyBwZXJmb3Jt ZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VM RUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFn ZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0 MS54OworU0VMRUNUIHQxLngsIHN1bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFi MSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDEueCBP UkRFUiBCWSB0MS54OworCistLSBHUk9VUCBCWSBoYXZpbmcgb3RoZXIgbWF0Y2hpbmcga2V5CitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueSwgc3VtKHQxLnkpLCBjb3Vu dCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54 ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVSIEJZIHQyLnk7CitTRUxFQ1QgdDIueSwgc3VtKHQx LnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBX SEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi55IE9SREVSIEJZIHQyLnk7CisKKy0tIFdoZW4g R1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBl cmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYp CitTRUxFQ1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQx LCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklO RyBhdmcodDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworU0VMRUNUIHQyLngsIHN1bSh0MS54KSwg Y291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUg dDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueCBIQVZJTkcgYXZnKHQxLngpID4gMTAgT1JERVIgQlkg dDIueDsKKworLS0gQ2hlY2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCist LSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1Qg dDEueCwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJf YWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54 ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQy LnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIg T04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9V UCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK1NFVCBl bmFibGVfaGFzaGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxF Q1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0 Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CitTRUxFQ1QgdDMueSwgc3Vt KHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEg dDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBH Uk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKworRFJP UCBUQUJMRSBlYWdlcl9hZ2dfdGFiMTsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3RhYjI7CisKKwor LS0KKy0tIFRlc3Qgd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb25pbmcgc2NoZW1lCistLQorQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWwoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFO R0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMSBQQVJUSVRJT04gT0YgZWFn ZXJfYWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYl9tbF9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbCBGT1IgVkFM VUVTIEZST00gKDEwKSBUTyAoMjApIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFURSBUQUJM RSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3Ay IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgxNSk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3Rh Yl9tbF9wMl9zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZS T00gKDE1KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDMgUEFSVElU SU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKSBQQVJU SVRJT04gQlkgUkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wM19zMSBQ QVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9tbF9wMyBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAo MjUpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDNfczIgUEFSVElUSU9OIE9GIGVh Z2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9NICgyNSkgVE8gKDMwKTsKK0lOU0VSVCBJ TlRPIGVhZ2VyX2FnZ190YWJfbWwgU0VMRUNUIGkgJSAzMCwgaSAlIDMwIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMDApIGk7CisKK0FOQUxZWkUgZWFnZXJfYWdnX3RhYl9tbDsKKworLS0gV2hl biBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBpcyBwZXJmb3JtZWQg Zm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU IHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4g ZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZ IHQxLng7CitTRUxFQ1QgdDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190 YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZ IHQxLnggT1JERVIgQlkgdDEueDsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3Qg bWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlv bi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS55LCBzdW0odDIueSks IGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwg dDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55OworU0VMRUNUIHQx LnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS55IE9SREVSIEJZIHQx Lnk7CisKKy0tIENoZWNrIHdpdGggZWFnZXIgYWdncmVnYXRpb24gb3ZlciBqb2luIHJlbAorLS0g ZnVsbCBhZ2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQx LngsIHN1bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBK T0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFi X21sIHQzIG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKK1NFTEVD VCB0MS54LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwg dDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdn X3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisK Ky0tIHBhcnRpYWwgYWdncmVnYXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NF TEVDVCB0My55LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJf bWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJf YWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7 CitTRUxFQ1QgdDMueSwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2df dGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVh Z2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0 My55OworCitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWw7CmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDUyNTUxNjAyMTIuLjM0N2M4MmZlMWEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CkBAIC00MSw2ICs0MSw3IEBAIEFmdGVyVHJpZ2dlcnNUYWJsZURhdGEKIEFmdGVyVHJpZ2dl cnNUcmFuc0RhdGEKIEFnZwogQWdnQ2xhdXNlQ29zdHMKK0FnZ0NsYXVzZUluZm8KIEFnZ0luZm8K IEFnZ1BhdGgKIEFnZ1NwbGl0CkBAIC0xMDYwLDYgKzEwNjEsNyBAQCBHcmFudFRhcmdldFR5cGUK IEdyb3VwCiBHcm91cEJ5T3JkZXJpbmcKIEdyb3VwQ2xhdXNlCitHcm91cEV4cHJJbmZvCiBHcm91 cFBhdGgKIEdyb3VwUGF0aEV4dHJhRGF0YQogR3JvdXBSZXN1bHRQYXRoCkBAIC0yMzcwLDYgKzIz NzIsNyBAQCBSZWluZGV4T2JqZWN0VHlwZQogUmVpbmRleFBhcmFtcwogUmVpbmRleFN0bXQKIFJl aW5kZXhUeXBlCitSZWxBZ2dJbmZvCiBSZWxGaWxlTG9jYXRvcgogUmVsRmlsZUxvY2F0b3JCYWNr ZW5kCiBSZWxGaWxlTnVtYmVyCkBAIC0yMzc4LDYgKzIzODEsNyBAQCBSZWxJbmZvCiBSZWxJbmZv QXJyCiBSZWxJbmZvRW50cnkKIFJlbEluZm9MaXN0CitSZWxJbmZvTGlzdEluZm8KIFJlbE1hcEZp bGUKIFJlbE1hcHBpbmcKIFJlbE9wdEluZm8KLS0gCjIuNDMuMAoK --000000000000c0427e061fc88d7d--