From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by sourceware.org (Postfix) with ESMTPS id 6893A3858D38; Thu, 17 Aug 2023 09:31:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6893A3858D38 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-307d58b3efbso6484773f8f.0; Thu, 17 Aug 2023 02:31:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692264667; x=1692869467; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=EOiBXuTcI31gFnsmyFS/tXW2Vl8fX97zkWs9lhktTkU=; b=P688lMRkBV7E/7vgVz8qHSeyVVtDZiAlMjNZZXrMkVsfcAj0+sczB7sXW2+64vIoZG 4BEDwMwTusAeABiumOYVhkv67cW0ag4Bim+loXqUxJoGxSTAY4vUbWxtCQs8tdFu5MR+ I4qXV4xM+Tl09/SJ95uLfuhiFWOkqVkCSrF9h5EefdoD2xmM09ZHbq+O4Gg4440vnbNo KC5AoseGgZkVRYBV61Sf9X5RJyfFI71DFI+dclv5BeVPJY32z/rsKIMGBupu/uY51t4e FY4AlNeP/u3aNmghEdob+R2fc5JXzESVjTsGPlT99KaEVMhKpAC80C4MkLMKPgqEZWGm JTXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692264667; x=1692869467; 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=EOiBXuTcI31gFnsmyFS/tXW2Vl8fX97zkWs9lhktTkU=; b=LfGG38fqy8QhAtkgh17FZgPNU9n5eAgDD1/X+2ax+WolU8ZfrdkCYb6Wmv+CnZK/po InnWq/bzdRhixdRKErfZabTqaUXn+zr8lxsEsH6oXOjVn2sNKA2UxQNjYoxDlXXEmr3e U2Olb4BjM6L0b1lv3PLTCpp+WWpgjXYaO8B5weWyzN3MiK8guC9xMYGBRjBYevk3i73u h2j1gJXLA1QZsrD9atuPOOllsnRoQYfJjZxrQLAxmFUQTKCrl/9UOy6MAykrS9TvmEnm IslnE94YHfyyE78TClsAY02orRZu1IKaJysmCvSeT9Z8wtigB0K7adTl2UIWLSavFFUs uh5g== X-Gm-Message-State: AOJu0YwQ1EpPXEDCXI2H18HkHZ7KVDIY6eJSOkD1gZvDJOqfOW1hm/RC Huv1yXTE6a/8qB95dSgsFaEYyYo2u+ORtQ1HvjY= X-Google-Smtp-Source: AGHT+IGxTpEBxfb4vzqtFEfmfrsDvLs3hudO1FI3mAiXekLRtVGcqeMuQE1Tbt5xUfTNqwIpqMX4D9EdPHpX4LtoOFc= X-Received: by 2002:adf:f80a:0:b0:314:d31:f7 with SMTP id s10-20020adff80a000000b003140d3100f7mr3997623wrp.63.1692264666447; Thu, 17 Aug 2023 02:31:06 -0700 (PDT) MIME-Version: 1.0 References: <059ffebd230df2dbbac3f138ec85016bb7a7306a.camel@redhat.com> In-Reply-To: <059ffebd230df2dbbac3f138ec85016bb7a7306a.camel@redhat.com> From: Guillaume Gomez Date: Thu, 17 Aug 2023 11:30:54 +0200 Message-ID: Subject: Re: [PATCH] libgccjit: Add support for `restrict` attribute on function parameters To: David Malcolm Cc: gcc-patches@gcc.gnu.org, jit@gcc.gnu.org Content-Type: multipart/mixed; boundary="0000000000004f602e06031b127d" X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000004f602e06031b127d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Dave, > What kind of testing has the patch had? (e.g. did you run "make check- > jit" ? Has this been in use on real Rust code?) I tested it as Rust backend directly on this code: ``` pub fn foo(a: &mut i32, b: &mut i32, c: &i32) { *a +=3D *c; *b +=3D *c; } ``` I ran it with `rustc` (and the GCC backend) with the following flags: `-C link-args=3D-lc --emit=3Dasm -O --crate-type=3Dlib` which gave the diff you can see in the attached file. Explanations: the diff on the right has the `__restrict__` attribute used whereas on the left it is the current version where we don't handle it. As for C testing, I used this code: ``` void t(int *__restrict__ a, int *__restrict__ b, char *__restrict__ c) { *a +=3D *c; *b +=3D *c; } ``` (without the `__restrict__` of course when I need to have a witness ASM). I attached the diff as well, this time the file with the use of `__restrict__` in on the left. I compiled with the following flags: `-S -O3`. > Please add a feature macro: > #define LIBGCCJIT_HAVE_gcc_jit_type_get_restrict > (see the similar ones in the header). I added `LIBGCCJIT_HAVE_gcc_jit_type_get_size` and extended the documentation as well to mention the ABI change. > Please add a new ABI tag (LIBGCCJIT_ABI_25 ?), rather than adding this > to ABI_0. I added `LIBGCCJIT_ABI_34` as `LIBGCCJIT_ABI_33` was the last one. > This refers to a "cold attribute"; is this a vestige of a copy-and- > paste from a different test case? It is a vestige indeed... Missed this one. > I see that the test scans the generated assembler. Does the test > actually verify that restrict has an effect, or was that another > vestige from a different test case? No, this time it's what I wanted. Please see the C diff I provided above to see that the ASM has a small diff that allowed me to confirm that the `__restrict__` attribute was correctly set. > If this test is meant to run at -O3 and thus can't be part of test- > combination.c, please add a comment about it to > gcc/testsuite/jit.dg/all-non-failing-tests.h (in the alphabetical > place). Below `-O3`, this ASM difference doesn't appear unfortunately. > The patch also needs to add documentation for the new entrypoint (in > topics/types.rst), and for the new ABI tag (in > topics/compatibility.rst). Added! > Thanks again for the patch; hope the above is constructive It was incredibly useful! Thanks for taking time to writing down the explanations. The new patch is attached to this email. Cordially. Le jeu. 17 ao=C3=BBt 2023 =C3=A0 01:06, David Malcolm = a =C3=A9crit : > > On Wed, 2023-08-16 at 22:06 +0200, Guillaume Gomez via Jit wrote: > > My apologies, forgot to run the commit checkers. Here's the commit > > with the errors fixed. > > > > Le mer. 16 ao=C3=BBt 2023 =C3=A0 18:32, Guillaume Gomez > > a =C3=A9crit : > > > > > > Hi, > > Hi Guillaume, thanks for the patch. > > > > > > > This patch adds the possibility to specify the __restrict__ > > > attribute > > > for function parameters. It is used by the Rust GCC backend. > > What kind of testing has the patch had? (e.g. did you run "make check- > jit" ? Has this been in use on real Rust code?) > > Overall, this patch looks close to being ready, but some nits below... > > [...] > > > diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h > > index 60eaf39bff6..2e0d08a06d8 100644 > > --- a/gcc/jit/libgccjit.h > > +++ b/gcc/jit/libgccjit.h > > @@ -635,6 +635,10 @@ gcc_jit_type_get_const (gcc_jit_type *type); > > extern gcc_jit_type * > > gcc_jit_type_get_volatile (gcc_jit_type *type); > > > > +/* Given type "T", get type "restrict T". */ > > +extern gcc_jit_type * > > +gcc_jit_type_get_restrict (gcc_jit_type *type); > > + > > #define LIBGCCJIT_HAVE_SIZED_INTEGERS > > > > /* Given types LTYPE and RTYPE, return non-zero if they are > compatible. > > Please add a feature macro: > #define LIBGCCJIT_HAVE_gcc_jit_type_get_restrict > (see the similar ones in the header). > > > diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map > > index e52de0057a5..b7289b13845 100644 > > --- a/gcc/jit/libgccjit.map > > +++ b/gcc/jit/libgccjit.map > > @@ -104,6 +104,7 @@ LIBGCCJIT_ABI_0 > > gcc_jit_type_as_object; > > gcc_jit_type_get_const; > > gcc_jit_type_get_pointer; > > + gcc_jit_type_get_restrict; > > gcc_jit_type_get_volatile; > > Please add a new ABI tag (LIBGCCJIT_ABI_25 ?), rather than adding this > to ABI_0. > > > diff --git a/gcc/testsuite/jit.dg/test-restrict.c > b/gcc/testsuite/jit.dg/test-restrict.c > > new file mode 100644 > > index 00000000000..4c8c4407f91 > > --- /dev/null > > +++ b/gcc/testsuite/jit.dg/test-restrict.c > > @@ -0,0 +1,77 @@ > > +/* { dg-do compile { target x86_64-*-* } } */ > > + > > +#include > > +#include > > + > > +#include "libgccjit.h" > > + > > +/* We don't want set_options() in harness.h to set -O3 to see that > the cold > > + attribute affects the optimizations. */ > > This refers to a "cold attribute"; is this a vestige of a copy-and- > paste from a different test case? > > I see that the test scans the generated assembler. Does the test > actually verify that restrict has an effect, or was that another > vestige from a different test case? > > > +#define TEST_ESCHEWS_SET_OPTIONS > > +static void set_options (gcc_jit_context *ctxt, const char *argv0) > > +{ > > + // Set "-O3". > > + gcc_jit_context_set_int_option(ctxt, > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 3); > > +} > > + > > +#define TEST_COMPILING_TO_FILE > > +#define OUTPUT_KIND GCC_JIT_OUTPUT_KIND_ASSEMBLER > > +#define OUTPUT_FILENAME "output-of-test-restrict.c.s" > > +#include "harness.h" > > + > > +void > > +create_code (gcc_jit_context *ctxt, void *user_data) > > +{ > > + /* Let's try to inject the equivalent of: > > +void t(int *__restrict__ a, int *__restrict__ b, char *__restrict__ > c) { > > + *a +=3D *c; > > + *b +=3D *c; > > +} > > + */ > > + gcc_jit_type *int_type =3D > > + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); > > + gcc_jit_type *pint_type =3D gcc_jit_type_get_pointer(int_type); > > + gcc_jit_type *pint_restrict_type =3D > gcc_jit_type_get_restrict(pint_type); > > + > > + gcc_jit_type *void_type =3D > > + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID); > > + > > + gcc_jit_param *a =3D > > + gcc_jit_context_new_param (ctxt, NULL, > pint_restrict_type, "a"); > > + gcc_jit_param *b =3D > > + gcc_jit_context_new_param (ctxt, NULL, > pint_restrict_type, "b"); > > + gcc_jit_param *c =3D > > + gcc_jit_context_new_param (ctxt, NULL, > pint_restrict_type, "c"); > > + gcc_jit_param *params[3] =3D {a, b, c}; > > + > > + gcc_jit_function *func_t =3D > > + gcc_jit_context_new_function (ctxt, NULL, > > + GCC_JIT_FUNCTION_EXPORTED, > > + void_type, > > + "t", > > + 3, params, > > + 0); > > + > > + gcc_jit_block *block =3D gcc_jit_function_new_block (func_t, > NULL); > > + > > + /* *a +=3D *c; */ > > + gcc_jit_block_add_assignment_op ( > > + block, NULL, > > + gcc_jit_rvalue_dereference (gcc_jit_param_as_rvalue > (a), NULL), > > + GCC_JIT_BINARY_OP_PLUS, > > + gcc_jit_lvalue_as_rvalue ( > > + gcc_jit_rvalue_dereference > (gcc_jit_param_as_rvalue (c), NULL))); > > + /* *b +=3D *c; */ > > + gcc_jit_block_add_assignment_op ( > > + block, NULL, > > + gcc_jit_rvalue_dereference (gcc_jit_param_as_rvalue > (b), NULL), > > + GCC_JIT_BINARY_OP_PLUS, > > + gcc_jit_lvalue_as_rvalue ( > > + gcc_jit_rvalue_dereference > (gcc_jit_param_as_rvalue (c), NULL))); > > + > > + gcc_jit_block_end_with_void_return (block, NULL); > > +} > > + > > +/* { dg-final { jit-verify-output-file-was-created "" } } */ > > +/* { dg-final { jit-verify-assembler-output "addl %eax, (%rdi) > > + addl %eax, (%rsi)" } } */ > > -- > > 2.34.1 > > > > If this test is meant to run at -O3 and thus can't be part of test- > combination.c, please add a comment about it to > gcc/testsuite/jit.dg/all-non-failing-tests.h (in the alphabetical > place). > > The patch also needs to add documentation for the new entrypoint (in > topics/types.rst), and for the new ABI tag (in > topics/compatibility.rst). > > > Thanks again for the patch; hope the above is constructive > Dave > --0000000000004f602e06031b127d Content-Type: text/x-patch; charset="US-ASCII"; name="rust-diff.diff" Content-Disposition: attachment; filename="rust-diff.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_llexjips0 JCBkaWZmIC15IGZvby5zIG5vYWxpYXMtZm9vLnMgCgkuZmlsZQkiZmFrZS5jIgkJCQkJCS5maWxl CSJmYWtlLmMiCgkuaW50ZWxfc3ludGF4IG5vcHJlZml4CQkJCQkJLmludGVsX3N5bnRheCBub3By ZWZpeAoJLnRleHQJCQkJCQkJCS50ZXh0Ci5MdGV4dDA6CQkJCQkJCS5MdGV4dDA6CgkuZmlsZSAw ICIvaG9tZS9pbXBlcmlvL3J1c3QvcnVzdGNfY29kZWdlbl9nY2MiICIvdG1wLyB8CQkuZmlsZSAw ICIvaG9tZS9pbXBlcmlvL3J1c3QvcnVzdGNfY29kZWdlbl9nY2MiICIvdG1wLwoJLnNlY3Rpb24J LnRleHQudW5saWtlbHkuX1pOM2ZvbzNmb28xN2hkNzlkN2Y5NgkJLnNlY3Rpb24JLnRleHQudW5s aWtlbHkuX1pOM2ZvbzNmb28xN2hkNzlkN2Y5NgoJLmdsb2JsCV9aTjNmb28zZm9vMTdoZDc5ZDdm OTY1ZjYxYzI5ZUUJCQkJLmdsb2JsCV9aTjNmb28zZm9vMTdoZDc5ZDdmOTY1ZjYxYzI5ZUUKCS50 eXBlCV9aTjNmb28zZm9vMTdoZDc5ZDdmOTY1ZjYxYzI5ZUUsIEBmdW5jdGlvbgkJLnR5cGUJX1pO M2ZvbzNmb28xN2hkNzlkN2Y5NjVmNjFjMjllRSwgQGZ1bmN0aW9uCl9aTjNmb28zZm9vMTdoZDc5 ZDdmOTY1ZjYxYzI5ZUU6CQkJCV9aTjNmb28zZm9vMTdoZDc5ZDdmOTY1ZjYxYzI5ZUU6Ci5MVkww OgkJCQkJCQkJLkxWTDA6Ci5MRkIwOgkJCQkJCQkJLkxGQjA6CgkuY2ZpX3N0YXJ0cHJvYwkJCQkJ CQkuY2ZpX3N0YXJ0cHJvYwouTDI6CQkJCQkJCQkuTDI6Cgltb3YJZWF4LCBEV09SRCBQVFIgW3Jk eF0JCQkJCW1vdgllYXgsIERXT1JEIFBUUiBbcmR4XQoJYWRkCURXT1JEIFBUUiBbcmRpXSwgZWF4 CQkJICAgICAgPAouTFZMMToJCQkJCQkJCS5MVkwxOgoJbW92CWVheCwgRFdPUkQgUFRSIFtyZHhd CQkJICAgICAgfAkJYWRkCURXT1JEIFBUUiBbcmRpXSwgZWF4CglhZGQJRFdPUkQgUFRSIFtyc2ld LCBlYXgJCQkgICAgICA8Ci5MVkwyOgkJCQkJCQkJLkxWTDI6CgkJCQkJCQkgICAgICA+CQlhZGQJ RFdPUkQgUFRSIFtyc2ldLCBlYXgKCQkJCQkJCSAgICAgID4JLkxWTDM6CglyZXQJCQkJCQkJCXJl dAoJLmNmaV9lbmRwcm9jCQkJCQkJCS5jZmlfZW5kcHJvYwouTEZFMDoJCQkJCQkJCS5MRkUwOgoJ LnNpemUJX1pOM2ZvbzNmb28xN2hkNzlkN2Y5NjVmNjFjMjllRSwgLi1fWk4zZm9vM2ZvCQkuc2l6 ZQlfWk4zZm9vM2ZvbzE3aGQ3OWQ3Zjk2NWY2MWMyOWVFLCAuLV9aTjNmb28zZm8KCS50ZXh0CQkJ CQkJCQkudGV4dAouTGV0ZXh0MDoJCQkJCQkJLkxldGV4dDA6Cgkuc2VjdGlvbgkuZGVidWdfaW5m bywiIixAcHJvZ2JpdHMJCQkuc2VjdGlvbgkuZGVidWdfaW5mbywiIixAcHJvZ2JpdHMKLkxkZWJ1 Z19pbmZvMDoJCQkJCQkJLkxkZWJ1Z19pbmZvMDoKCS5sb25nCTB4YWQJCQkJCSAgICAgIHwJCS5s b25nCTB4YjYKCS52YWx1ZQkweDUJCQkJCQkJLnZhbHVlCTB4NQoJLmJ5dGUJMHgxCQkJCQkJCS5i eXRlCTB4MQoJLmJ5dGUJMHg4CQkJCQkJCS5ieXRlCTB4OAoJLmxvbmcJLkxkZWJ1Z19hYmJyZXYw CQkJCQkJLmxvbmcJLkxkZWJ1Z19hYmJyZXYwCgkudWxlYjEyOCAweDQJCQkJCQkJLnVsZWIxMjgg MHg0CgkubG9uZwkuTEFTRjkJCQkJCSAgICAgIHwJCS5sb25nCS5MQVNGOAoJLmJ5dGUJMHgyCQkJ CQkJCS5ieXRlCTB4MgoJLmxvbmcJLkxBU0YwCQkJCQkJCS5sb25nCS5MQVNGMAoJLmxvbmcJLkxB U0YxCQkJCQkJCS5sb25nCS5MQVNGMQoJLmxvbmcJLkxMUkwyCQkJCQkgICAgICB8CQkubG9uZwku TExSTDMKCS5xdWFkCTAJCQkJCQkJLnF1YWQJMAoJLmxvbmcJLkxkZWJ1Z19saW5lMAkJCQkJCS5s b25nCS5MZGVidWdfbGluZTAKCS51bGViMTI4IDB4NQkJCQkJCQkudWxlYjEyOCAweDUKCS5sb25n CS5MQVNGMTAJCQkJCSAgICAgIHwJCS5sb25nCS5MQVNGOQoJLnF1YWQJLkxGQjAJCQkJCQkJLnF1 YWQJLkxGQjAKCS5xdWFkCS5MRkUwLS5MRkIwCQkJCQkJLnF1YWQJLkxGRTAtLkxGQjAKCS51bGVi MTI4IDB4MQkJCQkJCQkudWxlYjEyOCAweDEKCS5ieXRlCTB4OWMJCQkJCQkJLmJ5dGUJMHg5YwoJ LmxvbmcJMHg4ZgkJCQkJICAgICAgfAkJLmxvbmcJMHg5MwoJLnVsZWIxMjggMHgzCQkJCQkgICAg ICB8CQkudWxlYjEyOCAweDIKCS5sb25nCS5MQVNGMgkJCQkJCQkubG9uZwkuTEFTRjIKCS5sb25n CTB4OGYJCQkJCSAgICAgIHwJCS5sb25nCTB4OTkKCS5sb25nCS5MTFNUMAkJCQkJCQkubG9uZwku TExTVDAKCS51bGViMTI4IDB4MwkJCQkJICAgICAgfAkJLnVsZWIxMjggMHgyCgkubG9uZwkuTEFT RjMJCQkJCQkJLmxvbmcJLkxBU0YzCgkubG9uZwkweDhmCQkJCQkgICAgICB8CQkubG9uZwkweDk5 CgkubG9uZwkuTExTVDEJCQkJCQkJLmxvbmcJLkxMU1QxCgkudWxlYjEyOCAweDYJCQkJCSAgICAg IHwJCS51bGViMTI4IDB4MgoJLmxvbmcJLkxBU0Y0CQkJCQkJCS5sb25nCS5MQVNGNAoJLmxvbmcJ MHg4ZgkJCQkJICAgICAgfAkJLmxvbmcJMHg5OQoJLnVsZWIxMjggMHgxCQkJCQkgICAgICB8CQku bG9uZwkuTExTVDIKCS5ieXRlCTB4NTEJCQkJCSAgICAgIHwJCS51bGViMTI4IDB4MwoJLnVsZWIx MjggMHgxCQkJCQkgICAgICA8CgkubG9uZwkuTEFTRjUJCQkJCQkJLmxvbmcJLkxBU0Y1CgkubG9u ZwkweDljCQkJCQkgICAgICB8CQkubG9uZwkweGE1CgkudWxlYjEyOCAweDEJCQkJCSAgICAgIHwJ CS51bGViMTI4IDB4MwoJLmxvbmcJLkxBU0Y2CQkJCQkJCS5sb25nCS5MQVNGNgoJLmxvbmcJMHhh MQkJCQkJICAgICAgfAkJLmxvbmcJMHhhYQoJLnVsZWIxMjggMHgxCQkJCQkgICAgICB8CQkudWxl YjEyOCAweDMKCS5sb25nCS5MQVNGNwkJCQkJCQkubG9uZwkuTEFTRjcKCS5sb25nCTB4YTYJCQkJ CSAgICAgIHwJCS5sb25nCTB4YWYKCQkJCQkJCSAgICAgID4JCS51bGViMTI4IDB4NgoJCQkJCQkJ ICAgICAgPgkJLmxvbmcJLkxBU0YxMAoJCQkJCQkJICAgICAgPgkJLmxvbmcJMHhiNAoJLnVsZWIx MjggMHgxCQkJCQkJCS51bGViMTI4IDB4MQoJLmxvbmcJLkxBU0Y4CQkJCQkgICAgICB8CQkuYnl0 ZQkweDUwCgkubG9uZwkweGFiCQkJCQkgICAgICA8CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS51 bGViMTI4IDB4NwkJCQkJCQkudWxlYjEyOCAweDcKCS5ieXRlCTB4OAkJCQkJCQkuYnl0ZQkweDgK CS5sb25nCTB4OTUJCQkJCSAgICAgIHwJCS5sb25nCTB4OWUKCS51bGViMTI4IDB4OAkJCQkJCQku dWxlYjEyOCAweDgKCQkJCQkJCSAgICAgID4JCS5sb25nCTB4OTMKCQkJCQkJCSAgICAgID4JCS51 bGViMTI4IDB4OQoJLmJ5dGUJMHg0CQkJCQkJCS5ieXRlCTB4NAoJLmJ5dGUJMHg1CQkJCQkJCS5i eXRlCTB4NQoJLnN0cmluZwkiaW50IgkJCQkJCQkuc3RyaW5nCSJpbnQiCgkudWxlYjEyOCAweDIJ CQkJCSAgICAgIHwJCS51bGViMTI4IDB4MQoJLnN0cmluZwkiaW50IgkJCQkJCQkuc3RyaW5nCSJp bnQiCgkudWxlYjEyOCAweDIJCQkJCSAgICAgIHwJCS51bGViMTI4IDB4MQoJLnN0cmluZwkiaW50 IgkJCQkJCQkuc3RyaW5nCSJpbnQiCgkudWxlYjEyOCAweDIJCQkJCSAgICAgIHwJCS51bGViMTI4 IDB4MQoJLnN0cmluZwkiaW50IgkJCQkJCQkuc3RyaW5nCSJpbnQiCgkudWxlYjEyOCAweDIJCQkJ CSAgICAgIHwJCS51bGViMTI4IDB4MQoJLnN0cmluZwkiaW50IgkJCQkJCQkuc3RyaW5nCSJpbnQi CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS5zZWN0aW9uCS5kZWJ1Z19hYmJyZXYsIiIsQHByb2di aXRzCQkJLnNlY3Rpb24JLmRlYnVnX2FiYnJldiwiIixAcHJvZ2JpdHMKLkxkZWJ1Z19hYmJyZXYw OgkJCQkJCS5MZGVidWdfYWJicmV2MDoKCS51bGViMTI4IDB4MQkJCQkJCQkudWxlYjEyOCAweDEK CS51bGViMTI4IDB4MzQJCQkJCSAgICAgIDwKCS5ieXRlCTAJCQkJCSAgICAgIDwKCS51bGViMTI4 IDB4MwkJCQkJICAgICAgPAoJLnVsZWIxMjggMHhlCQkJCQkgICAgICA8CgkudWxlYjEyOCAweDQ5 CQkJCQkgICAgICA8CgkudWxlYjEyOCAweDEzCQkJCQkgICAgICA8CgkuYnl0ZQkwCQkJCQkgICAg ICA8CgkuYnl0ZQkwCQkJCQkgICAgICA8CgkudWxlYjEyOCAweDIJCQkJCSAgICAgIDwKCS51bGVi MTI4IDB4MjQJCQkJCQkJLnVsZWIxMjggMHgyNAoJLmJ5dGUJMAkJCQkJCQkuYnl0ZQkwCgkudWxl YjEyOCAweGIJCQkJCQkJLnVsZWIxMjggMHhiCgkudWxlYjEyOCAweDIxCQkJCQkJCS51bGViMTI4 IDB4MjEKCS5zbGViMTI4IDQJCQkJCQkJLnNsZWIxMjggNAoJLnVsZWIxMjggMHgzZQkJCQkJCQku dWxlYjEyOCAweDNlCgkudWxlYjEyOCAweDIxCQkJCQkJCS51bGViMTI4IDB4MjEKCS5zbGViMTI4 IDUJCQkJCQkJLnNsZWIxMjggNQoJLnVsZWIxMjggMHg4OAkJCQkJCQkudWxlYjEyOCAweDg4Cgku dWxlYjEyOCAweDIxCQkJCQkJCS51bGViMTI4IDB4MjEKCS5zbGViMTI4IDQJCQkJCQkJLnNsZWIx MjggNAoJLnVsZWIxMjggMHgzCQkJCQkJCS51bGViMTI4IDB4MwoJLnVsZWIxMjggMHg4CQkJCQkJ CS51bGViMTI4IDB4OAoJLmJ5dGUJMAkJCQkJCQkuYnl0ZQkwCgkuYnl0ZQkwCQkJCQkJCS5ieXRl CTAKCS51bGViMTI4IDB4MwkJCQkJICAgICAgfAkJLnVsZWIxMjggMHgyCgkudWxlYjEyOCAweDUJ CQkJCQkJLnVsZWIxMjggMHg1CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS51bGViMTI4IDB4MwkJ CQkJCQkudWxlYjEyOCAweDMKCS51bGViMTI4IDB4ZQkJCQkJCQkudWxlYjEyOCAweGUKCS51bGVi MTI4IDB4NDkJCQkJCQkJLnVsZWIxMjggMHg0OQoJLnVsZWIxMjggMHgxMwkJCQkJCQkudWxlYjEy OCAweDEzCgkudWxlYjEyOCAweDIJCQkJCQkJLnVsZWIxMjggMHgyCgkudWxlYjEyOCAweDE3CQkJ CQkJCS51bGViMTI4IDB4MTcKCS5ieXRlCTAJCQkJCQkJLmJ5dGUJMAoJLmJ5dGUJMAkJCQkJCQku Ynl0ZQkwCgkJCQkJCQkgICAgICA+CQkudWxlYjEyOCAweDMKCQkJCQkJCSAgICAgID4JCS51bGVi MTI4IDB4MzQKCQkJCQkJCSAgICAgID4JCS5ieXRlCTAKCQkJCQkJCSAgICAgID4JCS51bGViMTI4 IDB4MwoJCQkJCQkJICAgICAgPgkJLnVsZWIxMjggMHhlCgkJCQkJCQkgICAgICA+CQkudWxlYjEy OCAweDQ5CgkJCQkJCQkgICAgICA+CQkudWxlYjEyOCAweDEzCgkJCQkJCQkgICAgICA+CQkuYnl0 ZQkwCgkJCQkJCQkgICAgICA+CQkuYnl0ZQkwCgkudWxlYjEyOCAweDQJCQkJCQkJLnVsZWIxMjgg MHg0CgkudWxlYjEyOCAweDExCQkJCQkJCS51bGViMTI4IDB4MTEKCS5ieXRlCTB4MQkJCQkJCQku Ynl0ZQkweDEKCS51bGViMTI4IDB4MjUJCQkJCQkJLnVsZWIxMjggMHgyNQoJLnVsZWIxMjggMHhl CQkJCQkJCS51bGViMTI4IDB4ZQoJLnVsZWIxMjggMHgxMwkJCQkJCQkudWxlYjEyOCAweDEzCgku dWxlYjEyOCAweGIJCQkJCQkJLnVsZWIxMjggMHhiCgkudWxlYjEyOCAweDMJCQkJCQkJLnVsZWIx MjggMHgzCgkudWxlYjEyOCAweDFmCQkJCQkJCS51bGViMTI4IDB4MWYKCS51bGViMTI4IDB4MWIJ CQkJCQkJLnVsZWIxMjggMHgxYgoJLnVsZWIxMjggMHgxZgkJCQkJCQkudWxlYjEyOCAweDFmCgku dWxlYjEyOCAweDU1CQkJCQkJCS51bGViMTI4IDB4NTUKCS51bGViMTI4IDB4MTcJCQkJCQkJLnVs ZWIxMjggMHgxNwoJLnVsZWIxMjggMHgxMQkJCQkJCQkudWxlYjEyOCAweDExCgkudWxlYjEyOCAw eDEJCQkJCQkJLnVsZWIxMjggMHgxCgkudWxlYjEyOCAweDEwCQkJCQkJCS51bGViMTI4IDB4MTAK CS51bGViMTI4IDB4MTcJCQkJCQkJLnVsZWIxMjggMHgxNwoJLmJ5dGUJMAkJCQkJCQkuYnl0ZQkw CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS51bGViMTI4IDB4NQkJCQkJCQkudWxlYjEyOCAweDUK CS51bGViMTI4IDB4MmUJCQkJCQkJLnVsZWIxMjggMHgyZQoJLmJ5dGUJMHgxCQkJCQkJCS5ieXRl CTB4MQoJLnVsZWIxMjggMHgzZgkJCQkJCQkudWxlYjEyOCAweDNmCgkudWxlYjEyOCAweDE5CQkJ CQkJCS51bGViMTI4IDB4MTkKCS51bGViMTI4IDB4MwkJCQkJCQkudWxlYjEyOCAweDMKCS51bGVi MTI4IDB4ZQkJCQkJCQkudWxlYjEyOCAweGUKCS51bGViMTI4IDB4MjcJCQkJCQkJLnVsZWIxMjgg MHgyNwoJLnVsZWIxMjggMHgxOQkJCQkJCQkudWxlYjEyOCAweDE5CgkudWxlYjEyOCAweDM0CQkJ CQkJCS51bGViMTI4IDB4MzQKCS51bGViMTI4IDB4MTkJCQkJCQkJLnVsZWIxMjggMHgxOQoJLnVs ZWIxMjggMHgxMQkJCQkJCQkudWxlYjEyOCAweDExCgkudWxlYjEyOCAweDEJCQkJCQkJLnVsZWIx MjggMHgxCgkudWxlYjEyOCAweDEyCQkJCQkJCS51bGViMTI4IDB4MTIKCS51bGViMTI4IDB4NwkJ CQkJCQkudWxlYjEyOCAweDcKCS51bGViMTI4IDB4NDAJCQkJCQkJLnVsZWIxMjggMHg0MAoJLnVs ZWIxMjggMHgxOAkJCQkJCQkudWxlYjEyOCAweDE4CgkudWxlYjEyOCAweDdhCQkJCQkJCS51bGVi MTI4IDB4N2EKCS51bGViMTI4IDB4MTkJCQkJCQkJLnVsZWIxMjggMHgxOQoJLnVsZWIxMjggMHgx CQkJCQkJCS51bGViMTI4IDB4MQoJLnVsZWIxMjggMHgxMwkJCQkJCQkudWxlYjEyOCAweDEzCgku Ynl0ZQkwCQkJCQkJCS5ieXRlCTAKCS5ieXRlCTAJCQkJCQkJLmJ5dGUJMAoJLnVsZWIxMjggMHg2 CQkJCQkJCS51bGViMTI4IDB4NgoJLnVsZWIxMjggMHg1CQkJCQkgICAgICB8CQkudWxlYjEyOCAw eDM0CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS51bGViMTI4IDB4MwkJCQkJCQkudWxlYjEyOCAw eDMKCS51bGViMTI4IDB4ZQkJCQkJCQkudWxlYjEyOCAweGUKCS51bGViMTI4IDB4NDkJCQkJCQkJ LnVsZWIxMjggMHg0OQoJLnVsZWIxMjggMHgxMwkJCQkJCQkudWxlYjEyOCAweDEzCgkudWxlYjEy OCAweDIJCQkJCQkJLnVsZWIxMjggMHgyCgkudWxlYjEyOCAweDE4CQkJCQkJCS51bGViMTI4IDB4 MTgKCS5ieXRlCTAJCQkJCQkJLmJ5dGUJMAoJLmJ5dGUJMAkJCQkJCQkuYnl0ZQkwCgkudWxlYjEy OCAweDcJCQkJCQkJLnVsZWIxMjggMHg3CgkudWxlYjEyOCAweGYJCQkJCQkJLnVsZWIxMjggMHhm CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS51bGViMTI4IDB4YgkJCQkJCQkudWxlYjEyOCAweGIK CS51bGViMTI4IDB4YgkJCQkJCQkudWxlYjEyOCAweGIKCS51bGViMTI4IDB4NDkJCQkJCQkJLnVs ZWIxMjggMHg0OQoJLnVsZWIxMjggMHgxMwkJCQkJCQkudWxlYjEyOCAweDEzCgkuYnl0ZQkwCQkJ CQkJCS5ieXRlCTAKCS5ieXRlCTAJCQkJCQkJLmJ5dGUJMAoJLnVsZWIxMjggMHg4CQkJCQkJCS51 bGViMTI4IDB4OAoJCQkJCQkJICAgICAgPgkJLnVsZWIxMjggMHgzNwoJCQkJCQkJICAgICAgPgkJ LmJ5dGUJMAoJCQkJCQkJICAgICAgPgkJLnVsZWIxMjggMHg0OQoJCQkJCQkJICAgICAgPgkJLnVs ZWIxMjggMHgxMwoJCQkJCQkJICAgICAgPgkJLmJ5dGUJMAoJCQkJCQkJICAgICAgPgkJLmJ5dGUJ MAoJCQkJCQkJICAgICAgPgkJLnVsZWIxMjggMHg5CgkudWxlYjEyOCAweDI0CQkJCQkJCS51bGVi MTI4IDB4MjQKCS5ieXRlCTAJCQkJCQkJLmJ5dGUJMAoJLnVsZWIxMjggMHhiCQkJCQkJCS51bGVi MTI4IDB4YgoJLnVsZWIxMjggMHhiCQkJCQkJCS51bGViMTI4IDB4YgoJLnVsZWIxMjggMHgzZQkJ CQkJCQkudWxlYjEyOCAweDNlCgkudWxlYjEyOCAweGIJCQkJCQkJLnVsZWIxMjggMHhiCgkudWxl YjEyOCAweDMJCQkJCQkJLnVsZWIxMjggMHgzCgkudWxlYjEyOCAweDgJCQkJCQkJLnVsZWIxMjgg MHg4CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS5ieXRlCTAJCQkJCQkJLmJ5dGUJMAoJLmJ5dGUJ MAkJCQkJCQkuYnl0ZQkwCgkuc2VjdGlvbgkuZGVidWdfbG9jbGlzdHMsIiIsQHByb2diaXRzCQkJ LnNlY3Rpb24JLmRlYnVnX2xvY2xpc3RzLCIiLEBwcm9nYml0cwoJLmxvbmcJLkxkZWJ1Z19sb2Mz LS5MZGVidWdfbG9jMgkJCQkubG9uZwkuTGRlYnVnX2xvYzMtLkxkZWJ1Z19sb2MyCi5MZGVidWdf bG9jMjoJCQkJCQkJLkxkZWJ1Z19sb2MyOgoJLnZhbHVlCTB4NQkJCQkJCQkudmFsdWUJMHg1Cgku Ynl0ZQkweDgJCQkJCQkJLmJ5dGUJMHg4CgkuYnl0ZQkwCQkJCQkJCS5ieXRlCTAKCS5sb25nCTAJ CQkJCQkJLmxvbmcJMAouTGRlYnVnX2xvYzA6CQkJCQkJCS5MZGVidWdfbG9jMDoKLkxMU1QwOgkJ CQkJCQkJLkxMU1QwOgoJLmJ5dGUJMHg4CQkJCQkJCS5ieXRlCTB4OAoJLnF1YWQJLkxWTDAJCQkJ CQkJLnF1YWQJLkxWTDAKCS51bGViMTI4IC5MVkwxLS5MVkwwCQkJCSAgICAgIHwJCS51bGViMTI4 IC5MVkwyLS5MVkwwCgkudWxlYjEyOCAweDEJCQkJCQkJLnVsZWIxMjggMHgxCgkuYnl0ZQkweDU1 CQkJCQkJCS5ieXRlCTB4NTUKCS5ieXRlCTAJCQkJCQkJLmJ5dGUJMAouTExTVDE6CQkJCQkJCQku TExTVDE6CgkuYnl0ZQkweDgJCQkJCQkJLmJ5dGUJMHg4CgkucXVhZAkuTFZMMAkJCQkJCQkucXVh ZAkuTFZMMAoJLnVsZWIxMjggLkxWTDItLkxWTDAJCQkJICAgICAgfAkJLnVsZWIxMjggLkxWTDMt LkxWTDAKCS51bGViMTI4IDB4MQkJCQkJCQkudWxlYjEyOCAweDEKCS5ieXRlCTB4NTQJCQkJCQkJ LmJ5dGUJMHg1NAoJLmJ5dGUJMAkJCQkJCQkuYnl0ZQkwCgkJCQkJCQkgICAgICA+CS5MTFNUMjoK CQkJCQkJCSAgICAgID4JCS5ieXRlCTB4OAoJCQkJCQkJICAgICAgPgkJLnF1YWQJLkxWTDAKCQkJ CQkJCSAgICAgID4JCS51bGViMTI4IC5MVkwxLS5MVkwwCgkJCQkJCQkgICAgICA+CQkudWxlYjEy OCAweDEKCQkJCQkJCSAgICAgID4JCS5ieXRlCTB4NTEKCQkJCQkJCSAgICAgID4JCS5ieXRlCTAK LkxkZWJ1Z19sb2MzOgkJCQkJCQkuTGRlYnVnX2xvYzM6Cgkuc2VjdGlvbgkuZGVidWdfYXJhbmdl cywiIixAcHJvZ2JpdHMJCQkuc2VjdGlvbgkuZGVidWdfYXJhbmdlcywiIixAcHJvZ2JpdHMKCS5s b25nCTB4MmMJCQkJCQkJLmxvbmcJMHgyYwoJLnZhbHVlCTB4MgkJCQkJCQkudmFsdWUJMHgyCgku bG9uZwkuTGRlYnVnX2luZm8wCQkJCQkJLmxvbmcJLkxkZWJ1Z19pbmZvMAoJLmJ5dGUJMHg4CQkJ CQkJCS5ieXRlCTB4OAoJLmJ5dGUJMAkJCQkJCQkuYnl0ZQkwCgkudmFsdWUJMAkJCQkJCQkudmFs dWUJMAoJLnZhbHVlCTAJCQkJCQkJLnZhbHVlCTAKCS5xdWFkCS5MRkIwCQkJCQkJCS5xdWFkCS5M RkIwCgkucXVhZAkuTEZFMC0uTEZCMAkJCQkJCS5xdWFkCS5MRkUwLS5MRkIwCgkucXVhZAkwCQkJ CQkJCS5xdWFkCTAKCS5xdWFkCTAJCQkJCQkJLnF1YWQJMAoJLnNlY3Rpb24JLmRlYnVnX3JuZ2xp c3RzLCIiLEBwcm9nYml0cwkJCS5zZWN0aW9uCS5kZWJ1Z19ybmdsaXN0cywiIixAcHJvZ2JpdHMK LkxkZWJ1Z19yYW5nZXMwOgkJCQkJCS5MZGVidWdfcmFuZ2VzMDoKCS5sb25nCS5MZGVidWdfcmFu Z2VzMy0uTGRlYnVnX3JhbmdlczIJCQkJLmxvbmcJLkxkZWJ1Z19yYW5nZXMzLS5MZGVidWdfcmFu Z2VzMgouTGRlYnVnX3JhbmdlczI6CQkJCQkJLkxkZWJ1Z19yYW5nZXMyOgoJLnZhbHVlCTB4NQkJ CQkJCQkudmFsdWUJMHg1CgkuYnl0ZQkweDgJCQkJCQkJLmJ5dGUJMHg4CgkuYnl0ZQkwCQkJCQkJ CS5ieXRlCTAKCS5sb25nCTAJCQkJCQkJLmxvbmcJMAouTExSTDI6CQkJCQkJCSAgICAgIHwJLkxM UkwzOgoJLmJ5dGUJMHg3CQkJCQkJCS5ieXRlCTB4NwoJLnF1YWQJLkxGQjAJCQkJCQkJLnF1YWQJ LkxGQjAKCS51bGViMTI4IC5MRkUwLS5MRkIwCQkJCQkJLnVsZWIxMjggLkxGRTAtLkxGQjAKCS5i eXRlCTAJCQkJCQkJLmJ5dGUJMAouTGRlYnVnX3JhbmdlczM6CQkJCQkJLkxkZWJ1Z19yYW5nZXMz OgoJLnNlY3Rpb24JLmRlYnVnX2xpbmUsIiIsQHByb2diaXRzCQkJLnNlY3Rpb24JLmRlYnVnX2xp bmUsIiIsQHByb2diaXRzCi5MZGVidWdfbGluZTA6CQkJCQkJCS5MZGVidWdfbGluZTA6Cgkuc2Vj dGlvbgkuZGVidWdfc3RyLCJNUyIsQHByb2diaXRzLDEJCQkuc2VjdGlvbgkuZGVidWdfc3RyLCJN UyIsQHByb2diaXRzLDEKLkxBU0YyOgkJCQkJCQkJLkxBU0YyOgoJLnN0cmluZwkicGFyYW0wIgkJ CQkJCS5zdHJpbmcJInBhcmFtMCIKLkxBU0YzOgkJCQkJCQkJLkxBU0YzOgoJLnN0cmluZwkicGFy YW0xIgkJCQkJCS5zdHJpbmcJInBhcmFtMSIKLkxBU0Y0OgkJCQkJCQkJLkxBU0Y0OgoJLnN0cmlu ZwkicGFyYW0yIgkJCQkJCS5zdHJpbmcJInBhcmFtMiIKLkxBU0Y4OgkJCQkJCQkgICAgICB8CS5M QVNGMTA6Cgkuc3RyaW5nCSJsb2FkZWRWYWx1ZTEiCQkJCQkJLnN0cmluZwkibG9hZGVkVmFsdWUx IgouTEFTRjc6CQkJCQkJCQkuTEFTRjc6Cgkuc3RyaW5nCSJsb2FkZWRWYWx1ZTIiCQkJCQkJLnN0 cmluZwkibG9hZGVkVmFsdWUyIgouTEFTRjEwOgkJCQkJCSAgICAgIHwJLkxBU0Y5OgoJLnN0cmlu ZwkiX1pOM2ZvbzNmb28xN2hkNzlkN2Y5NjVmNjFjMjllRSIJCQkuc3RyaW5nCSJfWk4zZm9vM2Zv bzE3aGQ3OWQ3Zjk2NWY2MWMyOWVFIgouTEFTRjU6CQkJCQkJCQkuTEFTRjU6Cgkuc3RyaW5nCSJs b2FkZWRWYWx1ZTQiCQkJCQkJLnN0cmluZwkibG9hZGVkVmFsdWU0IgouTEFTRjY6CQkJCQkJCQku TEFTRjY6Cgkuc3RyaW5nCSJsb2FkZWRWYWx1ZTMiCQkJCQkJLnN0cmluZwkibG9hZGVkVmFsdWUz IgouTEFTRjk6CQkJCQkJCSAgICAgIHwJLkxBU0Y4OgoJLmFzY2lpCSJsaWJnY2NqaXQgMTMuMC4w IDIwMjMwMTA3IChleHBlcmltZW50YWwpIC1mUAkJLmFzY2lpCSJsaWJnY2NqaXQgMTMuMC4wIDIw MjMwMTA3IChleHBlcmltZW50YWwpIC1mUAoJLmFzY2lpCSI9Z2VuZXJpYyAtbWFyY2g9eDg2LTY0 IC1mZXhjZXB0aW9ucyIJCQkuYXNjaWkJIj1nZW5lcmljIC1tYXJjaD14ODYtNjQgLWZleGNlcHRp b25zIgoJLnN0cmluZwkiIC1tYXNtPWludGVsIC1tc3NlMiAtbWF2eCAtbWF2eDIgLW1zaGEgLW1m bWEJCS5zdHJpbmcJIiAtbWFzbT1pbnRlbCAtbXNzZTIgLW1hdnggLW1hdngyIC1tc2hhIC1tZm1h Cgkuc2VjdGlvbgkuZGVidWdfbGluZV9zdHIsIk1TIixAcHJvZ2JpdHMsMQkJLnNlY3Rpb24JLmRl YnVnX2xpbmVfc3RyLCJNUyIsQHByb2diaXRzLDEKLkxBU0YwOgkJCQkJCQkgICAgICA8Cgkuc3Ry aW5nCSIvdG1wL2xpYmdjY2ppdC0yOWJaRmUvZmFrZS5jIgkJICAgICAgPAouTEFTRjE6CQkJCQkJ CQkuTEFTRjE6Cgkuc3RyaW5nCSIvaG9tZS9pbXBlcmlvL3J1c3QvcnVzdGNfY29kZWdlbl9nY2Mi CQkJLnN0cmluZwkiL2hvbWUvaW1wZXJpby9ydXN0L3J1c3RjX2NvZGVnZW5fZ2NjIgoJCQkJCQkJ ICAgICAgPgkuTEFTRjA6CgkJCQkJCQkgICAgICA+CQkuc3RyaW5nCSIvdG1wL2xpYmdjY2ppdC1E QnE2ZTAvZmFrZS5jIgoJLmlkZW50CSJHQ0M6IChHTlUpIDEzLjAuMCAyMDIzMDEwNyAoZXhwZXJp bWVudGFsKSIJCS5pZGVudAkiR0NDOiAoR05VKSAxMy4wLjAgMjAyMzAxMDcgKGV4cGVyaW1lbnRh bCkiCgkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCQkJLnNlY3Rpb24JLm5v dGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cwo= --0000000000004f602e06031b127d Content-Type: text/x-patch; charset="US-ASCII"; name="c.diff" Content-Disposition: attachment; filename="c.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_llexmmxk1 JCBkaWZmIC15IHJlc3RyaWN0LnMgbm90LXJlc3RyaWN0LnMKCS5maWxlCSJmb28uYyIJCQkJCQkJ LmZpbGUJImZvby5jIgoJLnRleHQJCQkJCQkJCS50ZXh0CgkucDJhbGlnbiA0CQkJCQkJCS5wMmFs aWduIDQKCS5nbG9ibAl0CQkJCQkJCS5nbG9ibAl0CgkudHlwZQl0LCBAZnVuY3Rpb24JCQkJCQku dHlwZQl0LCBAZnVuY3Rpb24KdDoJCQkJCQkJCXQ6Ci5MRkIwOgkJCQkJCQkJLkxGQjA6CgkuY2Zp X3N0YXJ0cHJvYwkJCQkJCQkuY2ZpX3N0YXJ0cHJvYwoJZW5kYnI2NAkJCQkJCQkJZW5kYnI2NAoJ bW92c2JsCSglcmR4KSwgJWVheAkJCQkJCW1vdnNibAkoJXJkeCksICVlYXgKCWFkZGwJJWVheCwg KCVyZGkpCQkJCQkJYWRkbAklZWF4LCAoJXJkaSkKCQkJCQkJCSAgICAgID4JCW1vdnNibAkoJXJk eCksICVlYXgKCWFkZGwJJWVheCwgKCVyc2kpCQkJCQkJYWRkbAklZWF4LCAoJXJzaSkKCXJldAkJ CQkJCQkJcmV0CgkuY2ZpX2VuZHByb2MJCQkJCQkJLmNmaV9lbmRwcm9jCi5MRkUwOgkJCQkJCQkJ LkxGRTA6Cgkuc2l6ZQl0LCAuLXQJCQkJCQkJLnNpemUJdCwgLi10CgkuaWRlbnQJIkdDQzogKFVi dW50dSAxMS40LjAtMXVidW50dTF+MjIuMDQpIDExLjQuMCIJCS5pZGVudAkiR0NDOiAoVWJ1bnR1 IDExLjQuMC0xdWJ1bnR1MX4yMi4wNCkgMTEuNC4wIgoJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNr LCIiLEBwcm9nYml0cwkJCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKCS5z ZWN0aW9uCS5ub3RlLmdudS5wcm9wZXJ0eSwiYSIJCQkJLnNlY3Rpb24JLm5vdGUuZ251LnByb3Bl cnR5LCJhIgoJLmFsaWduIDgJCQkJCQkJLmFsaWduIDgKCS5sb25nCTFmIC0gMGYJCQkJCQkJLmxv bmcJMWYgLSAwZgoJLmxvbmcJNGYgLSAxZgkJCQkJCQkubG9uZwk0ZiAtIDFmCgkubG9uZwk1CQkJ CQkJCS5sb25nCTUKMDoJCQkJCQkJCTA6Cgkuc3RyaW5nCSJHTlUiCQkJCQkJCS5zdHJpbmcJIkdO VSIKMToJCQkJCQkJCTE6CgkuYWxpZ24gOAkJCQkJCQkuYWxpZ24gOAoJLmxvbmcJMHhjMDAwMDAw MgkJCQkJCS5sb25nCTB4YzAwMDAwMDIKCS5sb25nCTNmIC0gMmYJCQkJCQkJLmxvbmcJM2YgLSAy ZgoyOgkJCQkJCQkJMjoKCS5sb25nCTB4MwkJCQkJCQkubG9uZwkweDMKMzoJCQkJCQkJCTM6Cgku YWxpZ24gOAkJCQkJCQkuYWxpZ24gOAo0OgkJCQkJCQkJNDoK --0000000000004f602e06031b127d Content-Type: text/x-patch; charset="US-ASCII"; name="0001-PATCH-Add-support-for-restrict-attribute-on-function.patch" Content-Disposition: attachment; filename="0001-PATCH-Add-support-for-restrict-attribute-on-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lleynb0p2 RnJvbSBmYjhlYzA2NjFiMzFlMDBjMzRhYzZjMzM2OGFiMjliMjgxYzAxOGRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21h aWwuY29tPgpEYXRlOiBGcmksIDExIEF1ZyAyMDIzIDIyOjQ4OjExICswMjAwClN1YmplY3Q6IFtQ QVRDSF0gW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgYHJlc3RyaWN0YCBhdHRyaWJ1dGUgb24gZnVu Y3Rpb24KIHBhcmFtZXRlcnMKCmdjYy9qaXQvQ2hhbmdlbG9nOgoJKiBqaXQtcGxheWJhY2suY2M6 IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCgkqIGppdC1wbGF5YmFjay5o OiBBZGQgZ2V0X3Jlc3RyaWN0IG1ldGhvZC4KCSogaml0LXJlY29yZGluZy5jYzogQWRkIGdldF9y ZXN0cmljdCBtZXRob2RzLgoJKiBqaXQtcmVjb3JkaW5nLmg6IEFkZCBnZXRfcmVzdHJpY3QgbWV0 aG9kcy4KCSogbGliZ2Njaml0KysuaDogQWRkIGdldF9yZXN0cmljdCBtZXRob2RzLgoJKiBsaWJn Y2NqaXQuY2M6IEFkZCBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LgoJKiBsaWJnY2NqaXQuaDog RGVjbGFyZSBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LgoJKiBsaWJnY2NqaXQubWFwOiBEZWNs YXJlIGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoK CSogaml0LmRnL3Rlc3QtcmVzdHJpY3QuYzogQWRkIHRlc3QgZm9yIF9fcmVzdHJpY3RfXyBhdHRy aWJ1dGUuCgkqIGppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaDogQWRkIHRlc3QtcmVzdHJp Y3QuYyB0byB0aGUgbGlzdC4KCmdjYy9qaXQvQ2hhbmdlTG9nOgoJKiBkb2NzL3RvcGljcy9jb21w YXRpYmlsaXR5LnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIExJQkdDQ0pJVF9BQklfMzQuCgkq IGRvY3MvdG9waWNzL3R5cGVzLnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIGdjY19qaXRfdHlw ZV9nZXRfcmVzdHJpY3QuCgpTaWduZWQtb2ZmLWJ5OiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVt ZTEuZ29tZXpAZ21haWwuY29tPgotLS0KIGdjYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0 eS5yc3QgICAgICAgIHwgIDcgKysKIGdjYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0ICAgICAg ICAgICAgICAgIHwgMTIgKysrCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5jYyAgICAgICAgICAgICAg ICAgICAgICB8ICAyICstCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAg ICAgICB8ICA1ICsrCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MgICAgICAgICAgICAgICAgICAg ICB8IDQ3ICsrKysrKysrKysrKwogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAgICAg ICAgICAgICAgfCAzOSArKysrKysrKystCiBnY2Mvaml0L2xpYmdjY2ppdCsrLmggICAgICAgICAg ICAgICAgICAgICAgICB8ICA2ICsrCiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAgICAgICAgICAgICAg ICAgICAgICAgICB8IDE0ICsrKysKIGdjYy9qaXQvbGliZ2Njaml0LmggICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDkgKysrCiBnY2Mvaml0L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAg ICAgICAgICB8ICA1ICsrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVz dHMuaCB8ICAzICsKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QuYyAgICAgICAg IHwgNzcgKysrKysrKysrKysrKysrKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDIyMyBpbnNlcnRp b25zKCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtcmVzdHJpY3QuYwoKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3Mv Y29tcGF0aWJpbGl0eS5yc3QgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0 CmluZGV4IDI3ODQ1ZWE5YTg0Li44NjZjZjAwODEyOCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2Nz L3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBh dGliaWxpdHkucnN0CkBAIC0zNzEsMyArMzcxLDEwIEBAIGFsaWdubWVudCBvZiBhIHZhcmlhYmxl OgogCiAgICogOmZ1bmM6YGdjY19qaXRfbHZhbHVlX3NldF9hbGlnbm1lbnRgCiAgICogOmZ1bmM6 YGdjY19qaXRfbHZhbHVlX2dldF9hbGlnbm1lbnRgCisKKy4uIF9MSUJHQ0NKSVRfQUJJXzM0Ogor CitgYExJQkdDQ0pJVF9BQklfMzRgYAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BgTElCR0NDSklU X0FCSV8zNGBgIGNvdmVycyB0aGUgYWRkaXRpb24gb2YKKzpmdW5jOmBnY2Nfaml0X3R5cGVfZ2V0 X3Jlc3RyaWN0YApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QgYi9n Y2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdAppbmRleCA0NTdiMzYyM2VjOS4uOGE2MmJjNTli YmIgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0CisrKyBiL2djYy9q aXQvZG9jcy90b3BpY3MvdHlwZXMucnN0CkBAIC01NDEsMyArNTQxLDE1IEBAIFJlZmxlY3Rpb24g QVBJCiAgICAuLiBjb2RlLWJsb2NrOjogYwogCiAgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVf U0laRURfSU5URUdFUlMKKworLi4gZnVuY3Rpb246OiAgZ2NjX2ppdF90eXBlICpcCisgICAgICAg ICAgICAgICBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0IChnY2Nfaml0X3R5cGUgKnR5cGUpCisK KyAgICAgR2l2ZW4gdHlwZSAiVCIsIGdldCB0eXBlICJyZXN0cmljdCBUIi4KKworICAgVGhpcyBl bnRyeXBvaW50IHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRfQUJJXzM0YDsgeW91IGNhbiB0 ZXN0IGZvcgorICAgaXRzIHByZXNlbmNlIHVzaW5nCisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisK KyAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0CmRp ZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYyBiL2djYy9qaXQvaml0LXBsYXliYWNr LmNjCmluZGV4IDg4ZTFiMjEyMDMwLi4wZWI0ZTk0ZmRjNCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9q aXQtcGxheWJhY2suY2MKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKQEAgLTM3OTMsNyAr Mzc5Myw3IEBAIGlmICh0KSBcCiAgIE5BTUVfVFlQRSAoY29tcGxleF9mbG9hdF90eXBlX25vZGUs ICJjb21wbGV4IGZsb2F0Iik7CiAgIE5BTUVfVFlQRSAoY29tcGxleF9kb3VibGVfdHlwZV9ub2Rl LCAiY29tcGxleCBkb3VibGUiKTsKICAgTkFNRV9UWVBFIChjb21wbGV4X2xvbmdfZG91YmxlX3R5 cGVfbm9kZSwgImNvbXBsZXggbG9uZyBkb3VibGUiKTsKLSAgCisKICAgbV9jb25zdF9jaGFyX3B0 ciA9IGJ1aWxkX3BvaW50ZXJfdHlwZSgKICAgICBidWlsZF9xdWFsaWZpZWRfdHlwZSAoY2hhcl90 eXBlX25vZGUsIFRZUEVfUVVBTF9DT05TVCkpOwogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1w bGF5YmFjay5oIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAppbmRleCBkMTUzZjQ5NDVkOC4uZmI0 ZjdiOGI2NWIgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNrLmgKKysrIGIvZ2NjL2pp dC9qaXQtcGxheWJhY2suaApAQCAtNDkwLDYgKzQ5MCwxMSBAQCBwdWJsaWM6CiAgICAgcmV0dXJu IG5ldyB0eXBlIChidWlsZF9xdWFsaWZpZWRfdHlwZSAobV9pbm5lciwgVFlQRV9RVUFMX1ZPTEFU SUxFKSk7CiAgIH0KIAorICB0eXBlICpnZXRfcmVzdHJpY3QgKCkgY29uc3QKKyAgeworICAgIHJl dHVybiBuZXcgdHlwZSAoYnVpbGRfcXVhbGlmaWVkX3R5cGUgKG1faW5uZXIsIFRZUEVfUVVBTF9S RVNUUklDVCkpOworICB9CisKICAgdHlwZSAqZ2V0X2FsaWduZWQgKHNpemVfdCBhbGlnbm1lbnRf aW5fYnl0ZXMpIGNvbnN0OwogICB0eXBlICpnZXRfdmVjdG9yIChzaXplX3QgbnVtX3VuaXRzKSBj b25zdDsKIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2ppdC9q aXQtcmVjb3JkaW5nLmNjCmluZGV4IGY5NjJjOTc0OGM0Li5mMWFjODA4NDUyMiAxMDA2NDQKLS0t IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5j YwpAQCAtMjM4MCw2ICsyMzgwLDE5IEBAIHJlY29yZGluZzo6dHlwZTo6Z2V0X2NvbnN0ICgpCiAg IHJldHVybiByZXN1bHQ7CiB9CiAKKy8qIEdpdmVuIGEgdHlwZSBULCBnZXQgdGhlIHR5cGUgcmVz dHJpY3QgVC4KKworICAgSW1wbGVtZW50cyB0aGUgcG9zdC1lcnJvci1jaGVja2luZyBwYXJ0IG9m CisgICBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LiAgKi8KKworcmVjb3JkaW5nOjp0eXBlICoK K3JlY29yZGluZzo6dHlwZTo6Z2V0X3Jlc3RyaWN0ICgpCit7CisgIHJlY29yZGluZzo6dHlwZSAq cmVzdWx0ID0gbmV3IG1lbWVudG9fb2ZfZ2V0X3Jlc3RyaWN0ICh0aGlzKTsKKyAgbV9jdHh0LT5y ZWNvcmQgKHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKIC8qIEdpdmVuIGEgdHlwZSBU LCBnZXQgdGhlIHR5cGUgdm9sYXRpbGUgVC4KIAogICAgSW1wbGVtZW50cyB0aGUgcG9zdC1lcnJv ci1jaGVja2luZyBwYXJ0IG9mCkBAIC0zMDkwLDYgKzMxMDMsNDAgQEAgcmVjb3JkaW5nOjptZW1l bnRvX29mX2dldF92b2xhdGlsZTo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIAkg ICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fb3RoZXJfdHlwZSkpOwogfQogCisvKiBUaGUg aW1wbGVtZW50YXRpb24gb2YgY2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6bWVtZW50b19vZl9n ZXRfcmVzdHJpY3QuICAqLworCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9v ayByZWNvcmRpbmc6Om1lbWVudG86OnJlcGxheV9pbnRvCisgICBmb3IgcmVjb3JkaW5nOjptZW1l bnRvX29mX2dldF9yZXN0cmljdC4gICovCisKK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19vZl9n ZXRfcmVzdHJpY3Q6OnJlcGxheV9pbnRvIChyZXBsYXllciAqKQoreworICBzZXRfcGxheWJhY2tf b2JqIChtX290aGVyX3R5cGUtPnBsYXliYWNrX3R5cGUgKCktPmdldF9yZXN0cmljdCAoKSk7Cit9 CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHJlY29yZGluZzo6bWVtZW50bzo6bWFrZV9kZWJ1Z19z dHJpbmcgZm9yCisgICByZXN1bHRzIG9mIGdldF9yZXN0cmljdCwgcHJlcGVuZGluZyAicmVzdHJp Y3QgIi4gICovCisKK3JlY29yZGluZzo6c3RyaW5nICoKK3JlY29yZGluZzo6bWVtZW50b19vZl9n ZXRfcmVzdHJpY3Q6Om1ha2VfZGVidWdfc3RyaW5nICgpCit7CisgIHJldHVybiBzdHJpbmc6OmZy b21fcHJpbnRmIChtX2N0eHQsCisJCQkgICAgICAicmVzdHJpY3QgJXMiLCBtX290aGVyX3R5cGUt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiByZWNvcmRp bmc6Om1lbWVudG86OndyaXRlX3JlcHJvZHVjZXIgZm9yIHJlc3RyaWN0CisgICB0eXBlcy4gICov CisKK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19vZl9nZXRfcmVzdHJpY3Q6OndyaXRlX3JlcHJv ZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7CisgIGNvbnN0IGNoYXIgKmlkID0gci5tYWtlX2lkZW50 aWZpZXIgKHRoaXMsICJ0eXBlIik7CisgIHIud3JpdGUgKCIgIGdjY19qaXRfdHlwZSAqJXMgPVxu IgorCSAgICIgICAgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCAoJXMpO1xuIiwKKwkgICBpZCwK KwkgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fb3RoZXJfdHlwZSkpOworfQorCiAvKiBU aGUgaW1wbGVtZW50YXRpb24gb2YgY2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6bWVtZW50b19v Zl9nZXRfYWxpZ25lZC4gICovCiAKIC8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBo b29rIHJlY29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KZGlmZiAtLWdpdCBhL2djYy9qaXQv aml0LXJlY29yZGluZy5oIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKaW5kZXggOTI5YmJlMzdj M2YuLjBmMjBiYmFjZmYyIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAorKysg Yi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaApAQCAtNTU1LDYgKzU1NSw3IEBAIHB1YmxpYzoKICAg dHlwZSAqZ2V0X3BvaW50ZXIgKCk7CiAgIHR5cGUgKmdldF9jb25zdCAoKTsKICAgdHlwZSAqZ2V0 X3ZvbGF0aWxlICgpOworICB0eXBlICpnZXRfcmVzdHJpY3QgKCk7CiAgIHR5cGUgKmdldF9hbGln bmVkIChzaXplX3QgYWxpZ25tZW50X2luX2J5dGVzKTsKICAgdHlwZSAqZ2V0X3ZlY3RvciAoc2l6 ZV90IG51bV91bml0cyk7CiAKQEAgLTYwMyw2ICs2MDQsNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwg Ym9vbCBpc19ib29sICgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB0eXBlICppc19wb2ludGVyICgp ID0gMDsKICAgdmlydHVhbCB0eXBlICppc192b2xhdGlsZSAoKSB7IHJldHVybiBOVUxMOyB9Cisg IHZpcnR1YWwgdHlwZSAqaXNfcmVzdHJpY3QgKCkgeyByZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFs IHR5cGUgKmlzX2NvbnN0ICgpIHsgcmV0dXJuIE5VTEw7IH0KICAgdmlydHVhbCB0eXBlICppc19h cnJheSAoKSA9IDA7CiAgIHZpcnR1YWwgc3RydWN0XyAqaXNfc3RydWN0ICgpIHsgcmV0dXJuIE5V TEw7IH0KQEAgLTczNyw3ICs3MzksNyBAQCBwcml2YXRlOgogfTsKIAogLyogQSBkZWNvcmF0ZWQg dmVyc2lvbiBvZiBhIHR5cGUsIGZvciBnZXRfY29uc3QsIGdldF92b2xhdGlsZSwKLSAgIGdldF9h bGlnbmVkLCBhbmQgZ2V0X3ZlY3Rvci4gICovCisgICBnZXRfYWxpZ25lZCwgZ2V0X3Jlc3RyaWN0 LCBhbmQgZ2V0X3ZlY3Rvci4gICovCiAKIGNsYXNzIGRlY29yYXRlZF90eXBlIDogcHVibGljIHR5 cGUKIHsKQEAgLTgxMCw3ICs4MTIsNyBAQCBwdWJsaWM6CiAgICAgcmV0dXJuIG1fb3RoZXJfdHlw ZS0+aXNfc2FtZV90eXBlX2FzIChvdGhlci0+aXNfdm9sYXRpbGUgKCkpOwogICB9CiAKLSAgdHlw ZSogY29weShjb250ZXh0KiBjdHh0KSBmaW5hbCBvdmVycmlkZQorICB0eXBlKiBjb3B5IChjb250 ZXh0KiBjdHh0KSBmaW5hbCBvdmVycmlkZQogICB7CiAgICAgdHlwZSogcmVzdWx0ID0gbmV3IG1l bWVudG9fb2ZfZ2V0X3ZvbGF0aWxlIChtX290aGVyX3R5cGUtPmNvcHkgKGN0eHQpKTsKICAgICBj dHh0LT5yZWNvcmQgKHJlc3VsdCk7CkBAIC04MjksNiArODMxLDM5IEBAIHByaXZhdGU6CiAgIHZv aWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgZmluYWwgb3ZlcnJpZGU7CiB9Owog CisvKiBSZXN1bHQgb2YgImdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QiLiAgKi8KK2NsYXNzIG1l bWVudG9fb2ZfZ2V0X3Jlc3RyaWN0IDogcHVibGljIGRlY29yYXRlZF90eXBlCit7CitwdWJsaWM6 CisgIG1lbWVudG9fb2ZfZ2V0X3Jlc3RyaWN0ICh0eXBlICpvdGhlcl90eXBlKQorICA6IGRlY29y YXRlZF90eXBlIChvdGhlcl90eXBlKSB7fQorCisgIGJvb2wgaXNfc2FtZV90eXBlX2FzICh0eXBl ICpvdGhlcikgZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIGlmICghb3RoZXItPmlzX3Jlc3RyaWN0 ICgpKQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX290aGVyX3R5cGUtPmlzX3Nh bWVfdHlwZV9hcyAob3RoZXItPmlzX3Jlc3RyaWN0ICgpKTsKKyAgfQorCisgIHR5cGUqIGNvcHkg KGNvbnRleHQqIGN0eHQpIGZpbmFsIG92ZXJyaWRlCisgIHsKKyAgICB0eXBlKiByZXN1bHQgPSBu ZXcgbWVtZW50b19vZl9nZXRfcmVzdHJpY3QgKG1fb3RoZXJfdHlwZS0+Y29weSAoY3R4dCkpOwor ICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAg LyogU3RyaXAgb2ZmIHRoZSAicmVzdHJpY3QiLCBnaXZpbmcgdGhlIHVuZGVybHlpbmcgdHlwZS4g ICovCisgIHR5cGUgKnVucXVhbGlmaWVkICgpIGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIG1fb3Ro ZXJfdHlwZTsgfQorCisgIHR5cGUgKmlzX3Jlc3RyaWN0ICgpIGZpbmFsIG92ZXJyaWRlIHsgcmV0 dXJuIG1fb3RoZXJfdHlwZTsgfQorCisgIHZvaWQgcmVwbGF5X2ludG8gKHJlcGxheWVyICopIGZp bmFsIG92ZXJyaWRlOworCitwcml2YXRlOgorICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmluZyAo KSBmaW5hbCBvdmVycmlkZTsKKyAgdm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZy KSBmaW5hbCBvdmVycmlkZTsKK307CisKIC8qIFJlc3VsdCBvZiAiZ2NjX2ppdF90eXBlX2dldF9h bGlnbmVkIi4gICovCiBjbGFzcyBtZW1lbnRvX29mX2dldF9hbGlnbmVkIDogcHVibGljIGRlY29y YXRlZF90eXBlCiB7CmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmggYi9nY2Mvaml0 L2xpYmdjY2ppdCsrLmgKaW5kZXggNGI4OGU4NzdiYzkuLmI0MzBmN2ViMDQ5IDEwMDY0NAotLS0g YS9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCkBAIC0x NDEwLDYgKzE0MTAsMTIgQEAgdHlwZTo6Z2V0X2NvbnN0ICgpCiAgIHJldHVybiB0eXBlIChnY2Nf aml0X3R5cGVfZ2V0X2NvbnN0IChnZXRfaW5uZXJfdHlwZSAoKSkpOwogfQogCitpbmxpbmUgdHlw ZQordHlwZTo6Z2V0X3Jlc3RyaWN0ICgpCit7CisgIHJldHVybiB0eXBlIChnY2Nfaml0X3R5cGVf Z2V0X3Jlc3RyaWN0IChnZXRfaW5uZXJfdHlwZSAoKSkpOworfQorCiBpbmxpbmUgdHlwZQogdHlw ZTo6Z2V0X3ZvbGF0aWxlICgpCiB7CmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5jYyBi L2djYy9qaXQvbGliZ2Njaml0LmNjCmluZGV4IDA1MGU2OGI3MzhjLi45Yjg3ZTA1NjlkNiAxMDA2 NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQuY2MKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuY2MK QEAgLTUzOSw2ICs1MzksMjAgQEAgZ2NjX2ppdF90eXBlX2dldF92b2xhdGlsZSAoZ2NjX2ppdF90 eXBlICp0eXBlKQogICByZXR1cm4gKGdjY19qaXRfdHlwZSAqKXR5cGUtPmdldF92b2xhdGlsZSAo KTsKIH0KIAorLyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Nj aml0LmguCisKKyAgIEFmdGVyIGVycm9yLWNoZWNraW5nLCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUg YnkgdGhlCisgICBnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBlOjpnZXRfcmVzdHJpY3QgbWV0aG9k LCBpbgorICAgaml0LXJlY29yZGluZy5jYy4gICovCisKK2djY19qaXRfdHlwZSAqCitnY2Nfaml0 X3R5cGVfZ2V0X3Jlc3RyaWN0IChnY2Nfaml0X3R5cGUgKnR5cGUpCit7CisgIFJFVFVSTl9OVUxM X0lGX0ZBSUwgKHR5cGUsIE5VTEwsIE5VTEwsICJOVUxMIHR5cGUiKTsKKworICByZXR1cm4gKGdj Y19qaXRfdHlwZSAqKXR5cGUtPmdldF9yZXN0cmljdCAoKTsKK30KKwogLyogUHVibGljIGVudHJ5 cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAKICAgIEFmdGVyIGVycm9y LWNoZWNraW5nLCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCmRpZmYgLS1naXQgYS9nY2Mv aml0L2xpYmdjY2ppdC5oIGIvZ2NjL2ppdC9saWJnY2NqaXQuaAppbmRleCA2MGVhZjM5YmZmNi4u MGIwMGYwZDE0OTMgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmgKKysrIGIvZ2NjL2pp dC9saWJnY2NqaXQuaApAQCAtNjM1LDYgKzYzNSwxNSBAQCBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0 IChnY2Nfaml0X3R5cGUgKnR5cGUpOwogZXh0ZXJuIGdjY19qaXRfdHlwZSAqCiBnY2Nfaml0X3R5 cGVfZ2V0X3ZvbGF0aWxlIChnY2Nfaml0X3R5cGUgKnR5cGUpOwogCisjZGVmaW5lIExJQkdDQ0pJ VF9IQVZFX2djY19qaXRfdHlwZV9nZXRfc2l6ZQorCisvKiBHaXZlbiB0eXBlICJUIiwgZ2V0IHR5 cGUgInJlc3RyaWN0IFQiLgorICAgVGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElC R0NDSklUX0FCSV8zNDsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNlIHVzaW5nCisg ICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X3R5cGVfZ2V0X3NpemUgICovCitleHRl cm4gZ2NjX2ppdF90eXBlICoKK2djY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QgKGdjY19qaXRfdHlw ZSAqdHlwZSk7CisKICNkZWZpbmUgTElCR0NDSklUX0hBVkVfU0laRURfSU5URUdFUlMKIAogLyog R2l2ZW4gdHlwZXMgTFRZUEUgYW5kIFJUWVBFLCByZXR1cm4gbm9uLXplcm8gaWYgdGhleSBhcmUg Y29tcGF0aWJsZS4KZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcCBiL2djYy9qaXQv bGliZ2Njaml0Lm1hcAppbmRleCBlNTJkZTAwNTdhNS4uY2M2MjIxNjQxMmIgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvbGliZ2Njaml0Lm1hcAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKQEAgLTMy NiwzICszMjYsOCBAQCBMSUJHQ0NKSVRfQUJJXzMzIHsKICAgICBnY2Nfaml0X3RhcmdldF9pbmZv X2FyY2g7CiAgICAgZ2NjX2ppdF90YXJnZXRfaW5mb19zdXBwb3J0c18xMjhiaXRfaW50OwogfSBM SUJHQ0NKSVRfQUJJXzMyOworCitMSUJHQ0NKSVRfQUJJXzM0IHsKKyAgZ2xvYmFsOgorICAgIGdj Y19qaXRfdHlwZV9nZXRfcmVzdHJpY3Q7Cit9IExJQkdDQ0pJVF9BQklfMzM7CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0 c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4IDk4OGUxNGFlOWJjLi45 ODc1Y2JlNjIzYyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWls aW5nLXRlc3RzLmgKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRl c3RzLmgKQEAgLTMxMyw2ICszMTMsOSBAQAogI3VuZGVmIGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVy aWZ5X2NvZGUKIAorLyogdGVzdC1yZXN0cmljdC5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0 Y2FzZXMgYXJyYXkgYXMgaXQgbmVlZHMKKyAgIHRoZSBgLU8zYCBmbGFnLiAgKi8KKwogLyogdGVz dC1yZWdpc3Rlci12YXJpYWJsZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJy YXkgYXMgaXQKICAgIGlzIHRhcmdldC1zcGVjaWZpYy4gICovCiAKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rl c3QtcmVzdHJpY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTZh Yzk2MzI0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXJl c3RyaWN0LmMKQEAgLTAsMCArMSw3NyBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4 Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKy8qIFdlIGRvbid0IHdhbnQgc2V0X29wdGlv bnMoKSBpbiBoYXJuZXNzLmggdG8gc2V0IC1PMyB0byBzZWUgdGhhdCB0aGUgcmVzdHJpY3QKKwkg YXR0cmlidXRlIGFmZmVjdHMgdGhlIG9wdGltaXphdGlvbnMuICovCisjZGVmaW5lIFRFU1RfRVND SEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29udGV4 dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7CisJLy8gU2V0ICItTzMiLgorCWdjY19qaXRf Y29udGV4dF9zZXRfaW50X29wdGlvbihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFU SU9OX0xFVkVMLCAzKTsKK30KKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVm aW5lIE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZp bmUgT1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRlc3QtcmVzdHJpY3QuYy5zIgorI2luY2x1 ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4 dCwgdm9pZCAqdXNlcl9kYXRhKQoreworCS8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2 YWxlbnQgb2Y6Cit2b2lkIHQoaW50ICpfX3Jlc3RyaWN0X18gYSwgaW50ICpfX3Jlc3RyaWN0X18g YiwgY2hhciAqX19yZXN0cmljdF9fIGMpIHsKKwkqYSArPSAqYzsKKwkqYiArPSAqYzsKK30KKwkq LworCWdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorCQlnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUg KGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCWdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2Nj X2ppdF90eXBlX2dldF9wb2ludGVyKGludF90eXBlKTsKKwlnY2Nfaml0X3R5cGUgKnBpbnRfcmVz dHJpY3RfdHlwZSA9IGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QocGludF90eXBlKTsKKworCWdj Y19qaXRfdHlwZSAqdm9pZF90eXBlID0KKwkJZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0 LCBHQ0NfSklUX1RZUEVfVk9JRCk7CisKKwlnY2Nfaml0X3BhcmFtICphID0KKwkJZ2NjX2ppdF9j b250ZXh0X25ld19wYXJhbSAoY3R4dCwgTlVMTCwgcGludF9yZXN0cmljdF90eXBlLCAiYSIpOwor CWdjY19qaXRfcGFyYW0gKmIgPQorCQlnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBO VUxMLCBwaW50X3Jlc3RyaWN0X3R5cGUsICJiIik7CisJZ2NjX2ppdF9wYXJhbSAqYyA9CisJCWdj Y19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIE5VTEwsIHBpbnRfcmVzdHJpY3RfdHlwZSwg ImMiKTsKKwlnY2Nfaml0X3BhcmFtICpwYXJhbXNbM10gPSB7YSwgYiwgY307CisKKwlnY2Nfaml0 X2Z1bmN0aW9uICpmdW5jX3QgPQorCQlnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0 LCBOVUxMLAorCQkJCQlHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCQl2b2lkX3R5cGUs CisJCQkJCSJ0IiwKKwkJCQkJMywgcGFyYW1zLAorCQkJCQkwKTsKKworCWdjY19qaXRfYmxvY2sg KmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmNfdCwgTlVMTCk7CisKKwkv KiAqYSArPSAqYzsgKi8KKwlnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKwkJYmxv Y2ssIE5VTEwsCisJCWdjY19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlIChnY2Nfaml0X3BhcmFtX2Fz X3J2YWx1ZSAoYSksIE5VTEwpLAorCQlHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorCQlnY2Nfaml0 X2x2YWx1ZV9hc19ydmFsdWUgKAorCQkJZ2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2UgKGdjY19q aXRfcGFyYW1fYXNfcnZhbHVlIChjKSwgTlVMTCkpKTsKKwkvKiAqYiArPSAqYzsgKi8KKwlnY2Nf aml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKwkJYmxvY2ssIE5VTEwsCisJCWdjY19qaXRf cnZhbHVlX2RlcmVmZXJlbmNlIChnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYiksIE5VTEwpLAor CQlHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAor CQkJZ2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2UgKGdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChj KSwgTlVMTCkpKTsKKworCWdjY19qaXRfYmxvY2tfZW5kX3dpdGhfdm9pZF9yZXR1cm4gKGJsb2Nr LCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0cHV0LWZpbGUtd2Fz LWNyZWF0ZWQgIiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXIt b3V0cHV0ICJhZGRsCSVlYXgsICglcmRpKQorCWFkZGwJJWVheCwgKCVyc2kpIiB9IH0gKi8KLS0g CjIuMzQuMQoK --0000000000004f602e06031b127d--