From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <10walls@gmail.com> Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by sourceware.org (Postfix) with ESMTPS id 1E662385801D for ; Tue, 3 Nov 2020 00:32:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1E662385801D Received: by mail-pf1-x441.google.com with SMTP id e7so12641779pfn.12 for ; Mon, 02 Nov 2020 16:32:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to; bh=ImPcWeys4oEPjfH+HUhd580yicwxJVkp5f3WjU/RIUw=; b=qVru1jdzxYItzHtEerzQfrmWLTvoTTSyr+3NaeYUowWFT5OxoqI6UlE3Gazyo0Ed4i pjK7T3Uu2joYboBwc9btKaICPnWZDSakPEZwEHn4+Oxo+rSkI7+y6GgWdIDqabESUbyV +ThV5LWHAtajI/FiXc1A48Y+qTslUQAxfPBtQIyBuJySAWKrLyvaZ2t6Vr3yUsJ9wyEC Noi5CUxAaUtv5tQTE6bZ/w8HYIGmTt4EIqpVoMCPHiSWAWtPtJ+igyhpg1trM5ZYXe46 9dINb4oG14xlTa+GHPkn3iJq2fnDLmXWE9EF/f5HWBdThSh0OC8PbUciB2aND7Afet5e Ck8Q== X-Gm-Message-State: AOAM533ngFUBiC6GGoGctBCho09QHWV9W/E+QdfNwZykUqARRDFwqCfx e8haf2JbTcER4OzO9jZWia3GRGvmXHU= X-Google-Smtp-Source: ABdhPJzPed1+i37k6NkqedkxDoo1StDCe7CULii5RYxPxt5nd1PTmFaLcUhzQ6AzImgZQ3wa6Qag1w== X-Received: by 2002:a17:90a:2e11:: with SMTP id q17mr822267pjd.5.1604363538784; Mon, 02 Nov 2020 16:32:18 -0800 (PST) Received: from ?IPv6:2001:f40:91b::3:4ed3? ([2001:f40:91b::3:4ed3]) by smtp.gmail.com with ESMTPSA id jy19sm697831pjb.9.2020.11.02.16.32.17 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 02 Nov 2020 16:32:17 -0800 (PST) Subject: Re: [PATCH v2] libgcc: Expose the instruction pointer and stack pointer in SEH _Unwind_Backtrace To: gcc-patches@gcc.gnu.org References: <20200901130126.6266-1-martin@martin.st> <20200908122151.14025-1-martin@martin.st> From: Jonathan Yong <10walls@gmail.com> Message-ID: Date: Tue, 3 Nov 2020 00:32:05 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.3.1 MIME-Version: 1.0 In-Reply-To: <20200908122151.14025-1-martin@martin.st> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="lpWmPrvO8ScwLWAOAnLi9NNDCMGDb70k1" X-Spam-Status: No, score=-3039.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Nov 2020 00:32:21 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --lpWmPrvO8ScwLWAOAnLi9NNDCMGDb70k1 Content-Type: multipart/mixed; boundary="Jmx3zFE44zfA7mi0Eid1J9OZ8loKx6wYX"; protected-headers="v1" From: Jonathan Yong <10walls@gmail.com> To: gcc-patches@gcc.gnu.org Message-ID: Subject: Re: [PATCH v2] libgcc: Expose the instruction pointer and stack pointer in SEH _Unwind_Backtrace References: <20200901130126.6266-1-martin@martin.st> <20200908122151.14025-1-martin@martin.st> In-Reply-To: <20200908122151.14025-1-martin@martin.st> --Jmx3zFE44zfA7mi0Eid1J9OZ8loKx6wYX Content-Type: multipart/mixed; boundary="------------0C45A15C0F8DEDAA9F16A05E" Content-Language: en-US This is a multi-part message in MIME format. --------------0C45A15C0F8DEDAA9F16A05E Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable On 9/8/20 12:21 PM, Martin Storsj=C3=B6 wrote: > Previously, the SEH version of _Unwind_Backtrace did unwind > the stack and call the provided callback function as intended, > but there was little the caller could do within the callback to > actually get any info about that particular level in the unwind. >=20 > Set the ra and cfa pointers, which are used by _Unwind_GetIP > and _Unwind_GetCFA, to allow using these functions from the > callacb to inspect the state at each stack frame. >=20 > 2020-09-08 Martin Storsj=C3=B6 >=20 > libgcc/Changelog: > * unwind-seh.c (_Unwind_Backtrace): Set the ra and cfa pointer= s > before calling the callback. > --- > libgcc/unwind-seh.c | 5 +++++ > 1 file changed, 5 insertions(+) >=20 > diff --git a/libgcc/unwind-seh.c b/libgcc/unwind-seh.c > index 1a70180cfaa..275d782903a 100644 > --- a/libgcc/unwind-seh.c > +++ b/libgcc/unwind-seh.c > @@ -466,6 +466,11 @@ _Unwind_Backtrace(_Unwind_Trace_Fn trace, > &gcc_context.disp->HandlerData, > &gcc_context.disp->EstablisherFrame, NULL); > =20 > + /* Set values that the callback can inspect via _Unwind_GetIP > + * and _Unwind_GetCFA. */ > + gcc_context.ra =3D ms_context.Rip; > + gcc_context.cfa =3D ms_context.Rsp; > + > /* Call trace function. */ > if (trace (&gcc_context, trace_argument) !=3D _URC_NO_REASON) > return _URC_FATAL_PHASE1_ERROR; >=20 Pushed to master branch, thanks. --------------0C45A15C0F8DEDAA9F16A05E Content-Type: application/pgp-keys; name="OpenPGP_0x713B5FE29C145D45_and_old_rev.asc" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="OpenPGP_0x713B5FE29C145D45_and_old_rev.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- xsFNBFDEdwIBEACSrmywJMpgYlgJa0HJ1AFu9tQp8yVpVS21EfnrSK16TS6PoW/JS78D5CYxp= shP zr1iil8yeL8/val1yXkI8uNZjMnhLxMBU5C7WEMCeY/h760btG3bZZ5BMCNCkC0YfrtvJJQDE= yv1 H+p1U7yMFRyxNtMjaf6QDzoRjTVOzO6mtNMZWYnlhzC54etiVt3HQ4jKOlKbI+dwjigIw8B1S= Z+x WcukAHRMBcIZYLjbnAI/XNu796pfwh6QEhJjr8EpvyNjdHLFSMMuyUPO/a3sr/jkFSTpqt5lr= 9jW ejdQwe7e8WtbC+euv++fH1B9Yz42259kLxgH+aHk6lWX3epIIx3w17rGfaMrFrINjXEBGLLOQ= kIy 2LtBLYRU2NhDg+VSDOEwAsiOVZs1EHpSNF5GV12L8SFiNtVToHxLRpObNpYIHBkDFzx9gvQfX= 5Ko cx5XFhBiNfTjdxBOjopLzQHpfCSo3fzSqc7zpscqOw3uni7GIN86fI8h3wSV44dQ4yaervnL2= kZy kRyWL5y1C9WDfjzljTIeLB6gK/gBbrsuKuVC42r6xAK9yC9pL0Trf7+GLJ9UF4WGnJ5IvfVpZ= 7gt BMjWOpiwewTprdBNwhLsVSep9Vqg/cbtmG6AnpzNtMsLEWAwDpgaFa5KqlehgUCuMlEdU6Lhv= Sd0 cJ/pqKwwzxEiLwARAQABzRlqb25feSA8MTB3YWxsc0BnbWFpbC5jb20+wsGVBBMBAgA/AhsDB= gsJ CAcDAgYVCAIJCgsEFgIDAQIeAQIXgBYhBOUK3Z2wV/T6ZOG2z3E7X+KcFF1FBQJb/k5NBQkUn= 9jL AAoJEHE7X+KcFF1FVlkP/jwLb9aab268Q3XQnocIDD7HArFnzKyvIvIndqGuGs51u+6p8I+zB= KHI yF4T9E1mkXfq2bRIbvKojrkAGi7KgCePKHRILVtfiAANSJtj9304WcUYIiD3vLHgB0Hiv5AUc= 3YW ntnaznKh8VMLMx/ANf3/OjeldikLunkC7vu/YwhbdsPWDEn7v47FsllqhbLbjsm+trboiORJM= UzA dJ65yv2WvRKnsRLdrXSyXxcW651XiNstVpgCqGkZP1PUSxUX8SvA/UzVXC4rw0nHaVVlB5Jov= ywL /Y/3GG6q3/x6hXWgqDBB68GvlQLA39JRGq6ELwwE9mo5EzU4q6a1Y2Uy1ZKqJ56xs+peI5qJd= FtI fXcPX2e6wdaCW631HcgJpykIS/gwDIsxI8NhfmiDLXY1sWnKDU0hjIwDEP/fjLtHp2o1TFBzB= MX9 4/CLi4kt2jhPZqhZed/unJ3IVtpwfi7Lum5LuNQhHqPF8U2YGJfIwaap6KUThy3CffPBhzSyQ= bTl izhP9hAGaMqh9NomJn+YIJlJEYoRkubcaQ95Vev4K0y3LNklxbePo2Jwd+ovxprS6NeJJaRTV= pR8 ZO58RD5B/1oKTW6udVQIeNATjkwoDSR6fi9s7sLLfCVy4404hYuzvrlm4QF3gruz4qhL4w1SG= 0ld dEGhMderspH9WtQs4H7ewsF+BBMBAgAoBQJQxHcCAhsDBQkJZgGABgsJCAcDAgYVCAIJCgsEF= gID AQIeAQIXgAAKCRBxO1/inBRdRSpmEACCSmpexUnrETc2+suu5d5Qj4mrIfNeYlMLGgBObD21q= Ny/ pcQs++BVOEdy4O7rNevWvlgN770JoD1hixzsI3eOqOn5hnaKvRAzbtL0U69qwUcyefTuhNT/S= Jpl h7U73tqUoj9UskgRNTqYt2echszQ52BmdkLuGYY/1Pv3zhXncPGtTNHaTc8MhkuHqDZFyXX6d= ovM D6p+7C7OgZwjINVzsRvPJjb7TbFBkNgAsFdYfSZkSBfY26t7Af0St+Z6WwcUpvGC9CSd2ubvk= TGF 8RNDXyXZ1PNKtoYoY3BlkD6jxYosufi/2/o/DySWU2eNF/0i9xyeJ7wuve9sh+EIJ5nUzfk1G= 6DL a3qhck9umnbdOJF7LUqUNRz05Zo8Y6aSAsLt0bVJ4wgeGD6IhtHNOu7Gp0vwsdsv5Bx5Iqf3i= i3Y m3CNSe+DhVYrIsOESSEnuyIbSkJwvbtAArxGYffHmaDNjzrQ0nvFvjQvmiklvONMy69WsQHKB= eFT e5YZAfpwUPw7K8Zet3wK2jeMOOPvZyQBM0vkrC13hvarzyyDTuqQfSrQKUAukJBJ0HRf1Pnek= tEL UILvpTUXVb5zgPh5q7iwY2Wp7v8uv7ESLV76muA3WCmI+BEOfSkyg9KfSGSLB14+MNGsbGNYv= YH8 NJiQRHMiSSybhilO0oOEYl9hnCN+Yc0hSm9uYXRoYW4gWW9uZyA8MTB3YWxsc0BnbWFpbC5jb= 20+ wsGWBBMBAgBAAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AWIQTlCt2dsFf0+mThts9xO= 1/i nBRdRQUCW/5OWQUJFJ/YywAKCRBxO1/inBRdRZf0D/4kY6ZXlSH4TdGQFEvjTOQNiui2Mpy6H= JmP aTY4x/eu+M1pec4bNpTiP1yhQSWQ2aXCBQj8dJEAYr71WC+3+XEr2daViflu2DA+5zRgXNJZD= JLY DCVJS+EM1X43hyUVEcOG1LL0nB/vZ9QYRIgh+j90NHXQ5MXYcMzQS/+urR0gNsME4KwLbQGbd= 8eA Ie0jNu0lEdqNjHxS0lPD4mE2Z153nQvnWxFAmbUYKaSyAkUNOuVquGRk4UsS94Jl4P8rnZ1+H= Swi JQXQSuMYESjmgkTw37BUcmUXfh3qiYZBMq9N027QFontVmICnNessVyqPQ9RCj96Yuu/0BjIa= Z6b 9Vjc7O/LLt/GgxGIdeer8k7u3E3QyhwtvxJDlJ+kjhHjYmpHSzIDRCLqGwmk4FKnrkqh49j21= gh2 YWmZ7kJ3rcEjx6wPJ8fxaoVBAIg3szbspGqR1YKW1cMfs75hFvMMrjOiGTgXUwdjR5QOu+a+2= yeA pkZ0zRfHzVcS9eWxyMGPk7fc0tkpQ07uBi3cW1sOV0H+NoIdtiDXkihb8N+zXiz/qZwdj5/hi= YcB 54JjxACzk4V3DKu4NCIAkfuMTBIoTkUFdRpngaC3Jf0PM9Bv1bSmNMSQGEWjKHOUnC6+xi2Dh= fF5 9PGZIrHad1da2pVF0SFnEPCMJG4iXicTw36trJYfrsLBfwQTAQIAKQUCU3X3YAIbAwUJCWYBg= AcL CQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEHE7X+KcFF1FITkP/R+JT8lQova36BfsrdfMP= v3C ApwE/nyyf1SddYojRteCo1cJbYmpyV8dw42am01D3j4po+pYGN7p3DSbF2zSSJkdGC4X0COVI= 4aV 3AO2MPOe/RvszRgcnmP5VLjnokN6pOOBkdEovqg+O3zRG4DScaWxnjIddoirNFpJ5sssH/oNL= 0bZ RzkPmtHOezIS5D9PEDk24XGYTURPoHqNsQ40pdvtxLFU7kR5D8xTDzBQjnnBSBJJId7T2O0BM= xDx GVv7iSfrQHBM2rLNLizSJkzr5do43DlHI5IoNy4vNsEvaUkgEonR/BDIoxuGWpLZ/WZwTuYPq= HYA cDYYzJOm+Hs9N8B4HAxe3BdfpWBiVT+lpsoBrDk/q7xZ+I7Axg5u6nklNRvRBwqJhEKKz+kgR= WGp FpsXuslNDdTiD9h1c398F2yDe4XFCQfCBTzTDDQVHHh2y+ytf812WfYIbfkM7HtjoBshyqrkG= XlR ckMMAq7bkIQDYD+UKDUVoDCt8sDgoV7rraMtFRiLmD57/VUfDlQMddmZGCMgmGpSktzg7xHzc= 3Z3 ZBAuiF2aIcofp6ZhH+2fND5IBnyl0FGuK5hSky5ZgO4QAdGxKmOVj3+1MUV/oif6ls+QVshuS= 86T 9Xnwa7QuHBW/L0BnHDCO4JDPjJKgO5zbqexr5yESElkFIFwHyFrDzsFNBFDEdwIBEACsXcBns= 4YG VTUGMVKVGEocPffmAhAY89XSk1c1qWPngieUtZ2GoiG+a8IKAqYIjfpuV/YXX8i9mXuGAGJvf= 6rR hpPos8v76y3qoFFrPsFjNaiTTTvPn1oNRT+Br5KWjJaDomGkmQe5bGrok6ETK4VgRdYWPib7I= bTL UX1rzfaKvDP219HTsdWj/cdE3QGTZjekJUiJqgqSS8SmaBNtFm2T18r3gdx6+Xq0kJPW421Ia= Xtu xbyD3MTBVJYEfY+rEvVfMUi9rvsfCG0djJOh8954D8AhVY58x7aszhHddTeQlXxUdwNpyJFFo= FFh pj0LvmhCH84eaf+9eW8VqegPDzE2MJ/Oe+bftYS9qtIx4MMHRU5Wl7g2x3QUhsmyev3BmhBvq= Fzo 6TmBZ1bjp2MXZqQw2d5YXJNb0Vtr9qgV1EqnoG7Lf5q5wcENYAJDVeOzOMxUnM3u2VYbt8GMu= 3QI TxpHw4lOukzarmEmAq3EwwzBxFKKmD9gvAbkAGmimONRiQSY9OBEW4XLmOqy9b7pnoS+6x0Oq= v8l ELvz9TJ2Kh5urXJ/7LOvof9z3R0g7Hn7AWn1Y+0hUKN1vRqziJdIFqZ7kcViiKYAKfYiDPlHS= AVg uc3qvok0P8A3uS5qvkz2yC3C5Jt913FoNVu3ny0/UCDjpSAqC3qTXMx3otwLDLv/dwARAQABw= sF8 BBgBAgAmAhsMFiEE5QrdnbBX9Ppk4bbPcTtf4pwUXUUFAlv+TloFCRSf2NgACgkQcTtf4pwUX= UWz cw//ckxWc2Zyd58jjZxpMG1hpGHJVMyi+1aC12mCozlKuGDUBhbEbs6z8INlAQh9ic5dh9jXW= 8Wc lJglzo1Bm1naQOUmCFLh2WgV/0Om9vqDeJ0r5J2xcoBesiAflt/2dBHn3sZHivwq46c2/pMl9= 5LA oA9z+4lZLBCjL64wo9QZujrDoSlUTKMnmfTKYzvUqF4Y7394b3cwi4WNlR3CeqAzU5f+RjGlI= pCT P2h+ui7L8JvPCBLzy6lcEm6NJayUIMDyFKYtlJdiPOVtSveZyrFjx6qWrIHogOXTorTZrtysB= i8g AoU+7h7dOBswi0vnjftyH7S6M8N0K+LKnRj8zBjajyAcBRuvXP+tfvIPHUMnkWifgMLhrMUgT= ZHX 4V4DVjNHzVuAxr+yIHGLUgn6sSrYnYX8aCK37cByLO78563LaT/p7WD56R5grBe0HEaoarixV= mov v4GzI3GGNLBx+GraRAtvbPsol0sZ0OZWKWVL1/meHi7Fe5EFYeoI5/xANT1Xm+GMnLGrt6CH4= 4Fa J0rUQ900ZGf69laS+pniyasFgdtiUeCLCcUww9k6jUq5Sa1npJYFVJqnuush2cUXWG5Z9DFZ2= Jg7 LWvZqUc2rt0B8+AIWWfEGNoh3KgziYAnpr+5iH7wMIsgvMwRrJmB2S4ixQUNVeE06B+VUDKv1= Bkf mRHGwE0ETSg45AEIANeD/h9XEUDi0xZYKQGk/cw5Kih5spOB3UE4m6JKhv+3vrH9M7Zxt88Cs= naM 7jnbUm6iBsTCn40FrYl/20G+iJtAQiblvKdNS5Ivk0wWor7hTZMRAKzqmPX+xUDPgfu+8N++0= aGu gdAfKsGELJxRim1tRT7ntS+8fWoP2qkn+Mv8DCgUQSZGtwbWQeCRsBHuKfA7uPJHLUzwdgPa5= XAz fWw6ggFvpA8XBlKuT/duSgSvyKMUZ5Z6TiRClol20YwVfsFXxZmzr453obGy28ckS8JnLRxg/= 6cY dWH6Ex+bhI4gcZORUDeY6lRisIB1s3PIPZYv0gKRO5moJawZcAvw4LUAEQEAAcLAXwQgAQIAC= QUC U3X1IAIdAAAKCRBuRRqDPvSezXPkB/0ddadFpDaInaoNvlCg9iN4c/rMzfkw4G6nMAbwSqNQ6= ixF WLIirXi/YV4/O5gTpEdpT5j62AfqCM3rB+FeyHFLd69y9kFyTde16NsgGLmSAnpZa6Y9wCg70= Pyb tcCE/hIyENYKfLYj1IW5Olc5plLzsfOTTaMTXiG9WZ9j+YxQ2ge4UucqSc4sSttf8WZJVqQsv= +a0 GtC1pABjoMmv6Xn8PrTF43VUiOFy1XdYYNLLGPYP4fSclJk7K2q+IHDdUU3FzzbM2+i3HF8fV= aCv q03oVLtDMuhxtLDHT845iDoGnNxKMqeZdDlpGLKhw72YV/cP+N+WBdVzHywv6LUmhdSewsBfB= CAB AgAJBQJQxHiSAh0AAAoJEG5FGoM+9J7NiowH/iyQWOPjm8nf0vkh2YCtqCNA6AH4AH8mOZVhN= qfo ++B6cfX5w2WyFXs97MMyPuVJjg51wFPLIjmVREVkWHsdGYCK8ipyMRp+aAGZkq7lFreCqD78j= y1I AuAaGq4ewKBtt9VqX1n09KfQBm+uPhiDSYYpDeVFvuD4NWlfq50IviWe9+DdpMFhDaKf3jaTi= ZFa fRzX2i8myWvX3hF6rwxACedcTuJR74YC/pW6ZMVe1+13A7tZEXwGd6H2zkY0HH+ltNv/Im+H2= WQo DbXYmKzpe+0leBY3bL6+2+eZuKKzhhHbnwnBTubo6QIXXYW575Pb+6ascVebFooRD4EJuDnhY= OzN GWpvbl95IDwxMHdhbGxzQGdtYWlsLmNvbT7CwH4EEwECACgCGwMGCwkIBwMCBhUIAgkKCwQWA= gMB Ah4BAheABQJQxHW4BQkDnSVcAAoJEG5FGoM+9J7N9EkH/3heEJaIwbrjq3RMywLTmOGX1NxBK= 6lz CxjRZcOK83hg3CdQu7b0Cvd5jubWKNdER1JoIyE4MVmDbUIdZQHGY4boG7torVGI+k6EUGQTu= p1P Af9YNXqAZLxQQUc30pxowKILBOwpT6Dvy0RVd2ddglrKYnG7hH9uoGwowUOVMUeQ1hxYpDoTt= zN7 L3TfiBOD0aQ82QJYAE5/mzwAJAYV+qfCNKOthTPHcrRsdzKT1Sjfupmi9XF+U+Kp8rxqa+EVG= vLY HtgLbLa+BgUc20MjMJ3Y9cBHNHHr4ZtXRTVN0LC4Ui1T93JttwSPHld5ZDXxlaMFDD5MDJ4oX= dmL qjUll9zOwE0ETSg45AEIALRd3uUSAqv+sSOEpKPKONCcJx9Yv4GKpaBMg1Q1K2Dw73Im/B9p7= xUF 0ZN9OBR5l/Ho42W1vCTZMwYXuJkLYRFpXXVALTMHI9k2ADhqMvoxe044zS3q7Wd0dIQOBe7Gb= Ue3 rU+amvp+SF7qvB0AL3MK3MWEsXiHZUomj9dbEsWeo+5rZnGe51U0csPIUv40NRXBdtMIPVyH8= Osb n6EMjA1xvoDOqLFSrtAWuvRDlfsF7mQC/A5X6zPTG2dS2ooqkkIm9M7o3Yx2OwBRUfhexVsU0= r8S eNdaAW0fYGYhw36PUGYrwOXuNxeUnlYt/wsxLjKsjGkhJPx7bN5Ex4aXpdsAEQEAAcLAXwQYA= QIA CQUCTSg45AIbDAAKCRBuRRqDPvSezTT2B/9Q2tyuSxHlsF1DK+bT/JU300ANWGWDyo8v/UOVF= uhJ W5s0at+TfrbwWtdDEEFzLpSxrjUxcxECzbi63DLqlxS/Ytge7Fccc8BjVpZAIexIXiYKtdUV0= hcc I3soGpKFPr/eDKxnjBVG/+OBaYU/yjUPKA+bhpKdkXC3khzATxIbstfbgu8F9PaGQpDKM9thy= BDJ VeVfMoE0RvLtGyvbUWGFiGrjQw1sOe+xLVLV+ZhZnsGU4zFmrRoLNipJzIopPIOjrIlzIBm9X= BY3 GkCWTg0rx86v4dDW9d1SNGhZ0lgQ0pA7q0ODWl803L5cOLmdvcOvvsH0pGkS+odZw0klsvVh =3DtNbV -----END PGP PUBLIC KEY BLOCK----- --------------0C45A15C0F8DEDAA9F16A05E-- --Jmx3zFE44zfA7mi0Eid1J9OZ8loKx6wYX-- --lpWmPrvO8ScwLWAOAnLi9NNDCMGDb70k1 Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEE5QrdnbBX9Ppk4bbPcTtf4pwUXUUFAl+gpQUFAwAAAAAACgkQcTtf4pwUXUV5 5Q/8DxkJ407d9xSQ89YI0xa2a0NbPLvHBcJxHZXDSXCMVWZ4JqFfUM4FveIuqlQ+P4gZEu9n9WT1 v+WLOw5/GtFFOTDJDnTOmTMhmKYDjZkDWQCN/4XGrTE7eqP2iNmiZaJ6qOzJiT32nX+HB7QScsmP qGMxQk1+5fhDf7yHaZ4qJ/og9qCbeuDNeMiZ9H00AlTVBZcIryM0i0BL5PEVbWlzIxu/dN5O4WoM bqkphnUCiqBBVpmvzncwPrBQXup3FXBhgLmJQDDjJL3792MkBIITDpicuDTUhhxXh7ZXcg43vdZM b92+OwHspXT1Pk4+S7PCGa1ugAOdujqfMIqiXRFyeW1+Cz+6ivZTXBWl/EANjlK0VF7LRnE+eQra v8+dGPtN0SAraV7w/bUf/jVTZIwcpi6acWjifbUZxSt3zoV0AdDV2aQZfAx8JyemOmg0jAG6+0j6 Myfn7IFpQWwA+cVMr5ne9dOZMPMY9LxAsbiHQCfyp3pPauS7soWny4uZJOvrCCe6QSHeu77xhDMh Y9l2sBCgqQcTU7w09gm+IUlnQyAFzk46exezQuKnqRTbAH8RP4NxTfcoSNUq0clw0bEaMnDby5+e 8LjdTmXEEVNA/cPj7t+STzg/ttAYebMgI44II/YL0aOz37EYEpBydEIiWVK0+BU9iGJMEcyhHAox BsA= =sxv3 -----END PGP SIGNATURE----- --lpWmPrvO8ScwLWAOAnLi9NNDCMGDb70k1--