From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32999) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YFsXd-0008It-BH for qemu-devel@nongnu.org; Mon, 26 Jan 2015 17:53:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YFsXZ-0000xx-6k for qemu-devel@nongnu.org; Mon, 26 Jan 2015 17:53:57 -0500 Received: from mail-qc0-f170.google.com ([209.85.216.170]:56827) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YFsXZ-0000xt-18 for qemu-devel@nongnu.org; Mon, 26 Jan 2015 17:53:53 -0500 Received: by mail-qc0-f170.google.com with SMTP id p6so9534445qcv.1 for ; Mon, 26 Jan 2015 14:53:52 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <1422037228-5363-11-git-send-email-peter.maydell@linaro.org> References: <1422037228-5363-1-git-send-email-peter.maydell@linaro.org> <1422037228-5363-11-git-send-email-peter.maydell@linaro.org> Date: Mon, 26 Jan 2015 16:53:52 -0600 Message-ID: From: Greg Bellows Content-Type: multipart/alternative; boundary=047d7b5d430e24337a050d9603e1 Subject: Re: [Qemu-devel] [PATCH 10/11] target-arm: Reindent ancient page-table-walk code List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: "Edgar E. Iglesias" , Andrew Jones , =?UTF-8?B?QWxleCBCZW5uw6ll?= , QEMU Developers , Patch Tracking --047d7b5d430e24337a050d9603e1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Fri, Jan 23, 2015 at 12:20 PM, Peter Maydell wrote: > A few of the oldest parts of the page-table-walk code have broken indent > (either hardcoded tabs or two-spaces). Reindent these sections. > > For ease of review, this patch does not touch the brace style and > so is a whitespace-only change. > > Signed-off-by: Peter Maydell > --- > target-arm/helper.c | 192 > ++++++++++++++++++++++++++-------------------------- > 1 file changed, 96 insertions(+), 96 deletions(-) > > diff --git a/target-arm/helper.c b/target-arm/helper.c > index 0a06bbe..3a23af8 100644 > --- a/target-arm/helper.c > +++ b/target-arm/helper.c > @@ -4636,55 +4636,55 @@ static inline int check_ap(CPUARMState *env, > ARMMMUIdx mmu_idx, > int ap, int domain_prot, > int access_type) > { > - int prot_ro; > - bool is_user =3D regime_is_user(env, mmu_idx); > - > - if (domain_prot =3D=3D 3) { > - return PAGE_READ | PAGE_WRITE; > - } > - > - if (access_type =3D=3D 1) > - prot_ro =3D 0; > - else > - prot_ro =3D PAGE_READ; > - > - switch (ap) { > - case 0: > - if (arm_feature(env, ARM_FEATURE_V7)) { > - return 0; > - } > - if (access_type =3D=3D 1) > - return 0; > - switch (regime_sctlr(env, mmu_idx) & (SCTLR_S | SCTLR_R)) { > - case SCTLR_S: > - return is_user ? 0 : PAGE_READ; > - case SCTLR_R: > - return PAGE_READ; > - default: > - return 0; > - } > - case 1: > - return is_user ? 0 : PAGE_READ | PAGE_WRITE; > - case 2: > - if (is_user) > - return prot_ro; > - else > - return PAGE_READ | PAGE_WRITE; > - case 3: > - return PAGE_READ | PAGE_WRITE; > - case 4: /* Reserved. */ > - return 0; > - case 5: > - return is_user ? 0 : prot_ro; > - case 6: > - return prot_ro; > - case 7: > - if (!arm_feature (env, ARM_FEATURE_V6K)) > - return 0; > - return prot_ro; > - default: > - abort(); > - } > + int prot_ro; > + bool is_user =3D regime_is_user(env, mmu_idx); > + > + if (domain_prot =3D=3D 3) { > + return PAGE_READ | PAGE_WRITE; > + } > + > + if (access_type =3D=3D 1) > + prot_ro =3D 0; > + else > + prot_ro =3D PAGE_READ; > + > + switch (ap) { > + case 0: > + if (arm_feature(env, ARM_FEATURE_V7)) { > + return 0; > + } > + if (access_type =3D=3D 1) > + return 0; > + switch (regime_sctlr(env, mmu_idx) & (SCTLR_S | SCTLR_R)) { > + case SCTLR_S: > + return is_user ? 0 : PAGE_READ; > + case SCTLR_R: > + return PAGE_READ; > + default: > + return 0; > + } > + case 1: > + return is_user ? 0 : PAGE_READ | PAGE_WRITE; > + case 2: > + if (is_user) > + return prot_ro; > + else > + return PAGE_READ | PAGE_WRITE; > + case 3: > + return PAGE_READ | PAGE_WRITE; > + case 4: /* Reserved. */ > + return 0; > + case 5: > + return is_user ? 0 : prot_ro; > + case 6: > + return prot_ro; > + case 7: > + if (!arm_feature (env, ARM_FEATURE_V6K)) > + return 0; > + return prot_ro; > + default: > + abort(); > + } > } > > static bool get_level1_table_address(CPUARMState *env, ARMMMUIdx mmu_idx= , > @@ -4762,13 +4762,13 @@ static int get_phys_addr_v5(CPUARMState *env, > uint32_t address, int access_type, > *page_size =3D 1024 * 1024; > } else { > /* Lookup l2 entry. */ > - if (type =3D=3D 1) { > - /* Coarse pagetable. */ > - table =3D (desc & 0xfffffc00) | ((address >> 10) & 0x3fc); > - } else { > - /* Fine pagetable. */ > - table =3D (desc & 0xfffff000) | ((address >> 8) & 0xffc); > - } > + if (type =3D=3D 1) { > + /* Coarse pagetable. */ > + table =3D (desc & 0xfffffc00) | ((address >> 10) & 0x3fc); > + } else { > + /* Fine pagetable. */ > + table =3D (desc & 0xfffff000) | ((address >> 8) & 0xffc); > + } > desc =3D ldl_phys(cs->as, table); > switch (desc & 3) { > case 0: /* Page translation fault. */ > @@ -4785,17 +4785,17 @@ static int get_phys_addr_v5(CPUARMState *env, > uint32_t address, int access_type, > *page_size =3D 0x1000; > break; > case 3: /* 1k page. */ > - if (type =3D=3D 1) { > - if (arm_feature(env, ARM_FEATURE_XSCALE)) { > - phys_addr =3D (desc & 0xfffff000) | (address & 0xfff)= ; > - } else { > - /* Page translation fault. */ > - code =3D 7; > - goto do_fault; > - } > - } else { > - phys_addr =3D (desc & 0xfffffc00) | (address & 0x3ff); > - } > + if (type =3D=3D 1) { > + if (arm_feature(env, ARM_FEATURE_XSCALE)) { > + phys_addr =3D (desc & 0xfffff000) | (address & 0xfff= ); > + } else { > + /* Page translation fault. */ > + code =3D 7; > + goto do_fault; > + } > + } else { > + phys_addr =3D (desc & 0xfffffc00) | (address & 0x3ff); > + } > ap =3D (desc >> 4) & 3; > *page_size =3D 0x400; > break; > @@ -5190,18 +5190,18 @@ static int get_phys_addr_mpu(CPUARMState *env, > uint32_t address, > > *phys_ptr =3D address; > for (n =3D 7; n >=3D 0; n--) { > - base =3D env->cp15.c6_region[n]; > - if ((base & 1) =3D=3D 0) > - continue; > - mask =3D 1 << ((base >> 1) & 0x1f); > - /* Keep this shift separate from the above to avoid an > - (undefined) << 32. */ > - mask =3D (mask << 1) - 1; > - if (((base ^ address) & ~mask) =3D=3D 0) > - break; > + base =3D env->cp15.c6_region[n]; > + if ((base & 1) =3D=3D 0) > + continue; > + mask =3D 1 << ((base >> 1) & 0x1f); > + /* Keep this shift separate from the above to avoid an > + (undefined) << 32. */ > + mask =3D (mask << 1) - 1; > + if (((base ^ address) & ~mask) =3D=3D 0) > + break; > } > if (n < 0) > - return 2; > + return 2; > > if (access_type =3D=3D 2) { > mask =3D env->cp15.pmsav5_insn_ap; > @@ -5211,31 +5211,31 @@ static int get_phys_addr_mpu(CPUARMState *env, > uint32_t address, > mask =3D (mask >> (n * 4)) & 0xf; > switch (mask) { > case 0: > - return 1; > + return 1; > case 1: > - if (is_user) > - return 1; > - *prot =3D PAGE_READ | PAGE_WRITE; > - break; > + if (is_user) > + return 1; > + *prot =3D PAGE_READ | PAGE_WRITE; > + break; > case 2: > - *prot =3D PAGE_READ; > - if (!is_user) > - *prot |=3D PAGE_WRITE; > - break; > + *prot =3D PAGE_READ; > + if (!is_user) > + *prot |=3D PAGE_WRITE; > + break; > case 3: > - *prot =3D PAGE_READ | PAGE_WRITE; > - break; > + *prot =3D PAGE_READ | PAGE_WRITE; > + break; > case 5: > - if (is_user) > - return 1; > - *prot =3D PAGE_READ; > - break; > + if (is_user) > + return 1; > + *prot =3D PAGE_READ; > + break; > case 6: > - *prot =3D PAGE_READ; > - break; > + *prot =3D PAGE_READ; > + break; > default: > - /* Bad permission. */ > - return 1; > + /* Bad permission. */ > + return 1; > } > *prot |=3D PAGE_EXEC; > return 0; > -- > 1.9.1 > > =E2=80=8BReviewed-by: Greg Bellows =E2=80=8B --047d7b5d430e24337a050d9603e1 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFt aWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21h aWxfZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gRnJpLCBKYW4gMjMsIDIw MTUgYXQgMTI6MjAgUE0sIFBldGVyIE1heWRlbGwgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVm PSJtYWlsdG86cGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3JnIiB0YXJnZXQ9Il9ibGFuayI+cGV0ZXIu bWF5ZGVsbEBsaW5hcm8ub3JnPC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj48YmxvY2txdW90ZSBj bGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDox cHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij5BIGZldyBvZiB0aGUgb2xkZXN0IHBhcnRz IG9mIHRoZSBwYWdlLXRhYmxlLXdhbGsgY29kZSBoYXZlIGJyb2tlbiBpbmRlbnQ8YnI+DQooZWl0 aGVyIGhhcmRjb2RlZCB0YWJzIG9yIHR3by1zcGFjZXMpLiBSZWluZGVudCB0aGVzZSBzZWN0aW9u cy48YnI+DQo8YnI+DQpGb3IgZWFzZSBvZiByZXZpZXcsIHRoaXMgcGF0Y2ggZG9lcyBub3QgdG91 Y2ggdGhlIGJyYWNlIHN0eWxlIGFuZDxicj4NCnNvIGlzIGEgd2hpdGVzcGFjZS1vbmx5IGNoYW5n ZS48YnI+DQo8YnI+DQpTaWduZWQtb2ZmLWJ5OiBQZXRlciBNYXlkZWxsICZsdDs8YSBocmVmPSJt YWlsdG86cGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3JnIj5wZXRlci5tYXlkZWxsQGxpbmFyby5vcmc8 L2E+Jmd0Ozxicj4NCi0tLTxicj4NCsKgdGFyZ2V0LWFybS9oZWxwZXIuYyB8IDE5MiArKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPg0KwqAxIGZp bGUgY2hhbmdlZCwgOTYgaW5zZXJ0aW9ucygrKSwgOTYgZGVsZXRpb25zKC0pPGJyPg0KPGJyPg0K ZGlmZiAtLWdpdCBhL3RhcmdldC1hcm0vaGVscGVyLmMgYi90YXJnZXQtYXJtL2hlbHBlci5jPGJy Pg0KaW5kZXggMGEwNmJiZS4uM2EyM2FmOCAxMDA2NDQ8YnI+DQotLS0gYS90YXJnZXQtYXJtL2hl bHBlci5jPGJyPg0KKysrIGIvdGFyZ2V0LWFybS9oZWxwZXIuYzxicj4NCkBAIC00NjM2LDU1ICs0 NjM2LDU1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2FwKENQVUFSTVN0YXRlICplbnYsIEFS TU1NVUlkeCBtbXVfaWR4LDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGludCBhcCwgaW50IGRvbWFpbl9wcm90LDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGludCBhY2Nlc3NfdHlwZSk8YnI+DQrCoHs8YnI+DQotwqAg aW50IHByb3Rfcm87PGJyPg0KLcKgIGJvb2wgaXNfdXNlciA9IHJlZ2ltZV9pc191c2VyKGVudiwg bW11X2lkeCk7PGJyPg0KLTxicj4NCi3CoCBpZiAoZG9tYWluX3Byb3QgPT0gMykgezxicj4NCi3C oCDCoCByZXR1cm4gUEFHRV9SRUFEIHwgUEFHRV9XUklURTs8YnI+DQotwqAgfTxicj4NCi08YnI+ DQotwqAgaWYgKGFjY2Vzc190eXBlID09IDEpPGJyPg0KLcKgIMKgIMKgIHByb3Rfcm8gPSAwOzxi cj4NCi3CoCBlbHNlPGJyPg0KLcKgIMKgIMKgIHByb3Rfcm8gPSBQQUdFX1JFQUQ7PGJyPg0KLTxi cj4NCi3CoCBzd2l0Y2ggKGFwKSB7PGJyPg0KLcKgIGNhc2UgMDo8YnI+DQotwqAgwqAgwqAgaWYg KGFybV9mZWF0dXJlKGVudiwgQVJNX0ZFQVRVUkVfVjcpKSB7PGJyPg0KLcKgIMKgIMKgIMKgIMKg IHJldHVybiAwOzxicj4NCi3CoCDCoCDCoCB9PGJyPg0KLcKgIMKgIMKgIGlmIChhY2Nlc3NfdHlw ZSA9PSAxKTxicj4NCi3CoCDCoCDCoCDCoCDCoCByZXR1cm4gMDs8YnI+DQotwqAgwqAgwqAgc3dp dGNoIChyZWdpbWVfc2N0bHIoZW52LCBtbXVfaWR4KSAmYW1wOyAoU0NUTFJfUyB8IFNDVExSX1Ip KSB7PGJyPg0KLcKgIMKgIMKgIGNhc2UgU0NUTFJfUzo8YnI+DQotwqAgwqAgwqAgwqAgwqAgcmV0 dXJuIGlzX3VzZXIgPyAwIDogUEFHRV9SRUFEOzxicj4NCi3CoCDCoCDCoCBjYXNlIFNDVExSX1I6 PGJyPg0KLcKgIMKgIMKgIMKgIMKgIHJldHVybiBQQUdFX1JFQUQ7PGJyPg0KLcKgIMKgIMKgIGRl ZmF1bHQ6PGJyPg0KLcKgIMKgIMKgIMKgIMKgIHJldHVybiAwOzxicj4NCi3CoCDCoCDCoCB9PGJy Pg0KLcKgIGNhc2UgMTo8YnI+DQotwqAgwqAgwqAgcmV0dXJuIGlzX3VzZXIgPyAwIDogUEFHRV9S RUFEIHwgUEFHRV9XUklURTs8YnI+DQotwqAgY2FzZSAyOjxicj4NCi3CoCDCoCDCoCBpZiAoaXNf dXNlcik8YnI+DQotwqAgwqAgwqAgwqAgwqAgcmV0dXJuIHByb3Rfcm87PGJyPg0KLcKgIMKgIMKg IGVsc2U8YnI+DQotwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFBBR0VfUkVBRCB8IFBBR0VfV1JJVEU7 PGJyPg0KLcKgIGNhc2UgMzo8YnI+DQotwqAgwqAgwqAgcmV0dXJuIFBBR0VfUkVBRCB8IFBBR0Vf V1JJVEU7PGJyPg0KLcKgIGNhc2UgNDogLyogUmVzZXJ2ZWQuwqAgKi88YnI+DQotwqAgwqAgwqAg cmV0dXJuIDA7PGJyPg0KLcKgIGNhc2UgNTo8YnI+DQotwqAgwqAgwqAgcmV0dXJuIGlzX3VzZXIg PyAwIDogcHJvdF9ybzs8YnI+DQotwqAgY2FzZSA2Ojxicj4NCi3CoCDCoCDCoCByZXR1cm4gcHJv dF9ybzs8YnI+DQotwqAgY2FzZSA3Ojxicj4NCi3CoCDCoCDCoCBpZiAoIWFybV9mZWF0dXJlIChl bnYsIEFSTV9GRUFUVVJFX1Y2SykpPGJyPg0KLcKgIMKgIMKgIMKgIMKgIHJldHVybiAwOzxicj4N Ci3CoCDCoCDCoCByZXR1cm4gcHJvdF9ybzs8YnI+DQotwqAgZGVmYXVsdDo8YnI+DQotwqAgwqAg wqAgYWJvcnQoKTs8YnI+DQotwqAgfTxicj4NCivCoCDCoCBpbnQgcHJvdF9ybzs8YnI+DQorwqAg wqAgYm9vbCBpc191c2VyID0gcmVnaW1lX2lzX3VzZXIoZW52LCBtbXVfaWR4KTs8YnI+DQorPGJy Pg0KK8KgIMKgIGlmIChkb21haW5fcHJvdCA9PSAzKSB7PGJyPg0KK8KgIMKgIMKgIMKgIHJldHVy biBQQUdFX1JFQUQgfCBQQUdFX1dSSVRFOzxicj4NCivCoCDCoCB9PGJyPg0KKzxicj4NCivCoCDC oCBpZiAoYWNjZXNzX3R5cGUgPT0gMSk8YnI+DQorwqAgwqAgwqAgwqAgcHJvdF9ybyA9IDA7PGJy Pg0KK8KgIMKgIGVsc2U8YnI+DQorwqAgwqAgwqAgwqAgcHJvdF9ybyA9IFBBR0VfUkVBRDs8YnI+ DQorPGJyPg0KK8KgIMKgIHN3aXRjaCAoYXApIHs8YnI+DQorwqAgwqAgY2FzZSAwOjxicj4NCivC oCDCoCDCoCDCoCBpZiAoYXJtX2ZlYXR1cmUoZW52LCBBUk1fRkVBVFVSRV9WNykpIHs8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7PGJyPg0KK8KgIMKgIMKgIMKgIH08YnI+DQorwqAg wqAgwqAgwqAgaWYgKGFjY2Vzc190eXBlID09IDEpPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIHJl dHVybiAwOzxicj4NCivCoCDCoCDCoCDCoCBzd2l0Y2ggKHJlZ2ltZV9zY3RscihlbnYsIG1tdV9p ZHgpICZhbXA7IChTQ1RMUl9TIHwgU0NUTFJfUikpIHs8YnI+DQorwqAgwqAgwqAgwqAgY2FzZSBT Q1RMUl9TOjxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gaXNfdXNlciA/IDAgOiBQQUdF X1JFQUQ7PGJyPg0KK8KgIMKgIMKgIMKgIGNhc2UgU0NUTFJfUjo8YnI+DQorwqAgwqAgwqAgwqAg wqAgwqAgcmV0dXJuIFBBR0VfUkVBRDs8YnI+DQorwqAgwqAgwqAgwqAgZGVmYXVsdDo8YnI+DQor wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7PGJyPg0KK8KgIMKgIMKgIMKgIH08YnI+DQorwqAg wqAgY2FzZSAxOjxicj4NCivCoCDCoCDCoCDCoCByZXR1cm4gaXNfdXNlciA/IDAgOiBQQUdFX1JF QUQgfCBQQUdFX1dSSVRFOzxicj4NCivCoCDCoCBjYXNlIDI6PGJyPg0KK8KgIMKgIMKgIMKgIGlm IChpc191c2VyKTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gcHJvdF9ybzs8YnI+DQor wqAgwqAgwqAgwqAgZWxzZTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gUEFHRV9SRUFE IHwgUEFHRV9XUklURTs8YnI+DQorwqAgwqAgY2FzZSAzOjxicj4NCivCoCDCoCDCoCDCoCByZXR1 cm4gUEFHRV9SRUFEIHwgUEFHRV9XUklURTs8YnI+DQorwqAgwqAgY2FzZSA0OiAvKiBSZXNlcnZl ZC7CoCAqLzxicj4NCivCoCDCoCDCoCDCoCByZXR1cm4gMDs8YnI+DQorwqAgwqAgY2FzZSA1Ojxi cj4NCivCoCDCoCDCoCDCoCByZXR1cm4gaXNfdXNlciA/IDAgOiBwcm90X3JvOzxicj4NCivCoCDC oCBjYXNlIDY6PGJyPg0KK8KgIMKgIMKgIMKgIHJldHVybiBwcm90X3JvOzxicj4NCivCoCDCoCBj YXNlIDc6PGJyPg0KK8KgIMKgIMKgIMKgIGlmICghYXJtX2ZlYXR1cmUgKGVudiwgQVJNX0ZFQVRV UkVfVjZLKSk8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7PGJyPg0KK8KgIMKgIMKg IMKgIHJldHVybiBwcm90X3JvOzxicj4NCivCoCDCoCBkZWZhdWx0Ojxicj4NCivCoCDCoCDCoCDC oCBhYm9ydCgpOzxicj4NCivCoCDCoCB9PGJyPg0KwqB9PGJyPg0KPGJyPg0KwqBzdGF0aWMgYm9v bCBnZXRfbGV2ZWwxX3RhYmxlX2FkZHJlc3MoQ1BVQVJNU3RhdGUgKmVudiwgQVJNTU1VSWR4IG1t dV9pZHgsPGJyPg0KQEAgLTQ3NjIsMTMgKzQ3NjIsMTMgQEAgc3RhdGljIGludCBnZXRfcGh5c19h ZGRyX3Y1KENQVUFSTVN0YXRlICplbnYsIHVpbnQzMl90IGFkZHJlc3MsIGludCBhY2Nlc3NfdHlw ZSw8YnI+DQrCoCDCoCDCoCDCoCDCoCpwYWdlX3NpemUgPSAxMDI0ICogMTAyNDs8YnI+DQrCoCDC oCDCoH0gZWxzZSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAvKiBMb29rdXAgbDIgZW50cnkuwqAgKi88 YnI+DQotwqAgwqAgwqAgwqBpZiAodHlwZSA9PSAxKSB7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKg LyogQ29hcnNlIHBhZ2V0YWJsZS7CoCAqLzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoHRhYmxlID0g KGRlc2MgJmFtcDsgMHhmZmZmZmMwMCkgfCAoKGFkZHJlc3MgJmd0OyZndDsgMTApICZhbXA7IDB4 M2ZjKTs8YnI+DQotwqAgwqAgwqAgwqB9IGVsc2Ugezxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoC8q IEZpbmUgcGFnZXRhYmxlLsKgICovPGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgdGFibGUgPSAoZGVz YyAmYW1wOyAweGZmZmZmMDAwKSB8ICgoYWRkcmVzcyAmZ3Q7Jmd0OyA4KSAmYW1wOyAweGZmYyk7 PGJyPg0KLcKgIMKgIMKgIMKgfTxicj4NCivCoCDCoCDCoCDCoCBpZiAodHlwZSA9PSAxKSB7PGJy Pg0KK8KgIMKgIMKgIMKgIMKgIMKgIC8qIENvYXJzZSBwYWdldGFibGUuwqAgKi88YnI+DQorwqAg wqAgwqAgwqAgwqAgwqAgdGFibGUgPSAoZGVzYyAmYW1wOyAweGZmZmZmYzAwKSB8ICgoYWRkcmVz cyAmZ3Q7Jmd0OyAxMCkgJmFtcDsgMHgzZmMpOzxicj4NCivCoCDCoCDCoCDCoCB9IGVsc2Ugezxi cj4NCivCoCDCoCDCoCDCoCDCoCDCoCAvKiBGaW5lIHBhZ2V0YWJsZS7CoCAqLzxicj4NCivCoCDC oCDCoCDCoCDCoCDCoCB0YWJsZSA9IChkZXNjICZhbXA7IDB4ZmZmZmYwMDApIHwgKChhZGRyZXNz ICZndDsmZ3Q7IDgpICZhbXA7IDB4ZmZjKTs8YnI+DQorwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKg IMKgIMKgIMKgZGVzYyA9IGxkbF9waHlzKGNzLSZndDthcywgdGFibGUpOzxicj4NCsKgIMKgIMKg IMKgIMKgc3dpdGNoIChkZXNjICZhbXA7IDMpIHs8YnI+DQrCoCDCoCDCoCDCoCDCoGNhc2UgMDog LyogUGFnZSB0cmFuc2xhdGlvbiBmYXVsdC7CoCAqLzxicj4NCkBAIC00Nzg1LDE3ICs0Nzg1LDE3 IEBAIHN0YXRpYyBpbnQgZ2V0X3BoeXNfYWRkcl92NShDUFVBUk1TdGF0ZSAqZW52LCB1aW50MzJf dCBhZGRyZXNzLCBpbnQgYWNjZXNzX3R5cGUsPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAqcGFn ZV9zaXplID0gMHgxMDAwOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7PGJyPg0KwqAg wqAgwqAgwqAgwqBjYXNlIDM6IC8qIDFrIHBhZ2UuwqAgKi88YnI+DQotwqAgwqAgwqAgwqAgwqAg wqBpZiAodHlwZSA9PSAxKSB7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKGFybV9m ZWF0dXJlKGVudiwgQVJNX0ZFQVRVUkVfWFNDQUxFKSkgezxicj4NCi3CoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHBoeXNfYWRkciA9IChkZXNjICZhbXA7IDB4ZmZmZmYwMDApIHwgKGFkZHJl c3MgJmFtcDsgMHhmZmYpOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0gZWxzZSB7PGJy Pg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLyogUGFnZSB0cmFuc2xhdGlvbiBmYXVs dC7CoCAqLzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvZGUgPSA3Ozxicj4N Ci3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdvdG8gZG9fZmF1bHQ7PGJyPg0KLcKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgfTxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoH0gZWxzZSB7PGJyPg0K LcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcGh5c19hZGRyID0gKGRlc2MgJmFtcDsgMHhmZmZmZmMw MCkgfCAoYWRkcmVzcyAmYW1wOyAweDNmZik7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgfTxicj4N CivCoCDCoCDCoCDCoCDCoCDCoCBpZiAodHlwZSA9PSAxKSB7PGJyPg0KK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGlmIChhcm1fZmVhdHVyZShlbnYsIEFSTV9GRUFUVVJFX1hTQ0FMRSkpIHs8YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGh5c19hZGRyID0gKGRlc2MgJmFtcDsg MHhmZmZmZjAwMCkgfCAoYWRkcmVzcyAmYW1wOyAweGZmZik7PGJyPg0KK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIH0gZWxzZSB7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8q IFBhZ2UgdHJhbnNsYXRpb24gZmF1bHQuwqAgKi88YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgY29kZSA9IDc7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdv dG8gZG9fZmF1bHQ7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH08YnI+DQorwqAgwqAg wqAgwqAgwqAgwqAgfSBlbHNlIHs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGh5c19h ZGRyID0gKGRlc2MgJmFtcDsgMHhmZmZmZmMwMCkgfCAoYWRkcmVzcyAmYW1wOyAweDNmZik7PGJy Pg0KK8KgIMKgIMKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoGFwID0gKGRl c2MgJmd0OyZndDsgNCkgJmFtcDsgMzs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCpwYWdlX3Np emUgPSAweDQwMDs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOzxicj4NCkBAIC01MTkw LDE4ICs1MTkwLDE4IEBAIHN0YXRpYyBpbnQgZ2V0X3BoeXNfYWRkcl9tcHUoQ1BVQVJNU3RhdGUg KmVudiwgdWludDMyX3QgYWRkcmVzcyw8YnI+DQo8YnI+DQrCoCDCoCDCoCpwaHlzX3B0ciA9IGFk ZHJlc3M7PGJyPg0KwqAgwqAgwqBmb3IgKG4gPSA3OyBuICZndDs9IDA7IG4tLSkgezxicj4NCi3C oCDCoCDCoCDCoGJhc2UgPSBlbnYtJmd0O2NwMTUuYzZfcmVnaW9uW25dOzxicj4NCi3CoCDCoCDC oCDCoGlmICgoYmFzZSAmYW1wOyAxKSA9PSAwKTxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoGNvbnRp bnVlOzxicj4NCi3CoCDCoCDCoCDCoG1hc2sgPSAxICZsdDsmbHQ7ICgoYmFzZSAmZ3Q7Jmd0OyAx KSAmYW1wOyAweDFmKTs8YnI+DQotwqAgwqAgwqAgwqAvKiBLZWVwIHRoaXMgc2hpZnQgc2VwYXJh dGUgZnJvbSB0aGUgYWJvdmUgdG8gYXZvaWQgYW48YnI+DQotwqAgwqAgwqAgwqAgwqAgKHVuZGVm aW5lZCkgJmx0OyZsdDsgMzIuwqAgKi88YnI+DQotwqAgwqAgwqAgwqBtYXNrID0gKG1hc2sgJmx0 OyZsdDsgMSkgLSAxOzxicj4NCi3CoCDCoCDCoCDCoGlmICgoKGJhc2UgXiBhZGRyZXNzKSAmYW1w OyB+bWFzaykgPT0gMCk8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqBicmVhazs8YnI+DQorwqAgwqAg wqAgwqAgYmFzZSA9IGVudi0mZ3Q7Y3AxNS5jNl9yZWdpb25bbl07PGJyPg0KK8KgIMKgIMKgIMKg IGlmICgoYmFzZSAmYW1wOyAxKSA9PSAwKTxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCBjb250aW51 ZTs8YnI+DQorwqAgwqAgwqAgwqAgbWFzayA9IDEgJmx0OyZsdDsgKChiYXNlICZndDsmZ3Q7IDEp ICZhbXA7IDB4MWYpOzxicj4NCivCoCDCoCDCoCDCoCAvKiBLZWVwIHRoaXMgc2hpZnQgc2VwYXJh dGUgZnJvbSB0aGUgYWJvdmUgdG8gYXZvaWQgYW48YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAodW5k ZWZpbmVkKSAmbHQ7Jmx0OyAzMi7CoCAqLzxicj4NCivCoCDCoCDCoCDCoCBtYXNrID0gKG1hc2sg Jmx0OyZsdDsgMSkgLSAxOzxicj4NCivCoCDCoCDCoCDCoCBpZiAoKChiYXNlIF4gYWRkcmVzcykg JmFtcDsgfm1hc2spID09IDApPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOzxicj4NCsKg IMKgIMKgfTxicj4NCsKgIMKgIMKgaWYgKG4gJmx0OyAwKTxicj4NCi3CoCDCoCDCoCDCoHJldHVy biAyOzxicj4NCivCoCDCoCDCoCDCoCByZXR1cm4gMjs8YnI+DQo8YnI+DQrCoCDCoCDCoGlmIChh Y2Nlc3NfdHlwZSA9PSAyKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqBtYXNrID0gZW52LSZndDtjcDE1 LnBtc2F2NV9pbnNuX2FwOzxicj4NCkBAIC01MjExLDMxICs1MjExLDMxIEBAIHN0YXRpYyBpbnQg Z2V0X3BoeXNfYWRkcl9tcHUoQ1BVQVJNU3RhdGUgKmVudiwgdWludDMyX3QgYWRkcmVzcyw8YnI+ DQrCoCDCoCDCoG1hc2sgPSAobWFzayAmZ3Q7Jmd0OyAobiAqIDQpKSAmYW1wOyAweGY7PGJyPg0K wqAgwqAgwqBzd2l0Y2ggKG1hc2spIHs8YnI+DQrCoCDCoCDCoGNhc2UgMDo8YnI+DQotwqAgwqAg wqAgwqByZXR1cm4gMTs8YnI+DQorwqAgwqAgwqAgwqAgcmV0dXJuIDE7PGJyPg0KwqAgwqAgwqBj YXNlIDE6PGJyPg0KLcKgIMKgIMKgIMKgaWYgKGlzX3VzZXIpPGJyPg0KLcKgIMKgIMKgIMKgIMKg cmV0dXJuIDE7PGJyPg0KLcKgIMKgIMKgIMKgKnByb3QgPSBQQUdFX1JFQUQgfCBQQUdFX1dSSVRF Ozxicj4NCi3CoCDCoCDCoCDCoGJyZWFrOzxicj4NCivCoCDCoCDCoCDCoCBpZiAoaXNfdXNlcik8 YnI+DQorwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDE7PGJyPg0KK8KgIMKgIMKgIMKgICpwcm90ID0g UEFHRV9SRUFEIHwgUEFHRV9XUklURTs8YnI+DQorwqAgwqAgwqAgwqAgYnJlYWs7PGJyPg0KwqAg wqAgwqBjYXNlIDI6PGJyPg0KLcKgIMKgIMKgIMKgKnByb3QgPSBQQUdFX1JFQUQ7PGJyPg0KLcKg IMKgIMKgIMKgaWYgKCFpc191c2VyKTxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCpwcm90IHw9IFBB R0VfV1JJVEU7PGJyPg0KLcKgIMKgIMKgIMKgYnJlYWs7PGJyPg0KK8KgIMKgIMKgIMKgICpwcm90 ID0gUEFHRV9SRUFEOzxicj4NCivCoCDCoCDCoCDCoCBpZiAoIWlzX3VzZXIpPGJyPg0KK8KgIMKg IMKgIMKgIMKgIMKgICpwcm90IHw9IFBBR0VfV1JJVEU7PGJyPg0KK8KgIMKgIMKgIMKgIGJyZWFr Ozxicj4NCsKgIMKgIMKgY2FzZSAzOjxicj4NCi3CoCDCoCDCoCDCoCpwcm90ID0gUEFHRV9SRUFE IHwgUEFHRV9XUklURTs8YnI+DQotwqAgwqAgwqAgwqBicmVhazs8YnI+DQorwqAgwqAgwqAgwqAg KnByb3QgPSBQQUdFX1JFQUQgfCBQQUdFX1dSSVRFOzxicj4NCivCoCDCoCDCoCDCoCBicmVhazs8 YnI+DQrCoCDCoCDCoGNhc2UgNTo8YnI+DQotwqAgwqAgwqAgwqBpZiAoaXNfdXNlcik8YnI+DQot wqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gMTs8YnI+DQotwqAgwqAgwqAgwqAqcHJvdCA9IFBBR0Vf UkVBRDs8YnI+DQotwqAgwqAgwqAgwqBicmVhazs8YnI+DQorwqAgwqAgwqAgwqAgaWYgKGlzX3Vz ZXIpPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAxOzxicj4NCivCoCDCoCDCoCDCoCAq cHJvdCA9IFBBR0VfUkVBRDs8YnI+DQorwqAgwqAgwqAgwqAgYnJlYWs7PGJyPg0KwqAgwqAgwqBj YXNlIDY6PGJyPg0KLcKgIMKgIMKgIMKgKnByb3QgPSBQQUdFX1JFQUQ7PGJyPg0KLcKgIMKgIMKg IMKgYnJlYWs7PGJyPg0KK8KgIMKgIMKgIMKgICpwcm90ID0gUEFHRV9SRUFEOzxicj4NCivCoCDC oCDCoCDCoCBicmVhazs8YnI+DQrCoCDCoCDCoGRlZmF1bHQ6PGJyPg0KLcKgIMKgIMKgIMKgLyog QmFkIHBlcm1pc3Npb24uwqAgKi88YnI+DQotwqAgwqAgwqAgwqByZXR1cm4gMTs8YnI+DQorwqAg wqAgwqAgwqAgLyogQmFkIHBlcm1pc3Npb24uwqAgKi88YnI+DQorwqAgwqAgwqAgwqAgcmV0dXJu IDE7PGJyPg0KwqAgwqAgwqB9PGJyPg0KwqAgwqAgwqAqcHJvdCB8PSBQQUdFX0VYRUM7PGJyPg0K wqAgwqAgwqByZXR1cm4gMDs8YnI+DQo8c3BhbiBjbGFzcz0iSE9FblpiIj48Zm9udCBjb2xvcj0i Izg4ODg4OCI+LS08YnI+DQoxLjkuMTxicj4NCjxicj4NCjwvZm9udD48L3NwYW4+PC9ibG9ja3F1 b3RlPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PC9kaXY+PGRpdiBj bGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQiIHN0eWxlPSJmb250 LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZiI+4oCLUmV2aWV3ZWQtYnk6IEdyZWcg QmVsbG93cyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmdyZWcuYmVsbG93c0BsaW5hcm8ub3JnIj5ncmVn LmJlbGxvd3NAbGluYXJvLm9yZzwvYT4mZ3Q74oCLPC9kaXY+PGJyPjwvZGl2PjxkaXYgY2xhc3M9 ImdtYWlsX2V4dHJhIj48YnI+PC9kaXY+PC9kaXY+DQo= --047d7b5d430e24337a050d9603e1--