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 1u5gln-004W2z-42 for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Apr 2025 08:08:19 +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 1u5glj-009RVF-UC for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Apr 2025 08:08:16 +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 1u5glj-009RV7-F1 for pgsql-hackers@lists.postgresql.org; Fri, 18 Apr 2025 08:08:16 +0000 Received: from mail-ua1-x933.google.com ([2607:f8b0:4864:20::933]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1u5glg-000iBX-29 for pgsql-hackers@lists.postgresql.org; Fri, 18 Apr 2025 08:08:15 +0000 Received: by mail-ua1-x933.google.com with SMTP id a1e0cc1a2514c-86d30787263so663908241.1 for ; Fri, 18 Apr 2025 01:08:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1744963691; x=1745568491; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=jjfDW7pZBoLK4DoEUnW/u19su0fNnjJM6Wre9Z7HikY=; b=m5zH2JHGZU1Twp/GuO4OaL0mf1bA2aBLnY1irwdB6xfqOE76x4TQtuR5f1LFO+Dd8z MejYWv1nJzFZ0wFzRgAcPi+KXyCBp5rps8QayVqSseqF638RGfV7vLBFIfxLD0a7yrvL a7fUurOOBIgtduYh6X6sesv+2ACkrSH5Zmztjb/++DmlevWUtSYIgvnlRyJLxSjJHRed 2MbMUXauKtNLuFfK04sIvVr/BLxkgSpRoe31+wH7tFn45XNpKCBiLAiK5oDt/Auvfc0+ MpLYsd1pproK4FJauVqZtrY223Je32BMLcpDohaBlN/4jU1kZDrLJWgfSC7aj2AhpUCD b+0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744963691; x=1745568491; h=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=jjfDW7pZBoLK4DoEUnW/u19su0fNnjJM6Wre9Z7HikY=; b=JT5btGkfbmigI3Pg6vu6wkRvpzVawituqAsmBVdTv0A41FBFOm3qWFXPXlfG73NDqW WW0tvireDZPxpKAQNUwPThiEIuSmj8G7iiiy42ZP1qU3lEpDJ0Wg5iLRAoX7C+LCxh2r y+3NSfP6ip5hnG0QU6xjQE6v/LiKRZRhbkUVu/gqt8np+3dt4CIPVQo+drcBTTWXaGXG e40goc+owxvGhwQ9RH+N4WzHHXB1NU7Ydc8FgUzmvJk25zTFVbtHMIjBWUC7z1e94NCo K9uqV6UKqK5rtVWUlO+tjMqAt36SUW9gu8MgNShHnv/iiyOoX0qSqVCqoDQ2TgsBthvE dLMg== X-Gm-Message-State: AOJu0YyPSfGaJu/i/7x7Bym5RmW67cyiaFH20tyI3OEHJZtppRD0lt7j V90DsEwd5Il4Iy4lgqIQer7MzYS+U/E0ZKOxiwsT2I0p4H+Qrvw8QngP7eFvTd7ZXxxMlNqKA6l heHJCCyATrSYqvTVDAXh2lwgNVWjOxcpiGHc= X-Gm-Gg: ASbGncue2Q+mzvNq0NLXcC+2tIDbKJzMyD6Dr6GZ+reCLYChMlqJIiVc+jqyj+uzkYH VEEt1s6+eWP516oReWu5gG1VRTrd77/FXiB+TOmKpocZ1KOFu/vOF7HfWiRn+hXKrama61njlyQ 7CT2AUjTOPO/7Q3NcYcG2S6aBLgvk5DMbP78zriiDlQ2uKMW/w284= X-Google-Smtp-Source: AGHT+IG+rNQFpjn0lKCULJ+4sbe+CoeSdmhIOaYHT/96av0LDRshda3QyjGI1bn0JIiqSAKnfFD35Ph+HAAFHhpdd7A= X-Received: by 2002:a67:f0d4:0:b0:4c1:8c9d:3f39 with SMTP id ada2fe7eead31-4cb800b4eedmr1206227137.4.1744963690971; Fri, 18 Apr 2025 01:08:10 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Fri, 18 Apr 2025 16:07:34 +0800 X-Gm-Features: ATxdqUF03Aw5TpOzsTjJ7WRkyAuVKJpgI1qilfoS_oo_Syk11PoM-lLZZ7qRzTI Message-ID: Subject: Re: using index to speedup add not null constraints to a table To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000f2bda906330904cd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f2bda906330904cd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Feb 5, 2025 at 4:24=E2=80=AFPM jian he wrote: > > rebased new patch attached. > I also did some cosmetic changes. comments refined. > make sure using index_scan mechanism to fast check column not-null can > only be used via btree index. > isolation tests are simplified. I realized that my previous patch was quite wrong, we should not do indexscan verify individual not-null constraints on phase2= . So a new patch is attached, the main idea is Phase2 collects all to be added not-null constraints to AlteredTableInfo->constraints. then in Phase3 check, can we use index to fast check not-null constraint or not. To minimize concurrency issues, using an index scan to quickly validate NOT NULL constraints requires strict conditions in Phase3: * No table rewrite * No table scan * Each NOT NULL constraint must have a suitable supporting index for fast checking * The table must already hold an AccessExclusiveLock * The DDL must not involve creating any new indexes I don't have any good ideas to do the regress tests. I use ereport(NOTICE, errmsg("all not-null constraints on relation \"%s\" are validated by index scan", RelationGetRelationName(oldrel))); to do the tests. for example: create temp table t2 (x int, y int, z int, primary key (x, y)); create unique index t2_z_uidx on t2(z); alter table t2 alter column z set not null; NOTICE: all not-null constraints on relation "t2" are validated by index s= can ALTER TABLE --000000000000f2bda906330904cd Content-Type: text/x-patch; charset="US-ASCII"; name="v4-0001-using-indexscan-to-speedup-add-not-null-constrain.patch" Content-Disposition: attachment; filename="v4-0001-using-indexscan-to-speedup-add-not-null-constrain.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m9mia4jk0 RnJvbSAwYjRhZDM1ZThmYmM0NmY5M2JhNmRmMmVmNzAxM2ZmMmYzMDU1MjE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTggQXByIDIwMjUgMTY6MDU6NDIgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 IDEvMV0gdXNpbmcgaW5kZXhzY2FuIHRvIHNwZWVkdXAgYWRkIG5vdCBudWxsIGNvbnN0cmFpbnRz CgpUaGlzIHBhdGNoIHRyaWVzIHRvIHVzZSBpbmRleF9iZWdpbnNjYW4oKSAvIGluZGV4X2dldG5l eHQoKSAvIGluZGV4X2VuZHNjYW4oKQptZW50aW9uZWQgaW4gWzFdIHRvIHNwZWVkdXAgYWRkaW5n IG5vdC1udWxsIGNvbnN0cmFpbnRzIHRvIHRoZSBleGlzdGluZyB0YWJsZS4KCnRoZSBtYWluIGxv Z2ljIGhhcHBlbiBpbiBwaGFzZTMgQVRSZXdyaXRlVGFibGUKMS4gY29sbGVjdCBhbGwgbm90LW51 bGwgY29uc3RyYWludHMuCjIuIGRvZXMgZWFjaCBub3QtbnVsbCBjb25zdHJhaW50IGhhdmUgYSBj b3JyZXNwb25kaW5nIGluZGV4IHRvIHZlcnRpZnkgaXQsIGlmCiAgIG5vdCB0aGVuIGRvIHRoZSBu b3JtYWwgcHJvY2Vzc2luZy4KMy4gaWYgdGFibGUgc2NhbiwgdGFibGUgcmV3cml0ZSwgdGFibGUg d2FzIG5vdCBpbiBBY2Nlc3NFeGNsdXNpdmVMb2NrLgogICBub3QtbnVsbCBjb25zdHJhaW50IHdh cyBvbiB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4KICAgdGhlbiB3ZSBjYW4gbm90IHVzZSBpbmRl eGNhbiB0byBmYXN0IGNoZWNrIG5vdC1udWxsIGNvbnN0cmFpbnQuCjMuIElmIGEgdGFibGUgc2Nh biBvciByZXdyaXRlIG9jY3VycyBhbmQgdGhlIHRhYmxlIGlzIG5vdCBoZWxkIHdpdGggYW4KICAg QWNjZXNzRXhjbHVzaXZlTG9jaywgYW5kIHRoZSBOT1QgTlVMTCBjb25zdHJhaW50IGlzIG9uIGEg dmlydHVhbCBnZW5lcmF0ZWQKICAgY29sdW1uLCB0aGVuIHdlIGNhbiBub3QgdXNlIGluZGV4c2Nh biB0byBmYXN0IHZhbGlkYXRlIG5vdC1udWxsIGNvbnN0cmFpbnRzLgoKY29uY3VycmVuY3kgY29u Y2VybjoKQUxURVIgVEFCTEUgU0VUIE5PVCBOVUxMIHdpbGwgdGFrZSBhbiBBQ0NFU1MgRVhDTFVT SVZFIGxvY2ssIHNvIHRoZXJlIGlzIGxlc3MKdmFyaWFudCBvZiByYWNpbmcgaXNzdWUgY2FuIG9j Y3VyPyAgdG8gcHJvdmUgYWNjdXJhdGUsIEkgd3JvdGUgc29tZSBpc29sYXRpb24KdGVzdHMuIHNl ZVsyXQoKcGVyZm9ybWFuY2U6Ckl0IHdpbGwgb25seSBiZSBzbG93ZXIgdGhhbiB1c3VhbCB0byBh ZGQgYSBOT1QgTlVMTCBjb25zdHJhaW50IGlmIHlvdXIgaW5kZXggaXMKYmxvYXRlZCBhbmQgYSBz aWduaWZpY2FudCBwb3J0aW9uIG9mIHRoYXQgYmxvYXQgaXMgZHVlIHRvIHJvd3Mgd2l0aCBOVUxM IHZhbHVlcy4KCmRlbW86CmRyb3AgdGFibGUgaWYgZXhpc3RzIHQ7CmNyZWF0ZSB1bmxvZ2dlZCB0 YWJsZSB0KGEgaW50LCBiIGludCwgYyBpbnQpIHdpdGggKGF1dG92YWN1dW1fZW5hYmxlZCA9IG9m Zik7Cmluc2VydCBpbnRvIHQgc2VsZWN0IGcsIGcrMSBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDFf MDAwXzAwMCkgZzsKY3JlYXRlIGluZGV4IHRfaWR4X2Egb24gdChhKTsKCkNPTU1BTkQ6IGFsdGVy IHRhYmxlIHQgYWRkIGNvbnN0cmFpbnQgdDEgbm90IG51bGwgYTsKcGF0Y2ggVGltZTogMS4xNzgg bXMKbWFzdGVyIFRpbWU6ICAxNS4xMzcgbXMKCjEwMCUgdGFibGUgYmxvYXQ6IHZpYSAoZGVsZXRl IGZyb20gdCkKQ09NTUFORDogYWx0ZXIgdGFibGUgdCBhZGQgY29uc3RyYWludCB0MSBub3QgbnVs bCBhOwpwYXRjaCBUaW1lOiAgIDAuOTYyIG1zCm1hc3RlciBUaW1lOiAxNi40MDQgbXMKCmNhc2Ug d2hlbjogJTIwIHBlcmNlbnQgdmFsdWVzIGFyZSBOVUxMIGFuZCBoYXZlIGJlZW4gZGVsZXRlZCBm cm9tIGhlYXAgYnV0IHRoZXkKc3RpbGwgb24gdGhlIGluZGV4LgoKZHJvcCB0YWJsZSBpZiBleGlz dHMgdDsKY3JlYXRlIHVubG9nZ2VkIHRhYmxlIHQoYSBpbnQsIGIgaW50KSB3aXRoIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBvZmYpOwppbnNlcnQgaW50byB0IHNlbGVjdCBjYXNlIHdoZW4gZyAlIDUg PSAwIHRoZW4gbnVsbCBlbHNlIGcgZW5kLCBnKzEKZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxXzAw MF8wMDApIGc7CmNyZWF0ZSBpbmRleCB0X2lkeF9hIG9uIHQoYSk7CmRlbGV0ZSBmcm9tIHQgd2hl cmUgYSBpcyBudWxsOwoKYWx0ZXIgdGFibGUgdCBhZGQgY29uc3RyYWludCB0MSBub3QgbnVsbCBh OwpwYXRjaCBUaW1lOjogMTcuNDQzIG1zCm1hc3RlciBUaW1lOiAyMy4wNDUgbXMKCnJlZmVyZW5j ZXM6ClsxXSBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCVGdtb2E1Tkt6OGlHV185djd3eiUzRC0l MkJ6UUZ1JTNERTRTWm9hVGFVMXpuTGFFWFJZcC1RJTQwbWFpbC5nbWFpbC5jb20KWzJdIGh0dHBz Oi8vcG9zdGdyLmVzL20vOTAwMDU2RDEtMzJERi00OTI3LTgyNTEtM0UwQzBEQzQwN0ZEJTQwYW5h cmF6ZWwuZGUKZGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUNKdWZ4RmlXPTRrMWlz PUYxSj1yLUN4MVJ1QnlYUVBVcldCMzMxVTQ3clNuR3oraHdAbWFpbC5nbWFpbC5jb20KY29tbWl0 ZmVzdCBlbnRyeTogaHR0cHM6Ly9jb21taXRmZXN0LnBvc3RncmVzcWwub3JnL3BhdGNoLzU0NDQv Ci0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwgMTI5 ICsrKysrKysrKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAg ICAgfCAyMDAgKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRv ci5oICAgICAgICAgICAgICAgfCAgIDIgKwogLi4uL2V4cGVjdGVkL2luZGV4c2Nhbi1jaGVjay1u b3RudWxsLm91dCAgICAgIHwgMTAyICsrKysrKysrKwogc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xh dGlvbl9zY2hlZHVsZSAgICAgICAgIHwgICAxICsKIC4uLi9zcGVjcy9pbmRleHNjYW4tY2hlY2st bm90bnVsbC5zcGVjICAgICAgICB8ICA0NSArKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2FnZ3JlZ2F0ZXMub3V0ICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9h bHRlcl90YWJsZS5vdXQgICAgIHwgIDQyICsrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv aW5kZXhpbmcub3V0ICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1 YmxpY2F0aW9uLm91dCAgICAgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90YWJs ZXNwYWNlLm91dCAgICAgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxl LnNxbCAgICAgICAgICB8ICA0NiArKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCA1NjYgaW5zZXJ0aW9u cygrKSwgNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwub3V0CiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2luZGV4c2Nhbi1jaGVjay1ub3RudWxsLnNwZWMK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IGIzZWQ2OTQ1N2ZjLi4wMTAxMWE3MmFlYSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTIwOSwxNiArMjA5LDE5IEBAIHR5cGVkZWYg c3RydWN0IEFsdGVyZWRUYWJsZUluZm8KIAlMaXN0CSAgICpjaGFuZ2VkU3RhdGlzdGljc0RlZnM7 CS8qIHN0cmluZyBkZWZpbml0aW9ucyBvZiBzYW1lICovCiB9IEFsdGVyZWRUYWJsZUluZm87CiAK LS8qIFN0cnVjdCBkZXNjcmliaW5nIG9uZSBuZXcgY29uc3RyYWludCB0byBjaGVjayBpbiBQaGFz ZSAzIHNjYW4gKi8KLS8qIE5vdGU6IG5ldyBub3QtbnVsbCBjb25zdHJhaW50cyBhcmUgaGFuZGxl ZCBlbHNld2hlcmUgKi8KKy8qCisgKiBTdHJ1Y3QgZGVzY3JpYmluZyBvbmUgbmV3IGNvbnN0cmFp bnQgdG8gY2hlY2sgaW4gUGhhc2UgMyBzY2FuLiBOb3RlOiBuZXcKKyAqIG5vdC1udWxsIGNvbnN0 cmFpbnRzIGFyZSBoYW5kbGVkIGhlcmUgdG9vLgorKi8KIHR5cGVkZWYgc3RydWN0IE5ld0NvbnN0 cmFpbnQKIHsKIAljaGFyCSAgICpuYW1lOwkJCS8qIENvbnN0cmFpbnQgbmFtZSwgb3IgTlVMTCBp ZiBub25lICovCi0JQ29uc3RyVHlwZQljb250eXBlOwkJLyogQ0hFQ0sgb3IgRk9SRUlHTiAqLwor CUNvbnN0clR5cGUJY29udHlwZTsJCS8qIENIRUNLIG9yIEZPUkVJR04gb3IgTk9ULU5VTEwgKi8K IAlPaWQJCQlyZWZyZWxpZDsJCS8qIFBLIHJlbCwgaWYgRk9SRUlHTiAqLwogCU9pZAkJCXJlZmlu ZGlkOwkJLyogT0lEIG9mIFBLJ3MgaW5kZXgsIGlmIEZPUkVJR04gKi8KIAlib29sCQljb253aXRo cGVyaW9kOwkvKiBXaGV0aGVyIHRoZSBuZXcgRk9SRUlHTiBLRVkgdXNlcyBQRVJJT0QgKi8KIAlP aWQJCQljb25pZDsJCQkvKiBPSUQgb2YgcGdfY29uc3RyYWludCBlbnRyeSwgaWYgRk9SRUlHTiAq LworCWludAkJCWF0dG51bTsJCQkvKiBOT1QtTlVMTCBjb25zdHJhaW50IGF0dG51bSAqLwogCU5v ZGUJICAgKnF1YWw7CQkJLyogQ2hlY2sgZXhwciBvciBDT05TVFJfRk9SRUlHTiBDb25zdHJhaW50 ICovCiAJRXhwclN0YXRlICAqcXVhbHN0YXRlOwkJLyogRXhlY3V0aW9uIHN0YXRlIGZvciBDSEVD SyBleHByICovCiB9IE5ld0NvbnN0cmFpbnQ7CkBAIC02MTI4LDYgKzYxMzEsNyBAQCBBVFJld3Jp dGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwKQogCUJ1bGtJbnNl cnRTdGF0ZSBiaXN0YXRlOwogCWludAkJCXRpX29wdGlvbnM7CiAJRXhwclN0YXRlICAqcGFydHF1 YWxzdGF0ZSA9IE5VTEw7CisJYm9vbAkJYWRkX2luZGV4ID0gZmFsc2U7CiAKIAkvKgogCSAqIE9w ZW4gdGhlIHJlbGF0aW9uKHMpLiAgV2UgaGF2ZSBzdXJlbHkgYWxyZWFkeSBsb2NrZWQgdGhlIGV4 aXN0aW5nCkBAIC02MTgxLDYgKzYxODUsOSBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJ bmZvICp0YWIsIE9pZCBPSUROZXdIZWFwKQogCQkJCW5lZWRzY2FuID0gdHJ1ZTsKIAkJCQljb24t PnF1YWxzdGF0ZSA9IEV4ZWNQcmVwYXJlRXhwcigoRXhwciAqKSBleHBhbmRfZ2VuZXJhdGVkX2Nv bHVtbnNfaW5fZXhwcihjb24tPnF1YWwsIG9sZHJlbCwgMSksIGVzdGF0ZSk7CiAJCQkJYnJlYWs7 CisJCQljYXNlIENPTlNUUl9OT1ROVUxMOgorCQkJCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwor CQkJCWJyZWFrOwogCQkJY2FzZSBDT05TVFJfRk9SRUlHTjoKIAkJCQkvKiBOb3RoaW5nIHRvIGRv IGhlcmUgKi8KIAkJCQlicmVhazsKQEAgLTYyMzQsMTAgKzYyNDEsODUgQEAgQVRSZXdyaXRlVGFi bGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCkKIAkJCQkJCQkJCQkJCQkJ d2hvbGVhdHQtPmF0dG51bSk7CiAJCQl9CiAJCX0KLQkJaWYgKG5vdG51bGxfYXR0cnMgfHwgbm90 bnVsbF92aXJ0dWFsX2F0dHJzKQotCQkJbmVlZHNjYW4gPSB0cnVlOwogCX0KIAorCS8qCisJICog d2UgYmV0dGVyIHVzZSBleGlzdHNpbmcgaW5kZXggdG8gY2hlY2sgbm90LW51bGwgY29uc3RyYWlu dCwgcmF0aGVyIHRoYW4KKwkgKiB0aHJvdWdoIHVuZGVybHlpbmcgaW5kZXggY3JlYXRlZCBieSB0 aGlzIGNvbW1hbmQuICBYWFggVE9ETyBtYXliZSB0aGlzIGlzCisJICogbm90IG5lY2Vzc2FyeT8K KwkqLworCWZvciAoQWx0ZXJUYWJsZVBhc3MgcGFzcyA9IDA7IHBhc3MgPCBBVF9OVU1fUEFTU0VT OyBwYXNzKyspCisJeworCQlMaXN0CSAgICpzdWJjbWRzID0gdGFiLT5zdWJjbWRzW3Bhc3NdOwor CisJCWlmIChzdWJjbWRzID09IE5JTCkKKwkJCWNvbnRpbnVlOworCisJCWZvcmVhY2hfbm9kZShB bHRlclRhYmxlQ21kLCBjbWQsIHN1YmNtZHMpCisJCXsKKwkJCWlmIChjbWQtPnN1YnR5cGUgPT0g QVRfQWRkSW5kZXggfHwKKwkJCQljbWQtPnN1YnR5cGUgPT0gQVRfUmVBZGRJbmRleCB8fAorCQkJ CWNtZC0+c3VidHlwZSA9PSBBVF9BZGRJbmRleENvbnN0cmFpbnQpCisJCQkJYWRkX2luZGV4ID0g dHJ1ZTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGNvbmRpdGlvbnMgZm9yIHVzaW5nIGluZGV4 c2NhbiBtZWNoYW5pc20gZmFzdCBjaGVja2luZyBub3QtbnVsbAorCSAqIGNvbnN0cmFpbnRzIGFy ZSBxdWl0ZSBzdHJpY3QuICBJZiBhIHRhYmxlIHNjYW4gb3IgcmV3cml0ZSBpcyBleHBlY3RlZCB0 bworCSAqIG9jY3VyIGxhdGVyLCB1c2luZyBpbmRleHNjYW4gd291bGQganVzdCB3YXN0ZSBjeWNs ZS4gIEFkZGl0aW9uYWxseSwKKwkgKiBpbmRleGVzIGNhbm5vdCBiZSBjcmVhdGVkIG9uIHZpcnR1 YWwgZ2VuZXJhdGVkIGNvbHVtbnMsIHNvIGZhc3QgY2hlY2tpbmcKKwkgKiBub3QtbnVsbCBjb25z dHJhaW50cyBpcyBub3QgYXBwbGljYWJsZSB0byB0aGVtLiAgVGhpcyBvcHRpbWl6YXRpb24gaXMK KwkgKiBhbHNvIGxpbWl0ZWQgdG8gcmVndWxhciByZWxhdGlvbnMuCisJICoKKwkgKiBUbyBhdm9p ZCBjb25jdXJyZW5jeSBpc3N1ZSwgd2Ugb25seSBkbyBpdCB3aGVuIHRhYmxlIHdhcyBsb2NrZWQg aW4KKwkgKiBBY2Nlc3NFeGNsdXNpdmVMb2NrLgorCSovCisJaWYgKCFuZWVkc2NhbiAmJiBub3Ru dWxsX3ZpcnR1YWxfYXR0cnMgPT0gTklMICYmCisJCW5ld3JlbCA9PSBOVUxMICYmICF0YWItPnJl d3JpdGUgJiYKKwkJb2xkcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiAm JgorCQkhYWRkX2luZGV4ICYmCisJCUNoZWNrUmVsYXRpb25Mb2NrZWRCeU1lKG9sZHJlbCwgQWNj ZXNzRXhjbHVzaXZlTG9jaywgZmFsc2UpKQorCXsKKwkJTGlzdAkgICAqbm90bnVsbF9hdHRudW1z ID0gTklMOworCisJCWZvcmVhY2gobCwgdGFiLT5jb25zdHJhaW50cykKKwkJeworCQkJTmV3Q29u c3RyYWludCAqY29uID0gbGZpcnN0KGwpOworCisJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0g VHVwbGVEZXNjQXR0cihuZXdUdXBEZXNjLCBjb24tPmF0dG51bSAtIDEpOworCisJCQlpZiAoY29u LT5jb250eXBlICE9IENPTlNUUl9OT1ROVUxMKQorCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQo YXR0ci0+YXR0bm90bnVsbCk7CisJCQlBc3NlcnQoY29uLT5hdHRudW0gPiAwKTsKKwkJCUFzc2Vy dChhdHRyLT5hdHRudW0gPT0gY29uLT5hdHRudW0pOworCisJCQlpZiAoYXR0ci0+YXR0Z2VuZXJh dGVkID09IEFUVFJJQlVURV9HRU5FUkFURURfVklSVFVBTCkKKwkJCXsKKwkJCQluZWVkc2NhbiA9 IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW5vdG51bGxfYXR0bnVtcyA9IGxhcHBlbmRf aW50KG5vdG51bGxfYXR0bnVtcywgYXR0ci0+YXR0bnVtKTsKKwkJfQorCisJCWlmIChub3RudWxs X2F0dG51bXMgIT0gTklMKQorCQl7CisJCQlBc3NlcnQoQ2hlY2tSZWxhdGlvbkxvY2tlZEJ5TWUo b2xkcmVsLCBBY2Nlc3NFeGNsdXNpdmVMb2NrLCBmYWxzZSkpOworCisJCQlpZiAoIWluZGV4X2No ZWNrX25vdG51bGwob2xkcmVsLCBub3RudWxsX2F0dG51bXMpKQorCQkJCW5lZWRzY2FuID0gdHJ1 ZTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KE5PVElDRSwKKwkJCQkJCWVycm1zZygiYWxsIG5vdC1u dWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uIFwiJXNcIiBhcmUgdmFsaWRhdGVkIGJ5IGluZGV4 IHNjYW4iLAorCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShvbGRyZWwpKSk7CisJCX0K Kwl9CisJZWxzZSBpZiAobm90bnVsbF9hdHRycyB8fCBub3RudWxsX3ZpcnR1YWxfYXR0cnMpCisJ CW5lZWRzY2FuID0gdHJ1ZTsKKwogCWlmIChuZXdyZWwgfHwgbmVlZHNjYW4pCiAJewogCQlFeHBy Q29udGV4dCAqZWNvbnRleHQ7CkBAIC03OTA5LDYgKzc5OTEsNyBAQCBBVEV4ZWNTZXROb3ROdWxs KExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY2hhciAqY29uTmFtZSwgY2hhciAqY29sTmFt ZSwKIAlDb29rZWRDb25zdHJhaW50ICpjY29uOwogCUxpc3QJICAgKmNvb2tlZDsKIAlib29sCQlp c19ub19pbmhlcml0ID0gZmFsc2U7CisJQWx0ZXJlZFRhYmxlSW5mbyAqdGFiID0gTlVMTDsKIAog CS8qIEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBkZWVwIGluaGVy aXRhbmNlIHRyZWUuICovCiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsKQEAgLTgwMzMsMTAgKzgxMTYs MzEgQEAgQVRFeGVjU2V0Tm90TnVsbChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNoYXIg KmNvbk5hbWUsIGNoYXIgKmNvbE5hbWUsCiAJY29uc3RyYWludC0+aXNfbm9faW5oZXJpdCA9IGlz X25vX2luaGVyaXQ7CiAJY29uc3RyYWludC0+Y29ubmFtZSA9IGNvbk5hbWU7CiAKKwl0YWIgPSBB VEdldFF1ZXVlRW50cnkod3F1ZXVlLCByZWwpOworCiAJLyogYW5kIGRvIGl0ICovCiAJY29va2Vk ID0gQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhyZWwsIE5JTCwgbGlzdF9tYWtlMShjb25zdHJh aW50KSwKIAkJCQkJCQkJCSAgIGZhbHNlLCAhcmVjdXJzaW5nLCBmYWxzZSwgTlVMTCk7CiAJY2Nv biA9IGxpbml0aWFsKGNvb2tlZCk7CisKKwlBc3NlcnQoY2Nvbi0+Y29udHlwZSA9PSBDT05TVFJf Tk9UTlVMTCk7CisKKwkvKgorCSAqIHdlIG1heSB1c2UgaW5kZXhzY2FuIHRvIGZhc3QgY2hlY2sg bm90LW51bGwgY29uc3RyYWludC4gVG8gZG8gdGhhdCwgd2UKKwkgKiBuZWVkIGFkZCB0aGUgbm90 LW51bGwgY29uc3RyYWludCB0byBBbHRlcmVkVGFibGVJbmZvLT5jb25zdHJhaW50cy4KKwkqLwor CWlmICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uKQorCXsKKwkJTmV3Q29uc3RyYWludCAqbmV3Y29u OworCQluZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihOZXdDb25zdHJh aW50KSk7CisKKwkJbmV3Y29uLT5uYW1lID0gY2Nvbi0+bmFtZTsKKwkJbmV3Y29uLT5jb250eXBl ID0gY2Nvbi0+Y29udHlwZTsKKwkJbmV3Y29uLT5hdHRudW0gPSBjY29uLT5hdHRudW07CisKKwkJ dGFiLT5jb25zdHJhaW50cyA9IGxhcHBlbmQodGFiLT5jb25zdHJhaW50cywgbmV3Y29uKTsKKwl9 CisKIAlPYmplY3RBZGRyZXNzU2V0KGFkZHJlc3MsIENvbnN0cmFpbnRSZWxhdGlvbklkLCBjY29u LT5jb25vaWQpOwogCiAJSW52b2tlT2JqZWN0UG9zdEFsdGVySG9vayhSZWxhdGlvblJlbGF0aW9u SWQsCkBAIC05ODg3LDEzICs5OTkxLDE1IEBAIEFUQWRkQ2hlY2tOTkNvbnN0cmFpbnQoTGlzdCAq KndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJewogCQlDb29r ZWRDb25zdHJhaW50ICpjY29uID0gKENvb2tlZENvbnN0cmFpbnQgKikgbGZpcnN0KGxjb24pOwog Ci0JCWlmICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uICYmIGNjb24tPmNvbnR5cGUgIT0gQ09OU1RS X05PVE5VTEwpCisJCWlmICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uKQogCQl7CiAJCQlOZXdDb25z dHJhaW50ICpuZXdjb247CiAKIAkJCW5ld2NvbiA9IChOZXdDb25zdHJhaW50ICopIHBhbGxvYzAo c2l6ZW9mKE5ld0NvbnN0cmFpbnQpKTsKIAkJCW5ld2Nvbi0+bmFtZSA9IGNjb24tPm5hbWU7CiAJ CQluZXdjb24tPmNvbnR5cGUgPSBjY29uLT5jb250eXBlOworCQkJaWYgKGNjb24tPmNvbnR5cGUg PT0gQ09OU1RSX05PVE5VTEwpCisJCQkJbmV3Y29uLT5hdHRudW0gPSBjY29uLT5hdHRudW07CiAJ CQluZXdjb24tPnF1YWwgPSBjY29uLT5leHByOwogCiAJCQl0YWItPmNvbnN0cmFpbnRzID0gbGFw cGVuZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdjb24pOwpAQCAtMTMxNDYsNiArMTMyNTIsNyBAQCBR dWV1ZU5OQ29uc3RyYWludFZhbGlkYXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gY29ucmVs LCBSZWxhdGlvbiByZWwsCiAJTGlzdAkgICAqY2hpbGRyZW4gPSBOSUw7CiAJQXR0ck51bWJlcglh dHRudW07CiAJY2hhcgkgICAqY29sbmFtZTsKKwlOZXdDb25zdHJhaW50ICpuZXdjb247CiAKIAlj b24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29udHVwbGUpOwogCUFzc2VydChj b24tPmNvbnR5cGUgPT0gQ09OU1RSQUlOVF9OT1ROVUxMKTsKQEAgLTEzMjA5LDcgKzEzMzE2LDE3 IEBAIFF1ZXVlTk5Db25zdHJhaW50VmFsaWRhdGlvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBj b25yZWwsIFJlbGF0aW9uIHJlbCwKIAkvKiBTZXQgYXR0bm90bnVsbCBhcHByb3ByaWF0ZWx5IHdp dGhvdXQgcXVldWVpbmcgYW5vdGhlciB2YWxpZGF0aW9uICovCiAJc2V0X2F0dG5vdG51bGwoTlVM TCwgcmVsLCBhdHRudW0sIHRydWUsIGZhbHNlKTsKIAorCS8qIFF1ZXVlIHZhbGlkYXRpb24gZm9y IHBoYXNlIDMgKi8KKwluZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihO ZXdDb25zdHJhaW50KSk7CisJbmV3Y29uLT5uYW1lID0gY29sbmFtZTsKKwluZXdjb24tPmNvbnR5 cGUgPSBDT05TVFJfTk9UTlVMTDsKKwluZXdjb24tPmF0dG51bSA9IGF0dG51bTsKKworCS8qIEZp bmQgb3IgY3JlYXRlIHdvcmsgcXVldWUgZW50cnkgZm9yIHRoaXMgdGFibGUgKi8KIAl0YWIgPSBB VEdldFF1ZXVlRW50cnkod3F1ZXVlLCByZWwpOworCisJdGFiLT5jb25zdHJhaW50cyA9IGxhcHBl bmQodGFiLT5jb25zdHJhaW50cywgbmV3Y29uKTsKKwogCXRhYi0+dmVyaWZ5X25ld19ub3RudWxs ID0gdHJ1ZTsKIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5k ZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IGJkZjg2 MmIyNDA2Li45MmEwZTY5MmQwMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAg LTEwOCwxMiArMTA4LDE1IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRl ICJhY2Nlc3MvcmVsc2Nhbi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUg ImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJj YXRhbG9nL2luZGV4LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNs dWRlICJzdG9yYWdlL2xtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgogI2luY2x1 ZGUgInV0aWxzL211bHRpcmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMu aCIKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCkBAIC0xNDUsNiArMTQ4LDcgQEAgc3RhdGlj IGJvb2wgaW5kZXhfZXhwcmVzc2lvbl9jaGFuZ2VkX3dhbGtlcihOb2RlICpub2RlLAogCQkJCQkJ CQkJCQlCaXRtYXBzZXQgKmFsbFVwZGF0ZWRDb2xzKTsKIHN0YXRpYyB2b2lkIEV4ZWNXaXRob3V0 T3ZlcmxhcHNOb3RFbXB0eShSZWxhdGlvbiByZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVtIGF0 dHZhbCwKIAkJCQkJCQkJCQljaGFyIHR5cHR5cGUsIE9pZCBhdHR0eXBpZCk7CitzdGF0aWMgYm9v bCBpbmRleF9jaGVja19ub3RudWxsX2ludGVybmFsKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICph dHRudW1zLCBMaXN0ICppZHhzKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNPcGVuSW5kaWNlcwpA QCAtMTE3MiwzICsxMTc2LDE5OSBAQCBFeGVjV2l0aG91dE92ZXJsYXBzTm90RW1wdHkoUmVsYXRp b24gcmVsLCBOYW1lRGF0YSBhdHRuYW1lLCBEYXR1bSBhdHR2YWwsIGNoYXIgdAogCQkJCSBlcnJt c2coImVtcHR5IFdJVEhPVVQgT1ZFUkxBUFMgdmFsdWUgZm91bmQgaW4gY29sdW1uIFwiJXNcIiBp biByZWxhdGlvbiBcIiVzXCIiLAogCQkJCQkJTmFtZVN0cihhdHRuYW1lKSwgUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUocmVsKSkpKTsKIH0KKworLyoKKyAqIG5vdG51bGxfYXR0bnVtczogQXR0cmli dXRlIG51bWJlcnMgZm9yIGFsbCBuZXdseSBhZGRlZCBOT1QgTlVMTCBjb25zdHJhaW50cy4KKyAq CisgKiBGaXJzdCBjaGVjayBpZiByZWxhdGlvbiBoYXZlIHN1aXRhYmxlIGluZGV4IGZvciBlYWNo IG5vdG51bGxfYXR0bnVtcy4gSWYgaXQKKyAqIGRvZXMsIHVzaW5nIGluZGV4c2NhbiBtZWNoYW5p c20gdG8gdmVyaWZ5IHRoYXQgYWxsIGF0dHJpYnV0ZXMgb24KKyAqIG5vdG51bGxfYXR0bnVtcyBh cmUgaW5kZWVkIE5PVCBOVUxMLgorICovCitib29sCitpbmRleF9jaGVja19ub3RudWxsKFJlbGF0 aW9uIHJlbGF0aW9uLCBMaXN0ICpub3RudWxsX2F0dG51bXMpCit7CisJUmVsYXRpb24JaW5kcmVs OworCVJlbGF0aW9uCWluZGV4X3JlbDsKKwlTeXNTY2FuRGVzYyBpbmRzY2FuOworCVNjYW5LZXlE YXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0dXA7CisJVHVwbGVEZXNjCXR1cGRlc2M7CisJRm9ybV9w Z19hdHRyaWJ1dGUgYXR0cjsKKwlMaXN0CSAgICpyZXN1bHQgPSBOSUw7CisJTGlzdAkgICAqYXR0 bnVtcyA9IE5JTDsKKworCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKKwor CS8qIFByZXBhcmUgdG8gc2NhbiBwZ19pbmRleCBmb3IgZW50cmllcyBoYXZpbmcgaW5kcmVsaWQg PSB0aGlzIHJlbC4gKi8KKwlTY2FuS2V5SW5pdCgmc2tleSwKKwkJCQlBbnVtX3BnX2luZGV4X2lu ZHJlbGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJ ZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKSk7CisKKwlpbmRyZWwgPSB0YWJs ZV9vcGVuKEluZGV4UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlpbmRzY2FuID0gc3lz dGFibGVfYmVnaW5zY2FuKGluZHJlbCwgSW5kZXhJbmRyZWxpZEluZGV4SWQsIHRydWUsCisJCQkJ CQkJCSBOVUxMLCAxLCAmc2tleSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChodHVwID0g c3lzdGFibGVfZ2V0bmV4dChpbmRzY2FuKSkpCisJeworCQlGb3JtX3BnX2luZGV4IGluZGV4ID0g KEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodHVwKTsKKworCQkvKgorCQkgKiB3ZSBjYW4gb25s eSB1c2Ugbm9uLWRlZmVycmVkLCB2YWxpZCwgYW5kIGFsaXZlIGJ0cmVlIGluZGV4IHRvIGZhc3QK KwkJICogY2hlY2sgbm90LW51bGwKKwkJICovCisJCWlmICghaW5kZXgtPmluZGltbWVkaWF0ZSB8 fCAhaW5kZXgtPmluZGlzdmFsaWQgfHwgIWluZGV4LT5pbmRpc2xpdmUpCisJCQljb250aW51ZTsK KworCQkvKiBjYW4gbm90IHVzZSBleHByZXNzaW9uIGluZGV4IG9yIHBhcnRpY2FsIGluZGV4IHRv byAqLworCQlpZiAoIWhlYXBfYXR0aXNudWxsKGh0dXAsIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMs IE5VTEwpIHx8CisJCQkhaGVhcF9hdHRpc251bGwoaHR1cCwgQW51bV9wZ19pbmRleF9pbmRwcmVk LCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXgtPmlu ZG5rZXlhdHRzOyBpKyspCisJCXsKKwkJCWF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIChp bmRleC0+aW5ka2V5LnZhbHVlc1tpXSAtIDEpKTsKKworCQkJaWYgKGxpc3RfbWVtYmVyX2ludChu b3RudWxsX2F0dG51bXMsIGF0dHItPmF0dG51bSkpCisJCQl7CisJCQkJaW5kZXhfcmVsID0gaW5k ZXhfb3BlbihpbmRleC0+aW5kZXhyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCWlmIChp bmRleF9yZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0lOREVYICYmCisJCQkJCWluZGV4 X3JlbC0+cmRfcmVsLT5yZWxhbSA9PSBCVFJFRV9BTV9PSUQgJiYKKwkJCQkJIWxpc3RfbWVtYmVy X2ludChhdHRudW1zLCBhdHRyLT5hdHRudW0pKQorCQkJCXsKKwkJCQkJYXR0bnVtcyA9IGxhcHBl bmRfaW50KGF0dG51bXMsIGF0dHItPmF0dG51bSk7CisJCQkJCXJlc3VsdCA9IGxhcHBlbmRfb2lk KHJlc3VsdCwgaW5kZXgtPmluZGV4cmVsaWQpOworCQkJCX0KKwkJCQlpbmRleF9jbG9zZShpbmRl eF9yZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCX0KKwl9CisJc3lzdGFibGVfZW5kc2Nh bihpbmRzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmRyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlp ZiAoYXR0bnVtcyA9PSBOSUwpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogZXZlcnkgbm90 LW51bGwgY29uc3RyYWludCByZXF1aXJlcyBhbiBpbmRleCBmb3IgZmFzdCB2YWxpZGF0YXRpb24u CisJICogV2l0aG91dCBhbiBpbmRleCwgd2UgYmV0dGVyIHVzZSBub3JtYWwgdGFibGVzY2FuIHRv IHZhbGlkYXRlIHRoZSBub3QtbnVsbAorCSAqIGNvbnN0cmFpbnRzCisJKi8KKwlmb3JlYWNoX2lu dChhdHRubywgbm90bnVsbF9hdHRudW1zKQorCXsKKwkJaWYoIWxpc3RfbWVtYmVyX2ludChhdHRu dW1zLCBhdHRubykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIGluZGV4X2NoZWNr X25vdG51bGxfaW50ZXJuYWwocmVsYXRpb24sIGF0dG51bXMsIHJlc3VsdCk7Cit9CisKKy8qCisg KiBVc2UgaW5kZXhzY2FuIG1lY2hhbmlzbSB0byBmYXN0IGNoZWNrIGVhY2ggYXR0cmlidXRlIGlu ICJhdHRudW1zIiBhcmUKKyAqIG5vdC1udWxsIG9yIG5vdC4KKyAqLworc3RhdGljIGJvb2wKK2lu ZGV4X2NoZWNrX25vdG51bGxfaW50ZXJuYWwoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmF0dG51 bXMsIExpc3QgKmlkeHMpCit7CisJRVN0YXRlCSAgICplc3RhdGU7CisJRXhwckNvbnRleHQgKmVj b250ZXh0OworCVR1cGxlVGFibGVTbG90ICpleGlzdGluZ19zbG90OworCWJvb2wgCQlhbGxfbm90 X251bGwgPSB0cnVlOworCUxpc3RDZWxsICAgKmxjLAorCQkJCSpsYzI7CisKKwkvKgorCSAqIE5l ZWQgYW4gRVN0YXRlIGZvciBzbG90IHRvIGhvbGQgdGhlIGN1cnJlbnQgdHVwbGUuCisJICoKKwkq LworCWVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUoKTsKKwllY29udGV4dCA9IEdldFBlclR1 cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKKworCWZvcmJvdGgobGMsIGF0dG51bXMsIGxjMiwgaWR4 cykKKwl7CisJCVNuYXBzaG90RGF0YSBEaXJ0eVNuYXBzaG90OworCQlJbmRleFNjYW5EZXNjIGlu ZGV4X3NjYW47CisJCVNjYW5LZXlEYXRhCQlzY2Fua2V5c1tJTkRFWF9NQVhfS0VZU107CisJCUlu ZGV4SW5mbyAgCSppbmRleEluZm87CisJCUF0dHJOdW1iZXIJc2tfYXR0bm8gPSAtMTsKKwkJUmVs YXRpb24gCWluZGV4OworCQlpbnQJCQlpbmRua2V5YXR0czsKKworCQlBdHRyTnVtYmVyCWF0dG5v ID0gbGZpcnN0X2ludChsYyk7CisJCU9pZAkJaW5kZXhvaWQgPSBsZmlyc3Rfb2lkKGxjMik7CisK KwkJZXhpc3Rpbmdfc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJlbGF0aW9uLCBOVUxMKTsKKwor CQkvKiBBcnJhbmdlIGZvciBlY29udGV4dCdzIHNjYW4gdHVwbGUgdG8gYmUgdGhlIHR1cGxlIHVu ZGVyIHRlc3QgKi8KKwkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gZXhpc3Rpbmdfc2xvdDsK KworCQlpbmRleCA9IGluZGV4X29wZW4oaW5kZXhvaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJ aW5kZXhJbmZvID0gQnVpbGRJbmRleEluZm8oaW5kZXgpOworCQlpbmRua2V5YXR0cyA9IEluZGV4 UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaW5kZXgpOworCisJCS8qCisJCSAqIFNl YXJjaCB0aGUgdHVwbGVzIHRoYXQgYXJlIGluIHRoZSBpbmRleCBmb3IgYW55IHZpb2xhdGlvbnMs IGluY2x1ZGluZworCQkgKiB0dXBsZXMgdGhhdCBhcmVuJ3QgdmlzaWJsZSB5ZXQuCisJCSovCisJ CUluaXREaXJ0eVNuYXBzaG90KERpcnR5U25hcHNob3QpOworCisJCWZvciAoaW50IGkgPSAwOyBp IDwgaW5kbmtleWF0dHM7IGkrKykKKwkJeworCQkJaWYgKGluZGV4SW5mby0+aWlfSW5kZXhBdHRy TnVtYmVyc1tpXSA9PSBhdHRubykKKwkJCXsKKwkJCQlza19hdHRubyA9IGkrMTsKKwkJCQlicmVh azsKKwkJCX0KKwkJfQorCisJCWlmIChza19hdHRubyA9PSAtMSkKKwkJCWVsb2coRVJST1IsICJp bmRleCAldSBzaG91bGQgZWZmZWN0IG9uIGNvbHVtbiBudW1iZXIgJWQiLCBpbmRleG9pZCwgYXR0 bm8pOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kbmtleWF0dHM7IGkrKykKKwkJeworCQkJ Lyogc2V0IHVwIGFuIElTIE5VTEwgc2NhbiBrZXkgc28gdGhhdCB3ZSBpZ25vcmUgbm90IG51bGxz ICovCisJCQlTY2FuS2V5RW50cnlJbml0aWFsaXplKCZzY2Fua2V5c1tpXSwKKwkJCQkJCQkJCVNL X0lTTlVMTCB8IFNLX1NFQVJDSE5VTEwsCisJCQkJCQkJCQlza19hdHRubywJCS8qIGluZGV4IGNv bCB0byBzY2FuICovCisJCQkJCQkJCQlJbnZhbGlkU3RyYXRlZ3ksLyogbm8gc3RyYXRlZ3kgKi8K KwkJCQkJCQkJCUludmFsaWRPaWQsCQkvKiBubyBzdHJhdGVneSBzdWJ0eXBlICovCisJCQkJCQkJ CQlJbnZhbGlkT2lkLAkJLyogbm8gY29sbGF0aW9uICovCisJCQkJCQkJCQlJbnZhbGlkT2lkLAkJ Lyogbm8gcmVnIHByb2MgZm9yIHRoaXMgKi8KKwkJCQkJCQkJCShEYXR1bSkgMCk7CQkvKiBjb25z dGFudCAqLworCQl9CisKKwkJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWxhdGlvbiwg aW5kZXgsICZEaXJ0eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCk7CisJCWluZGV4X3Jl c2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtleWF0dHMsIE5VTEwsIDApOworCisJCXdo aWxlIChpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24s IGV4aXN0aW5nX3Nsb3QpKQorCQl7CisJCQlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsK KwkJCWJvb2wJCW51bGxzW0lOREVYX01BWF9LRVlTXTsKKworCQkJLyoKKwkJCSAqIEV4dHJhY3Qg dGhlIGluZGV4IGNvbHVtbiB2YWx1ZXMgYW5kIGlzbnVsbCBmbGFncyBmcm9tIHRoZQorCQkJICog ZXhpc3RpbmcgdHVwbGUuCisJCQkqLworCQkJRm9ybUluZGV4RGF0dW0oaW5kZXhJbmZvLCBleGlz dGluZ19zbG90LCBlc3RhdGUsIHZhbHVlcywgbnVsbHMpOworCisJCQlpZiAobnVsbHNbc2tfYXR0 bm8gLSAxXSkKKwkJCXsKKwkJCQlhbGxfbm90X251bGwgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCisJCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nhbik7CisJCWluZGV4X2Nsb3NlKGlu ZGV4LCBBY2Nlc3NTaGFyZUxvY2spOworCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KGV4 aXN0aW5nX3Nsb3QpOworCQlpZiAoIWFsbF9ub3RfbnVsbCkKKwkJCXJldHVybiBmYWxzZTsKKwl9 CisKKwlGcmVlRXhlY3V0b3JTdGF0ZShlc3RhdGUpOworCisJcmV0dXJuIHRydWU7Cit9CisKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCmluZGV4IGFlOTk0MDdkYjg5Li5mNDI0MDdlZDc1ZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCkBAIC03NzgsNiArNzc4LDggQEAgZXh0ZXJuIHZvaWQgY2hlY2tf ZXhjbHVzaW9uX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiAJCQkJ CQkJCQkgICBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICppc251bGwsCiAJCQkJCQkJ CQkgICBFU3RhdGUgKmVzdGF0ZSwgYm9vbCBuZXdJbmRleCk7CiAKK2V4dGVybiBib29sIGluZGV4 X2NoZWNrX25vdG51bGwoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKm5vdG51bGxfYXR0bnVtcyk7 CisKIC8qCiAgKiBwcm90b3R5cGVzIGZyb20gZnVuY3Rpb25zIGluIGV4ZWNSZXBsaWNhdGlvbi5j CiAgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9pbmRleHNjYW4t Y2hlY2stbm90bnVsbC5vdXQgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvaW5kZXhzY2Fu LWNoZWNrLW5vdG51bGwub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5hYzNiOWYxNGM4OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBl Y3RlZC9pbmRleHNjYW4tY2hlY2stbm90bnVsbC5vdXQKQEAgLTAsMCArMSwxMDIgQEAKK1BhcnNl ZCB0ZXN0IHNwZWMgd2l0aCAyIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMSBi MyBtMSBoaiBjMSBjMyBzbgorc3RlcCBiMTogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFC TEUgUkVBRDsKK3N0ZXAgYjM6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7 CitzdGVwIG0xOiBERUxFVEUgRlJPTSB0Oworc3RlcCBoajogQUxURVIgVEFCTEUgdCBBREQgQ09O U1RSQUlOVCB0MV9ubiBOT1QgTlVMTCBhOyA8d2FpdGluZyAuLi4+CitzdGVwIGMxOiBDT01NSVQ7 CitzMjogTk9USUNFOiAgYWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uICJ0IiBh cmUgdmFsaWRhdGVkIGJ5IGluZGV4IHNjYW4KK3N0ZXAgaGo6IDwuLi4gY29tcGxldGVkPgorc3Rl cCBjMzogQ09NTUlUOworc3RlcCBzbjogU0VMRUNUIGNvbm5hbWUsIGNvbnJlbGlkOjpyZWdjbGFz cywgY29udHlwZSwgY29udmFsaWRhdGVkCisgICAgICAgICAgIEZST00gcGdfY29uc3RyYWludCBX SEVSRSBjb25uYW1lID0gJ3QxX25uJzsKKworY29ubmFtZXxjb25yZWxpZHxjb250eXBlfGNvbnZh bGlkYXRlZAorLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQordDFfbm4gIHx0 ICAgICAgIHxuICAgICAgfHQgICAgICAgICAgIAorKDEgcm93KQorCisKK3N0YXJ0aW5nIHBlcm11 dGF0aW9uOiBiMiBiMyBtMSBoaiBjMSBjMyBzbgorc3RlcCBiMjogQkVHSU47CitzdGVwIGIzOiBC RUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBtMTogREVMRVRFIEZS T00gdDsKK3N0ZXAgaGo6IEFMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5V TEwgYTsgPHdhaXRpbmcgLi4uPgorc3RlcCBjMTogQ09NTUlUOworczI6IE5PVElDRTogIGFsbCBu b3QtbnVsbCBjb25zdHJhaW50cyBvbiByZWxhdGlvbiAidCIgYXJlIHZhbGlkYXRlZCBieSBpbmRl eCBzY2FuCitzdGVwIGhqOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgYzM6IENPTU1JVDsKK3N0ZXAg c246IFNFTEVDVCBjb25uYW1lLCBjb25yZWxpZDo6cmVnY2xhc3MsIGNvbnR5cGUsIGNvbnZhbGlk YXRlZAorICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFpbnQgV0hFUkUgY29ubmFtZSA9ICd0MV9u bic7CisKK2Nvbm5hbWV8Y29ucmVsaWR8Y29udHlwZXxjb252YWxpZGF0ZWQKKy0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0KK3QxX25uICB8dCAgICAgICB8biAgICAgIHx0ICAg ICAgICAgICAKKygxIHJvdykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogYjEgYjQgbTEgaGog YzEgYzMgc24KK3N0ZXAgYjE6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7 CitzdGVwIGI0OiBCRUdJTjsKK3N0ZXAgbTE6IERFTEVURSBGUk9NIHQ7CitzdGVwIGhqOiBBTFRF UiBUQUJMRSB0IEFERCBDT05TVFJBSU5UIHQxX25uIE5PVCBOVUxMIGE7IDx3YWl0aW5nIC4uLj4K K3N0ZXAgYzE6IENPTU1JVDsKK3MyOiBOT1RJQ0U6ICBhbGwgbm90LW51bGwgY29uc3RyYWludHMg b24gcmVsYXRpb24gInQiIGFyZSB2YWxpZGF0ZWQgYnkgaW5kZXggc2Nhbgorc3RlcCBoajogPC4u LiBjb21wbGV0ZWQ+CitzdGVwIGMzOiBDT01NSVQ7CitzdGVwIHNuOiBTRUxFQ1QgY29ubmFtZSwg Y29ucmVsaWQ6OnJlZ2NsYXNzLCBjb250eXBlLCBjb252YWxpZGF0ZWQKKyAgICAgICAgICAgRlJP TSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbm5hbWUgPSAndDFfbm4nOworCitjb25uYW1lfGNvbnJl bGlkfGNvbnR5cGV8Y29udmFsaWRhdGVkCistLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0t LS0tLS0tCit0MV9ubiAgfHQgICAgICAgfG4gICAgICB8dCAgICAgICAgICAgCisoMSByb3cpCisK Kworc3RhcnRpbmcgcGVybXV0YXRpb246IGIxIGIzIGhqIHIxIGMyCitzdGVwIGIxOiBCRUdJTiBJ U09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBiMzogQkVHSU4gSVNPTEFUSU9O IExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgaGo6IEFMVEVSIFRBQkxFIHQgQUREIENPTlNU UkFJTlQgdDFfbm4gTk9UIE5VTEwgYTsKK0VSUk9SOiAgY29sdW1uICJhIiBvZiByZWxhdGlvbiAi dCIgY29udGFpbnMgbnVsbCB2YWx1ZXMKK3N0ZXAgcjE6IFJPTExCQUNLOworc3RlcCBjMjogUk9M TEJBQ0s7CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMSBiNCBkMSBtMSBjMiBzMSBzbiByMQor c3RlcCBiMTogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgYjQ6 IEJFR0lOOworc3RlcCBkMTogRFJPUCBJTkRFWCB0X2FiX2lkeDsKK3N0ZXAgbTE6IERFTEVURSBG Uk9NIHQ7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgYzI6IFJPTExCQUNLOworc3RlcCBtMTogPC4uLiBj b21wbGV0ZWQ+CitzMTogTk9USUNFOiAgYWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0 aW9uICJ0IiBhcmUgdmFsaWRhdGVkIGJ5IGluZGV4IHNjYW4KK3N0ZXAgczE6IEFMVEVSIFRBQkxF IHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5VTEwgYTsKK3N0ZXAgc246IFNFTEVDVCBjb25u YW1lLCBjb25yZWxpZDo6cmVnY2xhc3MsIGNvbnR5cGUsIGNvbnZhbGlkYXRlZAorICAgICAgICAg ICBGUk9NIHBnX2NvbnN0cmFpbnQgV0hFUkUgY29ubmFtZSA9ICd0MV9ubic7CisKK2Nvbm5hbWV8 Y29ucmVsaWR8Y29udHlwZXxjb252YWxpZGF0ZWQKKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSst LS0tLS0tLS0tLS0KK3QxX25uICB8dCAgICAgICB8biAgICAgIHx0ICAgICAgICAgICAKKygxIHJv dykKKworc3RlcCByMTogUk9MTEJBQ0s7CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMiBiMyBt MSBkMSBzMCBzMSBjMSBjMyBzbgorc3RlcCBiMjogQkVHSU47CitzdGVwIGIzOiBCRUdJTiBJU09M QVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBtMTogREVMRVRFIEZST00gdDsKK3N0 ZXAgZDE6IERST1AgSU5ERVggdF9hYl9pZHg7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgczA6IHNhdmVw b2ludCBzMDsKK3MxOiBOT1RJQ0U6ICBhbGwgbm90LW51bGwgY29uc3RyYWludHMgb24gcmVsYXRp b24gInQiIGFyZSB2YWxpZGF0ZWQgYnkgaW5kZXggc2Nhbgorc3RlcCBzMTogQUxURVIgVEFCTEUg dCBBREQgQ09OU1RSQUlOVCB0MV9ubiBOT1QgTlVMTCBhOworc3RlcCBjMTogQ09NTUlUOworc3Rl cCBkMTogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIGMzOiBDT01NSVQ7CitzdGVwIHNuOiBTRUxFQ1Qg Y29ubmFtZSwgY29ucmVsaWQ6OnJlZ2NsYXNzLCBjb250eXBlLCBjb252YWxpZGF0ZWQKKyAgICAg ICAgICAgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbm5hbWUgPSAndDFfbm4nOworCitjb25u YW1lfGNvbnJlbGlkfGNvbnR5cGV8Y29udmFsaWRhdGVkCistLS0tLS0tKy0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0tLS0tCit0MV9ubiAgfHQgICAgICAgfG4gICAgICB8dCAgICAgICAgICAgCiso MSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1 bGUgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCmluZGV4IGUzYzY2OWEy OWM3Li4xYjllOGY5MzJhYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlv bl9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCkBA IC01Niw2ICs1Niw3IEBAIHRlc3Q6IG1lcmdlLWRlbGV0ZQogdGVzdDogbWVyZ2UtdXBkYXRlCiB0 ZXN0OiBtZXJnZS1tYXRjaC1yZWNoZWNrCiB0ZXN0OiBtZXJnZS1qb2luCit0ZXN0OiBpbmRleHNj YW4tY2hlY2stbm90bnVsbAogdGVzdDogZGVsZXRlLWFib3J0LXNhdmVwdAogdGVzdDogZGVsZXRl LWFib3J0LXNhdmVwdC0yCiB0ZXN0OiBhYm9ydGVkLWtleXJldm9rZQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2luZGV4c2Nhbi1jaGVjay1ub3RudWxsLnNwZWMgYi9zcmMv dGVzdC9pc29sYXRpb24vc3BlY3MvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwuc3BlYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDBjYTkyOGYzYWYKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvaW5kZXhzY2FuLWNoZWNrLW5vdG51bGwu c3BlYwpAQCAtMCwwICsxLDQ1IEBACisKKyMKKyMgdXNpbmcgaW5kZXhzY2FuIHRvIGNoZWNrIGEg Y29sdW1uIG5vdC1udWxsIGNvbnN0cmFpbnQKKyMgaXMgc2F0aXNmaWVkIG9yIG5vdC4KKyMKKwor c2V0dXAKK3sKKyAgQ1JFQVRFIFRBQkxFIHQgKGEgaW50LCBiIGludCk7CisgIENSRUFURSBJTkRF WCB0X2FiX2lkeCBvbiB0KGEsYik7CisgIElOU0VSVCBJTlRPIHQgdmFsdWVzIChudWxsLCAxKTsK KyAgSU5TRVJUIElOVE8gdCBTRUxFQ1QgeCwgeCoxMCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMp IGcoeCk7Cit9CisKK3RlYXJkb3duCit7CisgIERST1AgVEFCTEUgdDsKK30KKworc2Vzc2lvbiBz MQorc3RlcCBiMSAgeyBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9Citz dGVwIGIyICB7IEJFR0lOOyB9CitzdGVwIG0xICB7IERFTEVURSBGUk9NIHQ7fQorc3RlcCBzMCAg eyBzYXZlcG9pbnQgczA7fQorc3RlcCBzMSAgeyBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJBSU5U IHQxX25uIE5PVCBOVUxMIGE7fQorc3RlcCBzbiAgeyBTRUxFQ1QgY29ubmFtZSwgY29ucmVsaWQ6 OnJlZ2NsYXNzLCBjb250eXBlLCBjb252YWxpZGF0ZWQKKyAgICAgICAgICAgRlJPTSBwZ19jb25z dHJhaW50IFdIRVJFIGNvbm5hbWUgPSAndDFfbm4nOworICAgICAgICAgfQorc3RlcCByMSAgeyBS T0xMQkFDSzsgfQorc3RlcCBjMSAgeyBDT01NSVQ7IH0KKworc2Vzc2lvbiBzMgorc3RlcCBiMyAg eyBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOyB9CitzdGVwIGI0ICB7IEJF R0lOOyB9CitzdGVwIGhqICB7IEFMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9U IE5VTEwgYTt9CitzdGVwIGQxICB7IERST1AgSU5ERVggdF9hYl9pZHg7fQorc3RlcCBjMiAgeyBS T0xMQkFDSzsgfQorc3RlcCBjMyAgeyBDT01NSVQ7IH0KKworcGVybXV0YXRpb24gYjEgYjMgbTEg aGogYzEgYzMgc24KK3Blcm11dGF0aW9uIGIyIGIzIG0xIGhqIGMxIGMzIHNuCitwZXJtdXRhdGlv biBiMSBiNCBtMSBoaiBjMSBjMyBzbgorcGVybXV0YXRpb24gYjEgYjMgaGogcjEgYzIKK3Blcm11 dGF0aW9uIGIxIGI0IGQxIG0xIGMyIHMxIHNuIHIxCitwZXJtdXRhdGlvbiBiMiBiMyBtMSBkMSBz MCBzMSBjMSBjMyBzbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dy ZWdhdGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKaW5k ZXggNmI2MzcxYzNlNzQuLjZkYWIxMjdmNzNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YWdncmVnYXRlcy5vdXQKQEAgLTE0NjEsNiArMTQ2MSw3IEBAIGV4cGxhaW4gKGNvc3RzIG9mZikg c2VsZWN0IHkseiBmcm9tIHQyIGdyb3VwIGJ5IHksejsKIAogLS0gTWFrZSB0aGUgY29sdW1uIE5P VCBOVUxMIGFuZCBlbnN1cmUgd2UgcmVtb3ZlIHRoZSByZWR1bmRhbnQgY29sdW1uCiBhbHRlciB0 YWJsZSB0MiBhbHRlciBjb2x1bW4geiBzZXQgbm90IG51bGw7CitOT1RJQ0U6ICBhbGwgbm90LW51 bGwgY29uc3RyYWludHMgb24gcmVsYXRpb24gInQyIiBhcmUgdmFsaWRhdGVkIGJ5IGluZGV4IHNj YW4KIGV4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IHkseiBmcm9tIHQyIGdyb3VwIGJ5IHksejsK ICAgICAgIFFVRVJZIFBMQU4gICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9hbHRlcl90YWJsZS5vdXQKaW5kZXggNDc2MjY2ZTNmNGIuLmEwMGZl NTE3NWJhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FsdGVyX3RhYmxl Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FsdGVyX3RhYmxlLm91dApAQCAt NDgzMywzICs0ODMzLDQ1IEBAIGRyb3AgcHVibGljYXRpb24gcHViMTsKIGRyb3Agc2NoZW1hIGFs dGVyMSBjYXNjYWRlOwogZHJvcCBzY2hlbWEgYWx0ZXIyIGNhc2NhZGU7CiBOT1RJQ0U6ICBkcm9w IGNhc2NhZGVzIHRvIHRhYmxlIGFsdGVyMi50MQorLS0tLS1mYXN0IGFkZCBub3QtbnVsbCBjb25z dHJhaW50IHRlc3RzLgorQ1JFQVRFIFRBQkxFIHRwIChhIGludCwgYiBpbnQgR0VORVJBVEVEIEFM V0FZUyBBUyAoMjIpIHN0b3JlZCkgUEFSVElUSU9OIEJZIHJhbmdlKGEpOworQ1JFQVRFIFRBQkxF IHRwcDEoYSBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGErMSkgc3RvcmVkKTsKK0NS RUFURSBUQUJMRSB0cHAyKGEgaW50LCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhKzEwKSBz dG9yZWQpOworQUxURVIgVEFCTEUgdHAgQVRUQUNIIFBBUlRJVElPTiB0cHAxIEZPUiB2YWx1ZXMg ZnJvbSAoIDEgKSB0byAoMTApOworQUxURVIgVEFCTEUgdHAgQVRUQUNIIFBBUlRJVElPTiB0cHAy IEZPUiB2YWx1ZXMgZnJvbSAoIDEwICkgdG8gKDIxKTsKK0lOU0VSVCBJTlRPIHRwIHNlbGVjdCBn IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTkpIGc7CitDUkVBVEUgSU5ERVggT04gdHAoYik7CitB TFRFUiBUQUJMRSB0cCBhbHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGw7CitOT1RJQ0U6ICBhbGwg bm90LW51bGwgY29uc3RyYWludHMgb24gcmVsYXRpb24gInRwcDEiIGFyZSB2YWxpZGF0ZWQgYnkg aW5kZXggc2NhbgorTk9USUNFOiAgYWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9u ICJ0cHAyIiBhcmUgdmFsaWRhdGVkIGJ5IGluZGV4IHNjYW4KK0FMVEVSIFRBQkxFIHRwIGFsdGVy IGNvbHVtbiBiIGRyb3Agbm90IG51bGw7CitBTFRFUiBUQUJMRSB0cHAxIGFsdGVyIGNvbHVtbiBi IHNldCBub3QgbnVsbDsKK05PVElDRTogIGFsbCBub3QtbnVsbCBjb25zdHJhaW50cyBvbiByZWxh dGlvbiAidHBwMSIgYXJlIHZhbGlkYXRlZCBieSBpbmRleCBzY2FuCitBTFRFUiBUQUJMRSB0cHAy IGFsdGVyIGNvbHVtbiBiIHNldCBub3QgbnVsbDsKK05PVElDRTogIGFsbCBub3QtbnVsbCBjb25z dHJhaW50cyBvbiByZWxhdGlvbiAidHBwMiIgYXJlIHZhbGlkYXRlZCBieSBpbmRleCBzY2FuCitB TFRFUiBUQUJMRSB0cCBhbHRlciBjb2x1bW4gYiBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUg dHAgYWx0ZXIgY29sdW1uIGIgc2V0IG5vdCBudWxsLCBBTFRFUiBDT0xVTU4gYiBTRVQgRVhQUkVT U0lPTiBBUyAoYSAqIDMpOworLS0tLS0tdGVzdCBub24tcGFydGl0aW9uZWQgdGFibGUKK0NSRUFU RSBUQUJMRSB0MShmMSBJTlQsIGYyIGludCwgZjMgaW50LGY0IGludCwgZjUgaW50KTsKK0lOU0VS VCBJTlRPIHQxIHNlbGVjdCBnLCBnKzEsIGcrMiwgZyszLCBnKzQgZnJvbSBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwKSBnOworQ1JFQVRFIElOREVYIHQxX2YxX2YyX2lkeCBPTiB0MShmMSxmMik7CitD UkVBVEUgVU5JUVVFIElOREVYIHQxX2YzaWR4IE9OIHQxKGYzKTsKK0NSRUFURSBJTkRFWCB0MV9m M2Y0aWR4IE9OIHQxKGYzKSBpbmNsdWRlKGY0KTsKK0NSRUFURSBJTkRFWCBoYXNoX2Y1X2lkeCBP TiB0MSBVU0lORyBoYXNoIChmNSBpbnQ0X29wcyk7CistLXRhYmxlIHJld3JpdGUsIHNvIGNhbiBu b3QgdXNlIGluZGV4c2NhbiB0byBjaGVjayBub3QtbnVsbCBjb25zdHJhaW50LgorQUxURVIgVEFC TEUgdDEgYWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbCwgQUxURVIgZjEgVFlQRSBCSUdJTlQ7 CitBTFRFUiBUQUJMRSB0MSBhbHRlciBjb2x1bW4gZjEgZHJvcCBub3QgbnVsbDsKK0FMVEVSIFRB QkxFIHQxIGFkZCBjb25zdHJhaW50IG5uIG5vdCBudWxsIGYxLCBBTFRFUiBmMSBUWVBFIEJJR0lO VDsgLS1ub3cgb2sKK0FMVEVSIFRBQkxFIHQxIGFsdGVyIGNvbHVtbiBmMSBkcm9wIG5vdCBudWxs LCBhbHRlciBjb2x1bW4gZjIgZHJvcCBub3QgbnVsbDsKK0lOU0VSVCBJTlRPIHQxIHZhbHVlcygx MSwgTlVMTCwgMSwyLDMpOworQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYyIHNldCBub3Qg bnVsbCwgYWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbDsgLS1lcnJvcgorRVJST1I6ICBjb2x1 bW4gImYyIiBvZiByZWxhdGlvbiAidDEiIGNvbnRhaW5zIG51bGwgdmFsdWVzCitERUxFVEUgRlJP TSB0MSB3aGVyZSBmMSA9IDExOworQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYyIHNldCBu b3QgbnVsbCwgYWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbDsgLS1vaworTk9USUNFOiAgYWxs IG5vdC1udWxsIGNvbnN0cmFpbnRzIG9uIHJlbGF0aW9uICJ0MSIgYXJlIHZhbGlkYXRlZCBieSBp bmRleCBzY2FuCistLXVzaW5nIGluZGV4c2NhbiB0byBjaGVjayBub3QtbnVsbCBjYW4gb25seSBh cHBseSB0byBrZXkgY29sdW1ucywgbm90IGluY2x1ZGUgY29sdW1uCitBTFRFUiBUQUJMRSB0MSBh ZGQgY29uc3RyYWludCBubmY0IG5vdCBudWxsIGY0OworLS1jYW5ub3QgZmFzdCBBTFRFUiBUQUJM RSBTRVQgTk9UIE5VTEwgYnkgdXRpbGl6aW5nIGhhc2ggaW5kZXguCitBTFRFUiBUQUJMRSB0MSBh ZGQgY29uc3RyYWludCBubl9mNSBub3QgbnVsbCBmNTsKK2Ryb3AgdGFibGUgdDE7Citkcm9wIHRh YmxlIHRwcDEsIHRwcDIsIHRwOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9pbmRleGluZy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dApp bmRleCBiY2YxZGIxMWQ3My4uNWYxMDZjNzRkODcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv aW5kZXhpbmcub3V0CkBAIC0xMTg2LDYgKzExODYsNyBAQCBjcmVhdGUgdGFibGUgaWR4cGFydDAg cGFydGl0aW9uIG9mIGlkeHBhcnQgKGkpIGZvciB2YWx1ZXMgd2l0aCAobW9kdWx1cyAyLCByZW1h aQogY3JlYXRlIHRhYmxlIGlkeHBhcnQxIHBhcnRpdGlvbiBvZiBpZHhwYXJ0IChpKSBmb3IgdmFs dWVzIHdpdGggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDEpOwogYWx0ZXIgdGFibGUgaWR4cGFydDAg YWRkIHByaW1hcnkga2V5KGkpOwogYWx0ZXIgdGFibGUgaWR4cGFydCBhZGQgcHJpbWFyeSBrZXko aSk7CitOT1RJQ0U6ICBhbGwgbm90LW51bGwgY29uc3RyYWludHMgb24gcmVsYXRpb24gImlkeHBh cnQxIiBhcmUgdmFsaWRhdGVkIGJ5IGluZGV4IHNjYW4KIHNlbGVjdCBpbmRyZWxpZDo6cmVnY2xh c3MsIGluZGV4cmVsaWQ6OnJlZ2NsYXNzLCBpbmhwYXJlbnQ6OnJlZ2NsYXNzLCBpbmRpc3ZhbGlk LAogICBjb25uYW1lLCBjb25pc2xvY2FsLCBjb25pbmhjb3VudCwgY29ubm9pbmhlcml0LCBjb252 YWxpZGF0ZWQKICAgZnJvbSBwZ19pbmRleCBpZHggbGVmdCBqb2luIHBnX2luaGVyaXRzIGluaCBv biAoaWR4LmluZGV4cmVsaWQgPSBpbmguaW5ocmVsaWQpCkBAIC0xMjc5LDYgKzEyODAsNyBAQCBh bHRlciB0YWJsZSBpZHhwYXJ0IGF0dGFjaCBwYXJ0aXRpb24gaWR4cGFydDAgZGVmYXVsdDsKIGFs dGVyIHRhYmxlIG9ubHkgaWR4cGFydCBhZGQgcHJpbWFyeSBrZXkgKGEpOyAgLS0gZmFpbCwgbm8g bm90LW51bGwgY29uc3RyYWludAogRVJST1I6ICBjb2x1bW4gImEiIG9mIHRhYmxlICJpZHhwYXJ0 MCIgaXMgbm90IG1hcmtlZCBOT1QgTlVMTAogYWx0ZXIgdGFibGUgaWR4cGFydDAgYWx0ZXIgY29s dW1uIGEgc2V0IG5vdCBudWxsOworTk9USUNFOiAgYWxsIG5vdC1udWxsIGNvbnN0cmFpbnRzIG9u IHJlbGF0aW9uICJpZHhwYXJ0MCIgYXJlIHZhbGlkYXRlZCBieSBpbmRleCBzY2FuCiBhbHRlciB0 YWJsZSBvbmx5IGlkeHBhcnQgYWRkIHByaW1hcnkga2V5IChhKTsgIC0tIG5vdyBpdCB3b3Jrcwog YWx0ZXIgaW5kZXggaWR4cGFydF9wa2V5IGF0dGFjaCBwYXJ0aXRpb24gaWR4cGFydDBfYV9rZXk7 CiBkcm9wIHRhYmxlIGlkeHBhcnQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0CmluZGV4IDRkZTk2YzA0ZjlkLi5lOTg1ZDRmNTAyMiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQKQEAgLTc3OCw2ICs3NzgsNyBAQCBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2luc2VydCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChi LCBjKTsKIC8qIG5vdCBhbGwgcmVwbGljYSBpZGVudGl0aWVzIGFyZSBnb29kIGVub3VnaCAqLwog Q1JFQVRFIFVOSVFVRSBJTkRFWCB0ZXN0cHViX3RibDVfYl9rZXkgT04gdGVzdHB1Yl90Ymw1IChi LCBjKTsKIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBBTFRFUiBiIFNFVCBOT1QgTlVMTCwgQUxU RVIgYyBTRVQgTk9UIE5VTEw7CitOT1RJQ0U6ICBhbGwgbm90LW51bGwgY29uc3RyYWludHMgb24g cmVsYXRpb24gInRlc3RwdWJfdGJsNSIgYXJlIHZhbGlkYXRlZCBieSBpbmRleCBzY2FuCiBBTFRF UiBUQUJMRSB0ZXN0cHViX3RibDUgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHVi X3RibDVfYl9rZXk7CiAtLSBlcnJvcjogcmVwbGljYSBpZGVudGl0eSAoYixjKSBpcyBub3QgY292 ZXJlZCBieSBjb2x1bW4gbGlzdCAoYSwgYykKIFVQREFURSB0ZXN0cHViX3RibDUgU0VUIGEgPSAx OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC90YWJsZXNwYWNlLm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGFibGVzcGFjZS5vdXQKaW5kZXggYTkwZTM5ZTU3 MzguLmQyOGJjY2I1Mzc4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Rh Ymxlc3BhY2Uub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdGFibGVzcGFjZS5v dXQKQEAgLTYwMyw2ICs2MDMsNyBAQCBJTlNFUlQgSU5UTyB0ZXN0c2NoZW1hLnRlc3RfZGVmYXVs dF90YWJfcCBWQUxVRVMgKDEpOwogQ1JFQVRFIElOREVYIHRlc3RfaW5kZXgxIG9uIHRlc3RzY2hl bWEudGVzdF9kZWZhdWx0X3RhYl9wICh2YWwpOwogQ1JFQVRFIElOREVYIHRlc3RfaW5kZXgyIG9u IHRlc3RzY2hlbWEudGVzdF9kZWZhdWx0X3RhYl9wICh2YWwpIFRBQkxFU1BBQ0UgcmVncmVzc190 YmxzcGFjZTsKIEFMVEVSIFRBQkxFIHRlc3RzY2hlbWEudGVzdF9kZWZhdWx0X3RhYl9wIEFERCBD T05TVFJBSU5UIHRlc3RfaW5kZXgzIFBSSU1BUlkgS0VZIChpZCk7CitOT1RJQ0U6ICBhbGwgbm90 LW51bGwgY29uc3RyYWludHMgb24gcmVsYXRpb24gInRlc3RfZGVmYXVsdF90YWJfcDEiIGFyZSB2 YWxpZGF0ZWQgYnkgaW5kZXggc2NhbgogQUxURVIgVEFCTEUgdGVzdHNjaGVtYS50ZXN0X2RlZmF1 bHRfdGFiX3AgQUREIENPTlNUUkFJTlQgdGVzdF9pbmRleDQgVU5JUVVFIChpZCkgVVNJTkcgSU5E RVggVEFCTEVTUEFDRSByZWdyZXNzX3RibHNwYWNlOwogXGQgdGVzdHNjaGVtYS50ZXN0X2luZGV4 MQogUGFydGl0aW9uZWQgaW5kZXggInRlc3RzY2hlbWEudGVzdF9pbmRleDEiCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hbHRlcl90YWJsZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9hbHRlcl90YWJsZS5zcWwKaW5kZXggNWNlOWQxZTQyOWYuLjYyNmZkMzc5OGY4IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hbHRlcl90YWJsZS5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsCkBAIC0zMTI1LDMgKzMxMjUsNDkgQEAgYWx0 ZXIgdGFibGUgYWx0ZXIxLnQxIHNldCBzY2hlbWEgYWx0ZXIyOwogZHJvcCBwdWJsaWNhdGlvbiBw dWIxOwogZHJvcCBzY2hlbWEgYWx0ZXIxIGNhc2NhZGU7CiBkcm9wIHNjaGVtYSBhbHRlcjIgY2Fz Y2FkZTsKKworLS0tLS1mYXN0IGFkZCBub3QtbnVsbCBjb25zdHJhaW50IHRlc3RzLgorQ1JFQVRF IFRBQkxFIHRwIChhIGludCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoMjIpIHN0b3JlZCkg UEFSVElUSU9OIEJZIHJhbmdlKGEpOworQ1JFQVRFIFRBQkxFIHRwcDEoYSBpbnQsIGIgaW50IEdF TkVSQVRFRCBBTFdBWVMgQVMgKGErMSkgc3RvcmVkKTsKK0NSRUFURSBUQUJMRSB0cHAyKGEgaW50 LCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhKzEwKSBzdG9yZWQpOworQUxURVIgVEFCTEUg dHAgQVRUQUNIIFBBUlRJVElPTiB0cHAxIEZPUiB2YWx1ZXMgZnJvbSAoIDEgKSB0byAoMTApOwor QUxURVIgVEFCTEUgdHAgQVRUQUNIIFBBUlRJVElPTiB0cHAyIEZPUiB2YWx1ZXMgZnJvbSAoIDEw ICkgdG8gKDIxKTsKK0lOU0VSVCBJTlRPIHRwIHNlbGVjdCBnIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsMTkpIGc7CitDUkVBVEUgSU5ERVggT04gdHAoYik7CisKK0FMVEVSIFRBQkxFIHRwIGFsdGVy IGNvbHVtbiBiIHNldCBub3QgbnVsbDsKK0FMVEVSIFRBQkxFIHRwIGFsdGVyIGNvbHVtbiBiIGRy b3Agbm90IG51bGw7CisKK0FMVEVSIFRBQkxFIHRwcDEgYWx0ZXIgY29sdW1uIGIgc2V0IG5vdCBu dWxsOworQUxURVIgVEFCTEUgdHBwMiBhbHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGw7CisKK0FM VEVSIFRBQkxFIHRwIGFsdGVyIGNvbHVtbiBiIGRyb3Agbm90IG51bGw7CitBTFRFUiBUQUJMRSB0 cCBhbHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGwsIEFMVEVSIENPTFVNTiBiIFNFVCBFWFBSRVNT SU9OIEFTIChhICogMyk7CisKKy0tLS0tLXRlc3Qgbm9uLXBhcnRpdGlvbmVkIHRhYmxlCitDUkVB VEUgVEFCTEUgdDEoZjEgSU5ULCBmMiBpbnQsIGYzIGludCxmNCBpbnQsIGY1IGludCk7CitJTlNF UlQgSU5UTyB0MSBzZWxlY3QgZywgZysxLCBnKzIsIGcrMywgZys0IGZyb20gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMCkgZzsKK0NSRUFURSBJTkRFWCB0MV9mMV9mMl9pZHggT04gdDEoZjEsZjIpOwor Q1JFQVRFIFVOSVFVRSBJTkRFWCB0MV9mM2lkeCBPTiB0MShmMyk7CitDUkVBVEUgSU5ERVggdDFf ZjNmNGlkeCBPTiB0MShmMykgaW5jbHVkZShmNCk7CitDUkVBVEUgSU5ERVggaGFzaF9mNV9pZHgg T04gdDEgVVNJTkcgaGFzaCAoZjUgaW50NF9vcHMpOworCistLXRhYmxlIHJld3JpdGUsIHNvIGNh biBub3QgdXNlIGluZGV4c2NhbiB0byBjaGVjayBub3QtbnVsbCBjb25zdHJhaW50LgorQUxURVIg VEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbCwgQUxURVIgZjEgVFlQRSBCSUdJ TlQ7CitBTFRFUiBUQUJMRSB0MSBhbHRlciBjb2x1bW4gZjEgZHJvcCBub3QgbnVsbDsKK0FMVEVS IFRBQkxFIHQxIGFkZCBjb25zdHJhaW50IG5uIG5vdCBudWxsIGYxLCBBTFRFUiBmMSBUWVBFIEJJ R0lOVDsgLS1ub3cgb2sKKworQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYxIGRyb3Agbm90 IG51bGwsIGFsdGVyIGNvbHVtbiBmMiBkcm9wIG5vdCBudWxsOworSU5TRVJUIElOVE8gdDEgdmFs dWVzKDExLCBOVUxMLCAxLDIsMyk7CitBTFRFUiBUQUJMRSB0MSBhbHRlciBjb2x1bW4gZjIgc2V0 IG5vdCBudWxsLCBhbHRlciBjb2x1bW4gZjEgc2V0IG5vdCBudWxsOyAtLWVycm9yCitERUxFVEUg RlJPTSB0MSB3aGVyZSBmMSA9IDExOworQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYyIHNl dCBub3QgbnVsbCwgYWx0ZXIgY29sdW1uIGYxIHNldCBub3QgbnVsbDsgLS1vaworCistLXVzaW5n IGluZGV4c2NhbiB0byBjaGVjayBub3QtbnVsbCBjYW4gb25seSBhcHBseSB0byBrZXkgY29sdW1u cywgbm90IGluY2x1ZGUgY29sdW1uCitBTFRFUiBUQUJMRSB0MSBhZGQgY29uc3RyYWludCBubmY0 IG5vdCBudWxsIGY0OworCistLWNhbm5vdCBmYXN0IEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTCBi eSB1dGlsaXppbmcgaGFzaCBpbmRleC4KK0FMVEVSIFRBQkxFIHQxIGFkZCBjb25zdHJhaW50IG5u X2Y1IG5vdCBudWxsIGY1OworCitkcm9wIHRhYmxlIHQxOworZHJvcCB0YWJsZSB0cHAxLCB0cHAy LCB0cDsKLS0gCjIuMzQuMQoK --000000000000f2bda906330904cd--