From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <10walls@gmail.com> Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by sourceware.org (Postfix) with ESMTPS id B44F33857804 for ; Wed, 25 Nov 2020 02:25:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B44F33857804 Received: by mail-pf1-x429.google.com with SMTP id s21so868653pfu.13 for ; Tue, 24 Nov 2020 18:25:15 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:references:from:subject:message-id:date :user-agent:mime-version:in-reply-to; bh=Ub5rirP3JTguwSEWDuKMY81HVRgNRni/HDFTEkZpJ34=; b=Yi8ee6Fpr6a2Er8fObSd8NZplZWCKT9mlrq5Ia5f9QqOK4xF4Uo6ZOfRvfHt51TtOf NjFM4bAK3/hmTYWJc0OJSyBbYeLPa78LuUqWP8t32acno6DrVy+cSMIV8B9z3gLdFKYS tp+eKC3h41hFE6m/IHPrVSWfhg054DGOVfS6hqGZ7hDoG4YtAmSMleq9zy735FA15ySw gWqXPbpKJX0Ccydy7HDXw930DV7fuHDpSUTU95PkwrJYuInrp/MhtAEUMvVSiZiVcnAW bS3ajKXJxEi5TeFdD+S/1gMJd3Vi31reDd4dqnoHNRf4L8jhust4fh7vB9otSyZQZa0l 3gfA== X-Gm-Message-State: AOAM530KslgXa9Na1/plmmrESMlcKVAaEfgKDOaChXSjQ3BbpvDS/XPE dt4mNBauNzLvO2vVenuDdj8O7vMNWn8= X-Google-Smtp-Source: ABdhPJzkx+LQqB4AHT8FxKN4xo6puJ6zJLP0h6hxGMAkqYZt/akZgeFiRHYW4RruSnvwg0+V+1etfQ== X-Received: by 2002:a62:3205:0:b029:197:f692:6a8b with SMTP id y5-20020a6232050000b0290197f6926a8bmr1184445pfy.2.1606271114406; Tue, 24 Nov 2020 18:25:14 -0800 (PST) Received: from ?IPv6:2001:f40:91b::3:d7e0? ([2001:f40:91b::3:d7e0]) by smtp.gmail.com with ESMTPSA id s21sm425962pgk.52.2020.11.24.18.25.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 24 Nov 2020 18:25:13 -0800 (PST) To: sten.kristian.ivarsson@gmail.com, 'The Cygwin Mailing List' References: <000a01d6be5b$3808cad0$a81a6070$@gmail.com> <87a2c99c-045c-e815-4c03-bab7a89a025b@cs.umass.edu> <000201d6bf17$7cc4beb0$764e3c10$@gmail.com> <9e881c01-e883-ecd5-883a-e1ac55c740c7@gmail.com> <000601d6c173$aa55d540$ff017fc0$@gmail.com> <000a01d6c244$b64bbd70$22e33850$@gmail.com> <001801d6c255$f0e115a0$d2a340e0$@gmail.com> <2d906235-e206-f6c6-5302-9b11bbe484c7@gmail.com> <002d01d6c26a$45931f80$d0b95e80$@gmail.com> From: Jonathan Yong <10walls@gmail.com> Subject: Re: Sv: Sv: Sv: Sv: Sv: Sv: g++ and c++17 filesystem Message-ID: Date: Wed, 25 Nov 2020 02:25:07 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.2 MIME-Version: 1.0 In-Reply-To: <002d01d6c26a$45931f80$d0b95e80$@gmail.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="4iN1tfotbE6s9GA2bAQ3dQ8JErfKdm479" X-Spam-Status: No, score=-3032.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GB_TO_NAME_FREEMAIL, 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: cygwin@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Nov 2020 02:25:17 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --4iN1tfotbE6s9GA2bAQ3dQ8JErfKdm479 Content-Type: multipart/mixed; boundary="Yxh2U5VeIsORao7K0SWlyc4AHNrdcFfv0"; protected-headers="v1" From: Jonathan Yong <10walls@gmail.com> To: sten.kristian.ivarsson@gmail.com, 'The Cygwin Mailing List' Message-ID: Subject: Re: Sv: Sv: Sv: Sv: Sv: Sv: g++ and c++17 filesystem References: <000a01d6be5b$3808cad0$a81a6070$@gmail.com> <87a2c99c-045c-e815-4c03-bab7a89a025b@cs.umass.edu> <000201d6bf17$7cc4beb0$764e3c10$@gmail.com> <9e881c01-e883-ecd5-883a-e1ac55c740c7@gmail.com> <000601d6c173$aa55d540$ff017fc0$@gmail.com> <000a01d6c244$b64bbd70$22e33850$@gmail.com> <001801d6c255$f0e115a0$d2a340e0$@gmail.com> <2d906235-e206-f6c6-5302-9b11bbe484c7@gmail.com> <002d01d6c26a$45931f80$d0b95e80$@gmail.com> In-Reply-To: <002d01d6c26a$45931f80$d0b95e80$@gmail.com> --Yxh2U5VeIsORao7K0SWlyc4AHNrdcFfv0 Content-Type: multipart/mixed; boundary="------------D9DFB8D5561A8950DDC2C2FF" Content-Language: en-US This is a multi-part message in MIME format. --------------D9DFB8D5561A8950DDC2C2FF Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable On 11/24/20 2:01 PM, sten.kristian.ivarsson@gmail.com wrote: >>> [snip] >>> >>>> std::filesystem POSIX mode is common to all POSIX platforms where >>>> backslashes are NOT directory separators. How do you make them accep= t >>>> your demands? How are you going to force POSIX platforms allow >>>> Windows specific code? >>> >>> I've been trying to say over and over again that our code doesn't >>> handle any Windows specific stuff and not anywhere have I claimed tha= t >>> anyone else need to handle Windows specific stuff either (except for >>> the internals of Cygwin of which Windows specific logic is already >>> present) >>> >>> I repeat; I don't expect any of the Cygwin-Posix-functions to accept >>> any Windows-style-paths (though some of them, as I repeatedly have >>> said, already does so) and I only expect that I can operate according= >>> to the C++-standard on an instantiated std::filesystem::path >>> >> >> How do you expect std::filesystem to do that when Windows paths are no= t >> even accepted in API calls? >=20 > What API-calls ? Cygwin-Posix-API-calls ? If so, you assume that std::f= ilesystem in Cygwin must be implemented using the underlaying Cygwin-Posi= x-API and maybe it must be of some reason, but I guess it even would be p= ossible to make it the other way around, i.e. quite a bunch of the Cygwin= -Posix-file-API-functions could be implemented by using some native std::= filesystem-implementation such as MinGW but I guess that not the whole Cy= gwin-Posix-file-API could be implemented that way and it would probably b= e some quite substantial rewrite of things that probably is not worth the= effort, but what I'm trying to say is that std::filesystem shipped with = Cygwin not necessarily have to be implemented totally with the underlayin= g Cygwin-Posix-API. It could be a mix to use whatever is appropriate and = in some circumstances some logic is needed to understand both kind of pat= hs >=20 >=20 > See more below >=20 >=20 >=20 No, std::filesystem runs on top of Cygwin, not under it, it would have=20 to use POSIX APIs to get anything done. GCC is not the platform system=20 library. >>>> Make it try to enter subdirectories every time std::filesystem is >>>> called? >>>> >>>> You refuse to understand that Cygwin is NOT Windows, it is a POSIX >>>> platform. Using Cygwin means complying with POSIX expectations and >>>> standards. >>>> >>>> I don't see how this conversation can continue if you still refuse t= o >>>> see Cygwin as something separate from Windows. Besides, you have >>>> already answered your question by ruling out MinGW, so Microsoft >>>> Visual Studio it is. >>> >>> I repeat (again); neither MinGW/MSVS is an option because we're tryin= g >>> to use Posix and C++ >>> >>> Just to be clear: >>> >>> - Our code DOESN'T handle Windows-style-paths explicitly in any way >>> - We DON'T expect Cygwin-Posix-file-related-functions to accept >>> Windows-style-paths >>> - We WOULD like std::filesystem to work according to the C++ ISO >>> standard >> >> Why would std::filesystem be an exception? How would it know if a >> backslash is part of a name and not a separator? How does it know when= to >> apply exceptions? What about mixed paths? >=20 > As I've said before, there are already exceptions. Some Cygwin-Posix-me= chanisms already understands both kinds of path's today >=20 > How are '\' handled as part of the name today ? I works perfectly well = in many circumstances, so I guess that there are quite a few exceptions a= lready >=20 Its not able to read your mind to find out your intentions, especially=20 when it comes to ambiguous strings like UNC or SMB paths, none of these=20 are remotely POSIX compliant. >> The C++ standard mentions separators, not specific characters, and the= >> forward slash is used under Cygwin, not the Windows backslash. >=20 > Exactly, I haven't stated anything else >=20 So use the forward slash, not backslash. >> The bigger question would be how would you expect a Cygwin application= to >> even accept a Windows paths. It should use *nix paths, as all Cygwin >> programs do >=20 > Cygwin (and thus applications build within Cygwin) already do accept Wi= ndows paths here and there as well as std::filesystem >=20 It does not. There are giant warnings telling you not to rely on it. > Applications don't have control of all the input that could come from U= I, environment, configuration, etc >=20 Garbage in, garbage out. The warnings tell you to use Unix paths. > What I'm trying to make a point of is that wouldn't it be good if appli= cations didn't have to care about that, because that is what libraries/fr= ameworks are for, to give an abstraction ? >=20 > Otherwise every application have to do something like where ever it han= dles some path >=20 > #ifdef _CYGWIN_ > // fix the path-representation to something with /cygdrive or such > ... > #endif >=20 Why? Cygwin is a POSIX system. The prefix isn't even necessarily=20 /cygdrive and you're just introducing more complications that falls=20 apart the moment the defaults change. > This is what we're hoping to avoid to do and that it could be done in t= he library we're using >=20 > The exact details of how to implement this and what challenges that wou= ld be is uninteresting before it could be settled as "Yeah, it would be a= good feature to let std::filesystem to be path-style-agnostic" >=20 > C++ applications do mostly use std::filesystem, std::ofstream, std::ifs= tream and do not mix that with Posix-file-mechanisms, but for Cygwin, /cy= gdrive/... in std::filesystem must of course be a valid path as well >=20 >=20 The C++ standard library APIs are wrappers around the Cygwin APIs like=20 open(3) and write(3), so a Windows path there would still fail. Just=20 because it comes from the C++ standard library, doesn't mean its=20 magically separated from the underlying system. > I can't stress this enough and point out that this community have alrea= dy decided to here and there make Cygwin be Windows-style-paths-aware, so= I cannot see that it would be that of a bad idea if it became even more = agnostic to what kind of path is used, but of course I understand it come= s with some challenges >=20 No, Windows paths are not supported, merely working as a side effect.=20 Are you going to demand POSIX compliant scripts to also handle Windows=20 paths next? >=20 > p.s. >=20 > We do have an open source product targeting the *nix-world as well = and at the same time we're trying to make it runnable on Windows, so this= is not just me be being stubborn >=20 But Cygwin is NOT Windows, you still refuse to accept this fact. Cygwin=20 programs have no reason to act as Windows applications, Cygwin programs=20 act like Cygwin programs. --------------D9DFB8D5561A8950DDC2C2FF 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----- --------------D9DFB8D5561A8950DDC2C2FF-- --Yxh2U5VeIsORao7K0SWlyc4AHNrdcFfv0-- --4iN1tfotbE6s9GA2bAQ3dQ8JErfKdm479 Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEE5QrdnbBX9Ppk4bbPcTtf4pwUXUUFAl+9wIMFAwAAAAAACgkQcTtf4pwUXUUE kw//fb1bRzv6xWdtWX3dT4WDC/aSWLK1PFadO1yXW731yIkwG/Ay55BUSkHN8WyVwLmUsF8eShTq y6V1vgN8dnsptV+vZzTCu4tshRjyK290U0VylZ9hJzjcedi2hNmlzkoh8PM99Nu7DtNG8Qco/2aC 4VBijmlbLXl9zMVQCtZ83d37cfjUogyY8TFgxOnQdksAby+4QP8ui30XoI/Q9jDbOCqmu43U69pJ iLs0321KK0zqH8caIUlqHCZFsHcviqQZKUehtnmpRUw9eQLimChiLK5Geza5U23r9NqeI58x25Qt YSvq7bMlvcSLu2iidK9HOUq9DZ+g7qOLPRxBuEn8/Y1L32mi+cZtcl9nnwGANNZh1JPprSiYIEUX TliQx735RDMvbej3Iof+ze0TFNfDgx3yPIUZvpK9sftmQ7k50Kk42rkCY/PeeAo7dAxeJjTv51FN DahJkcuQLKaCWW253KOQhuzV15Nz9QHWR8Lm/sryzO3hMbzYgEEnV9rLzH1WCpCcquYerb++IXci cHDgPVzbBh1T7bac+SVtRtxPXd416t/DJaDVdH3r1Oca/17Sh9gUBbF/YZKEW2I+gNOt1Y2pasUO QPPsLIFUVp5dzlhPS1UaLMk7BSC18ZE5LIYJ7foYbrOia1tT6y9GExmDPr1bvKuC19uxkVMXhN/z III= =9DxM -----END PGP SIGNATURE----- --4iN1tfotbE6s9GA2bAQ3dQ8JErfKdm479--