netcdf-1.0.19/0000755000000000000000000000000015126111435007772 5ustar00netcdf-1.0.19/.travis.yml0000644000000000000000000000041115126111435012077 0ustar00language: cpp sudo: required dist: trusty before_install: - sudo apt-get -qq update - sudo apt-get install -y octave liboctave-dev libnetcdf-dev netcdf-bin script: cd ..; mv octave-netcdf netcdf; octave --eval 'pkg install netcdf; pkg load netcdf; test_netcdf' netcdf-1.0.19/COPYING0000644000000000000000000010451315126111435011031 0ustar00 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . netcdf-1.0.19/DESCRIPTION0000644000000000000000000000076115126111435011504 0ustar00Name: netcdf Version: 1.0.19 Date: 2025-01-03 Author: Alexander Barth Maintainer: John Donoghue Title: netcdf Description: A NetCDF interface for Octave Depends: octave (>= 4.0.0) BuildRequires: netcdf-devel [Fedora] libnetcdf-dev [Debian], netcdf-bin [Debian] License: GPLv3+ Url: https://gnu-octave.github.io/octave-netcdf/ Repository: https://github.com/gnu-octave/octave-netcdf/ Tracker: https://github.com/gnu-octave/octave-netcdf/issues netcdf-1.0.19/INDEX0000644000000000000000000000246015126111435010566 0ustar00netcdf >> NetCDF interface High-level functions nccreate ncdisp ncinfo ncreadatt ncread ncwriteatt ncwrite ncwriteschema Low-level functions #! Library Functions netcdf.setDefaultFormat netcdf.inqLibVers netcdf.setChunkCache netcdf.getChunkCache #! File Operations netcdf.create netcdf.open netcdf.abort netcdf.sync netcdf.endDef netcdf.inq netcdf.inqFormat netcdf.inqUnlimDims netcdf.inqGrps netcdf.reDef netcdf.setFill netcdf.close #! Dimensions netcdf.defDim netcdf.renameDim netcdf.inqDim netcdf.inqDimID #! Groups netcdf.defGrp netcdf.inqGrpName netcdf.inqGrpNameFull netcdf.inqGrpParent netcdf.inqGrpFullNcid netcdf.inqNcid netcdf.inqVarIDs netcdf.inqDimIDs #! Variables netcdf.defVar netcdf.renameVar netcdf.defVarFill netcdf.inqVarFill netcdf.defVarDeflate netcdf.inqVarDeflate netcdf.defVarChunking netcdf.inqVarChunking netcdf.defVarFletcher32 netcdf.inqVarFletcher32 netcdf.putVar netcdf.getVar netcdf.inqVarID netcdf.inqVar #! Attributes netcdf.inqAttName netcdf.inqAttID netcdf.inqAtt netcdf.getAtt netcdf.putAtt netcdf.copyAtt netcdf.renameAtt netcdf.delAtt #! User-Defined Types netcdf.defVlen netcdf.inqUserType netcdf.inqVlen #! Utilities netcdf.getConstant netcdf.getConstantNames Test function test_netcdf netcdf-1.0.19/Makefile0000644000000000000000000002737715126111435011452 0ustar00## Copyright 2015-2016 Carnë Draug ## Copyright 2015-2016 Oliver Heimlich ## Copyright 2017 Julien Bect ## Copyright 2017 Olaf Till ## Copyright 2018-2023 John Donoghue ## ## Copying and distribution of this file, with or without modification, ## are permitted in any medium without royalty provided the copyright ## notice and this notice are preserved. This file is offered as-is, ## without any warranty. TOPDIR := $(shell pwd) ## Some basic tools (can be overriden using environment variables) SED ?= sed TAR ?= tar GREP ?= grep CUT ?= cut TR ?= tr TEXI2PDF ?= texi2pdf -q MAKEINFO ?= makeinfo MAKEINFO_HTML_OPTIONS := --no-headers --set-customization-variable 'COPIABLE_LINKS 0' --set-customization-variable 'COPIABLE_ANCHORS 0' --no-split # work out a possible help generator ifeq ($(strip $(QHELPGENERATOR)),) ifneq ($(shell qhelpgenerator-qt5 -v 2>/dev/null),) QHELPGENERATOR = qhelpgenerator-qt5 else ifneq ($(shell qcollectiongenerator-qt5 -v 2>/dev/null),) QHELPGENERATOR = qcollectiongenerator-qt5 else ifneq ($(shell qcollectiongenerator -qt5 -v 2>/dev/null),) QHELPGENERATOR = qcollectiongenerator -qt5 #else ifneq ($(shell qhelpgenerator -qt5 -v 2>/dev/null),) # # qt4 version wont error on-qt5 but also wont work # QHELPGENERATOR = qhelpgenerator -qt5 else QHELPGENERATOR = true endif endif ## Note the use of ':=' (immediate set) and not just '=' (lazy set). ## http://stackoverflow.com/a/448939/1609556 package := $(shell $(GREP) "^Name: " DESCRIPTION | $(CUT) -f2 -d" " | \ $(TR) '[:upper:]' '[:lower:]') version := $(shell $(GREP) "^Version: " DESCRIPTION | $(CUT) -f2 -d" ") pkg_date := $(shell $(GREP) "^Date: " DESCRIPTION | $(CUT) -f2 -d" ") pkg_year := $(shell $(GREP) "^Date: " DESCRIPTION | $(CUT) -f2 -d" " | $(CUT) -f1 -d"-") ## These are the paths that will be created for the releases. target_dir := target release_dir := $(target_dir)/$(package)-$(version) release_tarball := $(target_dir)/$(package)-$(version).tar.gz html_dir := $(target_dir)/$(package)-html html_tarball := $(target_dir)/$(package)-html.tar.gz ## Using $(realpath ...) avoids problems with symlinks due to bug ## #50994 in Octaves scripts/pkg/private/install.m. But at least the ## release directory above is needed in the relative form, for 'git ## archive --format=tar --prefix=$(release_dir). real_target_dir := $(realpath .)/$(target_dir) installation_dir := $(real_target_dir)/.installation package_list := $(installation_dir)/.octave_packages install_stamp := $(installation_dir)/.install_stamp ## These can be set by environment variables which allow to easily ## test with different Octave versions. ifndef OCTAVE OCTAVE := octave endif OCTAVE := $(OCTAVE) --no-gui --silent --norc MKOCTFILE ?= mkoctfile ## Command used to set permissions before creating tarballs FIX_PERMISSIONS ?= chmod -R a+rX,u+w,go-w,ug-s GIT := git GIT_TIMESTAMP := $(firstword $(shell $(GIT) log -n1 --date=unix --format="%ad")) ## Detect which VCS is used vcs := $(if $(wildcard .hg),hg,$(if $(wildcard .git),git,unknown)) ifeq ($(vcs),hg) release_dir_dep := .hg/dirstate endif ifeq ($(vcs),git) release_dir_dep := .git/index endif TAR_REPRODUCIBLE_OPTIONS := --sort=name --mtime="@$(GIT_TIMESTAMP)" --owner=0 --group=0 --numeric-owner TAR_OPTIONS := --format=ustar $(TAR_REPRODUCIBLE_OPTIONS) ## .PHONY indicates targets that are not filenames ## (https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html) .PHONY: help ## make will display the command before runnning them. Use @command ## to not display it (makes specially sense for echo). help: @echo "Targets:" @echo " dist - Create $(release_tarball) for release." @echo " html - Create $(html_tarball) for release." @echo " release - Create both of the above and show md5sums." @echo " install - Install the package in $(installation_dir), where it is not visible in a normal Octave session." @echo " check - Execute package tests." @echo " doctest - Test the help texts with the doctest package." @echo " run - Run Octave with the package installed in $(installation_dir) in the path." @echo " clean - Remove everything made with this Makefile." ## ## Recipes for release tarballs (package + html) ## .PHONY: release dist html clean-tarballs clean-unpacked-release ## To make a release, build the distribution and html tarballs. release: dist html md5sum $(release_tarball) $(html_tarball) @echo "Upload @ https://sourceforge.net/p/octave/package-releases/new/" @echo " and note the changeset the release corresponds to" ## dist and html targets are only PHONY/alias targets to the release ## and html tarballs. dist: $(release_tarball) html: $(html_tarball) ## An implicit rule with a recipe to build the tarballs correctly. %.tar.gz: % $(TAR) -cf - $(TAR_OPTIONS) -C "$(target_dir)/" "$(notdir $<)" | gzip -9n > "$@" clean-tarballs: @echo "## Cleaning release tarballs (package + html)..." -$(RM) $(release_tarball) $(html_tarball) @echo ## Create the unpacked package. ## ## Notes: ## * having ".hg/dirstate" (or ".git/index") as a prerequesite means it is ## only rebuilt if we are at a different commit. ## * the variable RM usually defaults to "rm -f" ## * having this recipe separate from the one that makes the tarball ## makes it easy to have packages in alternative formats (such as zip) ## * note that if a commands needs to be run in a specific directory, ## the command to "cd" needs to be on the same line. Each line restores ## the original working directory. $(release_dir): $(release_dir_dep) -$(RM) -r "$@" ifeq (${vcs},hg) hg archive --exclude ".hg*" --type files "$@" endif ifeq (${vcs},git) git archive --format=tar --prefix="$@/" HEAD | $(TAR) -x $(RM) "$@/.gitignore" endif ## Don't fall back to run the supposed necessary contents of ## 'bootstrap' here. Users are better off if they provide ## 'bootstrap'. Administrators, checking build reproducibility, can ## put in the missing 'bootstrap' file if they feel they know its ## necessary contents. ifneq (,$(wildcard src/autogen.sh)) cd "$@/src" && ./autogen.sh && $(RM) -r "autom4te.cache" endif ifneq (,$(wildcard doc)) $(MAKE) -C "$@" docs #cd "$@" && $(RM) -f doc/mkfuncdocs.py doc/mkqhcp.py endif cd "$@" && $(RM) -rf devel ## Uncomment this if your src/Makefile.in has these targets for ## pre-building something for the release (e.g. documentation). # cd "$@/src" && ./configure && $(MAKE) prebuild && \ # $(MAKE) distclean && $(RM) Makefile ## ${FIX_PERMISSIONS} "$@" run_in_place = $(OCTAVE) --eval ' pkg ("local_list", "$(package_list)"); ' \ --eval ' pkg ("load", "$(package)"); ' # html_options = --eval 'options = get_html_options ("octave-forge");' ## Uncomment this for package documentation. html_options = --eval 'options = get_html_options ("octave-forge");' #html_options = --eval 'options = get_html_options ("octave-forge");' \ # --eval 'options.package_doc = "$(package).texi";' ifneq (,$(wildcard doc)) html_options += \ --eval 'options.package_doc = "octave-$(package).texi";' \ --eval 'options.package_doc_options = [options.package_doc_options " --css-include=octave-$(package).css"];' endif $(html_dir): $(install_stamp) $(RM) -r "$@"; $(run_in_place) \ --eval ' pkg load generate_html; ' \ $(html_options) \ --eval ' generate_package_html ("$(package)", "$@", options); '; $(FIX_PERMISSIONS) "$@"; clean-unpacked-release: @echo "## Cleaning unpacked release tarballs (package + html)..." -$(RM) -r $(release_dir) $(html_dir) @echo ## ## Recipes for installing the package. ## .PHONY: install clean-install octave_install_commands = \ ' llist_path = pkg ("local_list"); \ mkdir ("$(installation_dir)"); \ load (llist_path); \ local_packages(cellfun (@ (x) strcmp ("$(package)", x.name), local_packages)) = []; \ save ("$(package_list)", "local_packages"); \ pkg ("local_list", "$(package_list)"); \ pkg ("prefix", "$(installation_dir)", "$(installation_dir)"); \ pkg ("install", "-local", "-verbose", "$(release_tarball)"); ' ## Install unconditionally. Maybe useful for testing installation with ## different versions of Octave. install: $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) ## Install only if installation (under target/...) is not current. $(install_stamp): $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) clean-install: @echo "## Cleaning installation under $(installation_dir) ..." -$(RM) -r $(installation_dir) @echo ## ## Recipes for testing purposes ## .PHONY: run doctest check ## Start an Octave session with the package directories on the path for ## interactice test of development sources. run: $(install_stamp) $(run_in_place) --persist ## Test example blocks in the documentation. Needs doctest package ## https://octave.sourceforge.io/doctest/index.html doctest: $(install_stamp) $(run_in_place) --eval 'pkg load doctest;' \ --eval "targets = '$(shell (cd inst && ls *.m) | $(CUT) -f2 -d@ | $(CUT) -f1 -d.)';" \ --eval "targets = strsplit (targets, ' '); doctest (targets);" ## Test package. octave_test_commands = \ ' pkgs = pkg("list", "$(package)"); \ dirs = {pkgs{1}.dir}; \ __run_test_suite__ (dirs, {}); ' ## the following works, too, but provides no overall summary output as ## __run_test_suite__ does: ## ## else cellfun (@runtests, horzcat (cellfun (@ (dir) ostrsplit (([~, dirs] = system (sprintf ("find %s -type d", dir))), "\n\r", true), dirs, "UniformOutput", false){:})); endif ' check: $(install_stamp) $(run_in_place) --eval $(octave_test_commands) ## ## Docs ## .PHONY: docs docs: doc/octave-$(package).pdf doc/octave-$(package).html doc/octave-$(package).qhc clean-docs: $(RM) -f doc/octave-$(package).info $(RM) -f doc/octave-$(package).pdf $(RM) -f doc/octave-$(package).html $(RM) -f doc/functions.texi $(RM) -f doc/version.texi $(RM) -f doc/octave-$(package).qhc doc/octave-$(package).qch doc/version.texi: $(release_dir_dep) @echo Generating $@ @echo "@c autogenerated from Makefile" > $@ @echo "@set VERSION $(version)" >> $@ @echo "@set PACKAGE $(package)" >> $@ @echo "@set DATE $(pkg_date)" >> $@ @echo "@set YEAR $(pkg_year)" >> $@ doc/octave-$(package).pdf: doc/octave-$(package).texi doc/functions.texi doc/version.texi cd doc && SOURCE_DATE_EPOCH=$(GIT_TIMESTAMP) $(TEXI2PDF) octave-$(package).texi # remove temp files cd doc && $(RM) -f octave-$(package).aux octave-$(package).cp octave-$(package).cps octave-$(package).fn octave-$(package).fns octave-$(package).log octave-$(package).toc doc/octave-$(package).html: doc/octave-$(package).texi doc/functions.texi doc/version.texi cd doc && SOURCE_DATE_EPOCH=$(GIT_TIMESTAMP) $(MAKEINFO) --html --css-ref=octave-$(package).css $(MAKEINFO_HTML_OPTIONS) --output=octave-${package}.html octave-$(package).texi doc/functions.texi: $(release_dir_dep) cd doc && ./mkfuncdocs.py --src-dir=../inst/ --src-dir=../src/ --allowscan ../INDEX | $(SED) 's/@seealso/@xseealso/g' > functions.texi doc/octave-$(package).qhc: doc/octave-$(package).html ifeq ($(QHELPGENERATOR),true) $(warning No QHELPGENERATOR ... skipping QT doc build) else cd doc && ./mkqhcp.py octave-$(package) && $(QHELPGENERATOR) octave-$(package).qhcp -o octave-$(package).qhc cd doc && $(RM) octave-$(package).qhcp octave-$(package).qhp endif ## ## CLEAN ## .PHONY: clean clean: clean-tarballs clean-unpacked-release clean-install clean-docs @echo "## Removing target directory (if empty)..." -test -e $(target_dir) && rmdir $(target_dir) @echo @echo "## Cleaning done" @echo netcdf-1.0.19/NEWS0000644000000000000000000000770615126111435010503 0ustar00Summary of important user-visible changes for netcdf 1.0.19: ------------------------------------------------------------------- ** Minor doc updates Summary of important user-visible changes for netcdf 1.0.18: ------------------------------------------------------------------- ** Minor bug fixes ** Minor doc updates Summary of important user-visible changes for netcdf 1.0.17: ------------------------------------------------------------------- ** Fix compiling Octave 9+ ** Add +netcdf package functions ** minor doc updates Summary of important user-visible changes for netcdf 1.0.16: ------------------------------------------------------------------- ** Fix compiling Octave 8+ ** minor doc updates Summary of important user-visible changes for netcdf 1.0.15: ------------------------------------------------------------------- ** Update license to use GPLv3+ ** Add NC_VLEN processing as a user type ** Add user manual ** add warning in getVar if try to read negative ** minor doc updates ** Update requirement of octave version to 4.0+ Summary of important user-visible changes for netcdf 1.0.14: ------------------------------------------------------------------- ** Add NC_STRING type as an octave type ** Minor bugfixes Summary of important user-visible changes for netcdf 1.0.13: ------------------------------------------------------------------- ** Update to depend on Octave 3.8+ ** Update for Octave 5 and newer Summary of important user-visible changes for netcdf 1.0.12: ------------------------------------------------------------------- ** Fix bug #51443: configure in dev octave 4.3.0+ Summary of important user-visible changes for netcdf 1.0.11: ------------------------------------------------------------------- ** Fix cleaning of files (thanks to Rafael Laboissiere) Summary of important user-visible changes for netcdf 1.0.10: ------------------------------------------------------------------- ** Fix bug #46060: building with the --enable-64 option Summary of important user-visible changes for netcdf 1.0.9: ------------------------------------------------------------------- ** Fix bug #47014: writing NaNs Summary of important user-visible changes for netcdf 1.0.8: ------------------------------------------------------------------- ** Fix bug #45190, #46747: netcdf(nccreate) to enable DeflateLevel in nccreate ** Fix bug #46798: using the right delete operator Summary of important user-visible changes for netcdf 1.0.7: ------------------------------------------------------------------- ** Apply patch from John Donoghue to allow cross-compilation (bug #44837) Summary of important user-visible changes for netcdf 1.0.6: ------------------------------------------------------------------- ** ncread: do not replace _FillValue by NaNs for characters ** ncdisp: fix for attributes value with %-sign Summary of important user-visible changes for netcdf 1.0.5: ------------------------------------------------------------------- ** Implement DeflateLevel in nccreate Summary of important user-visible changes for netcdf 1.0.4: ------------------------------------------------------------------- ** Work-around for problem in netcdf 4.1.3 for reading a unlimited variable of current size 0 Summary of important user-visible changes for netcdf 1.0.3: ------------------------------------------------------------------- ** remove NC_INDEPENDENT and NC_COLLECTIVE which are no longer defined in netcdf 4.3.1 Summary of important user-visible changes for netcdf 1.0.2: ------------------------------------------------------------------- ** Avoid obsolete isequalwithequalnans functions Summary of important user-visible changes for netcdf 1.0.1: ------------------------------------------------------------------- ** Fix bug preventing compilation on 32-bit platforms. Summary of important user-visible changes for netcdf 1.0.0: ------------------------------------------------------------------- ** Initial release netcdf-1.0.19/PKG_ADD0000644000000000000000000001231215126111435011005 0ustar00% File automatically generated by PKG_ADD.sh autoload ("netcdf_getConstant", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getConstantNames", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqLibVers", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_setDefaultFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_setChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_create", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_open", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_abort", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_sync", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_setFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inq", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqUnlimDims", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_renameDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_renameVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_endDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_reDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_putVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_close", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqAttName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqAttID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_putAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_copyAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_renameAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_delAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqDimID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqDimIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defGrp", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrps", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpNameFull", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpParent", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpFullNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqUserType", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); netcdf-1.0.19/PKG_DEL0000644000000000000000000001327115126111435011026 0ustar00% File automatically generated by PKG_ADD.sh autoload ("netcdf_getConstant", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getConstantNames", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqLibVers", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_setDefaultFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_setChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_create", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_open", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_abort", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_sync", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_setFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inq", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqUnlimDims", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_renameDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_renameVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_endDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_reDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_putVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_close", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqAttName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqAttID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_putAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_copyAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_renameAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_delAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqDimID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqDimIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defGrp", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrps", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpNameFull", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpParent", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpFullNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqUserType", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); netcdf-1.0.19/README.md0000644000000000000000000000236615126111435011260 0ustar00# Octave NetCDF A NetCDF interface for Octave ## Introduction The Octave NetCDF toolkit implements the MATLAB NetCDF interface for GNU Octave. ## Requirements * Octave 4.0+ * [Netcdf 4.1+](https://www.unidata.ucar.edu/software/netcdf) Your NetCDF library install needs to include nc-config and development headers ## Installing To install, run the octave package manager: 1. If running Windows, the package may already be installed: type pkg list, to view the installed packages. 2. To install from source forge/package index: `pkg install -forge netcdf` 3. To install from a local tarball. `pkg install netcdf-XXXXXXX.tar.gz` Where XXXXXXX is the version of the the downloaded tarball. ## Usage 1. Load the package. `pkg load netcdf` (Required each time Octave is started) 2. Use the high level function calls (nccreate, ncinfo etc) or use the low level functions in the netcdf namespace ## Documentation See the function list and documentation [online](https://gnu-octave.github.io/octave-netcdf/index) Documentation is also available using octave help. For example: `help nccreate` `help netcdf.open` ## Bugs and Issues Please report issues on the [tracker](https://github.com/gnu-octave/octave-netcdf/issues) netcdf-1.0.19/doc/0000755000000000000000000000000015126111435010537 5ustar00netcdf-1.0.19/doc/functions.texi0000644000000000000000000010756215126111435013455 0ustar00@c --------------------------------------------------- @node High-level functions @section High-level functions @cindex High-level functions @c High-level functions nccreate @c ----------------------------------------- @subsection nccreate @cindex nccreate @deftypefn {Function File} {} nccreate(@var{filename},@var{varname}) @deftypefnx {Function File} {} nccreate(@var{filename},@var{varname},"property",@var{value},...) Create the variable @var{varname} in the file @var{filename}. @subsubheading Properties The following properties can be used: @itemize @item "Dimensions": a cell array with the dimension names followed by their length or Inf if the dimension is unlimited. If the property is omitted, a scalar variable is created. @item "Datatype": a string with the Octave data type name (see @code{ncinfo} for the correspondence between Octave and NetCDF data types). The default data type is a "double". @item "Format": This can be "netcdf4_classic" (default), "classic", "64bit" or "netcdf4". @item "FillValue": the value used for undefined elements of the NetCDF variable. @item "ChunkSize": the size of the data chunks. If omitted, the variable is not chunked. @item "DeflateLevel": The deflate level for compression. It can be the string "disable" (default) for no compression or an integer between 0 (no compression) and 9 (maximum compression). @item "Shuffle": true for enabling the shuffle filter or false (default) for disabling it. @end itemize @subsubheading Example @example nccreate("test.nc","temp","Dimensions",@{"lon",10,"lat",20@},"Format","classic"); ncdisp("test.nc"); @end example @xseealso{ncwrite} @end deftypefn @c High-level functions ncdisp @c ----------------------------------------- @subsection ncdisp @cindex ncdisp @deftypefn {Function File} {} ncdisp (@var{filename}) Display meta-data of the NetCDF file @var{filename} @subsubheading Example @example ncdisp("test.nc"); @end example @xseealso{ncinfo} @end deftypefn @c High-level functions ncinfo @c ----------------------------------------- @subsection ncinfo @cindex ncinfo @deftypefn {Function File} {@var{info} =} ncinfo (@var{filename}) @deftypefnx {Function File} {@var{info} =} ncinfo (@var{filename}, @var{varname}) @deftypefnx {Function File} {@var{info} =} ncinfo (@var{filename}, @var{groupname}) Return information about an entire NetCDF file @var{filename} (i.e. the root group "/"), about the variable called @var{varname} or the group called @var{groupname}. The structure @var{info} has always the following fields: @itemize @item @var{Filename}: the name of the NetCDF file @item @var{Format}: one of the strings "CLASSIC", "64BIT", "NETCDF4" or "NETCDF4_CLASSIC" @end itemize The structure @var{info} has additional fields depending on whether a group of variable is queried. @subsubheading Groups Groups are returned as an array structure with the following fields: @itemize @item @var{Name}: the group name. The root group is named "/". @item @var{Dimensions}: a array structure with the dimensions. @item @var{Variables}: a array structure with the variables. @item @var{Attributes}: a array structure with global attributes. @item @var{Groups}: a array structure (one for each group) with the same fields as this structure. @end itemize @subsubheading Dimensions Dimensions are returned as an array structure with the following fields: @itemize @item @var{Name}: the name of the dimension @item @var{Length}: the length of the dimension @item @var{Unlimited}: true of the dimension has no fixed limited, false @end itemize @subsubheading Variables Variables are returned as an array structure with the following fields: @itemize @item @var{Name}: the name of the dimension @item @var{Dimensions}: array structure of all dimensions of this variable with the same structure as above. @item @var{Size}: array with the size of the variable @item @var{Datatype}: string with the corresponding octave data-type (see below) @item @var{Attributes}: a array structure of attributes @item @var{FillValue}: the NetCDF fill value of the variable. If the fill value is not defined, then this attribute is an empty array ([]). @item @var{DeflateLevel}: the NetCDF deflate level between 0 (no compression) and 9 (maximum compression). @item @var{Shuffle}: is true if the shuffle filter is activated to improve compression, otherwise false. @item @var{CheckSum}: is set to "fletcher32", if check-sums are used, otherwise this field is not defined. @end itemize @subsubheading Attributes Attributes are returned as an array structure with the following fields: @itemize @item @var{Name}: the name of the attribute @item @var{Value}: the value of the attribute (with the corresponding type) @item @var{Unlimited}: true of the dimension has no fixed limited, false @end itemize @subsubheading Data-types The following the the correspondence between the Octave and NetCDF data-types: @multitable @columnfractions .5 .5 @headitem Octave type @tab NetCDF type @item @code{int8} @tab @code{NC_BYTE} @item @code{uint8} @tab @code{NC_UBYTE} @item @code{int16} @tab @code{NC_SHORT} @item @code{uint16} @tab @code{NC_USHORT} @item @code{int32} @tab @code{NC_INT} @item @code{uint32} @tab @code{NC_UINT} @item @code{int64} @tab @code{NC_INT64} @item @code{uint64} @tab @code{NC_UINT64} @item @code{single} @tab @code{NC_FLOAT} @item @code{double} @tab @code{NC_DOUBLE} @item @code{char} @tab @code{NC_CHAR} @end multitable The output of @code{ncinfo} can be used to create a NetCDF file with the same meta-data using @code{ncwriteschema}. Note: If there are no attributes (or variable or groups), the corresponding field is an empty matrix and not an empty struct array for compatibility with matlab. @xseealso{ncread,nccreate,ncwriteschema,ncdisp} @end deftypefn @c High-level functions ncread @c ----------------------------------------- @subsection ncread @cindex ncread @deftypefn {Function File} {@var{x} =} ncread (@var{filename}, @var{varname}) @deftypefnx {Function File} {@var{x} =} ncread (@var{filename}, @var{varname},@var{start},@var{count},@var{stride}) Read the variable @var{varname} from the NetCDF file @var{filename}. If @var{start},@var{count} and @var{stride} are present, a subset of the variable is loaded. The parameter @var{start} contains the starting indices (1-based), @var{count} is the number of elements and @var{stride} the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable. Elements of @var{count} might be Inf which means that as many values as possible are loaded. If the variable has the _FillValue attribute, then the corresponding values are replaced by NaN (except for characters). NetCDF attributes scale_factor (default 1) and add_offset (default 0) are use the transform the variable during the loading: x = scale_factor * x_in_file + add_offset The output data type matches the NetCDF datatype, except when the attributes _FillValue, add_offset or scale_factor are defined in which case the output is a array in double precision. Note that values equal to the attribute missing_value are not replaced by NaN (for compatibility). @subsubheading Example Read the data from variable 'mydata' in the file test.nc. @example data = ncread('test.nc','mydata'); @end example @xseealso{ncwrite,ncinfo,ncdisp} @end deftypefn @c High-level functions ncreadatt @c ----------------------------------------- @subsection ncreadatt @cindex ncreadatt @deftypefn {Function File} {@var{val} =} ncreadatt(@var{filename},@var{varname},@var{attname}) Return the attribute @var{attname} of the variable @var{varname} in the file @var{filename}. Global attributes can be accessed by using "/" or the group name as @var{varname}. The type of attribute is mapped to the Octave data types. (see @code{ncinfo}). @subsubheading Example Read global attribute 'creation_date' @example d = ncreadatt('test.nc','/','creation_date') @end example Read atribute 'myattr' assigned to variable mydata. @example d = ncreadattr('test.nc', 'mydata', 'myattr'); @end example @xseealso{ncinfo,ncwriteatt} @end deftypefn @c High-level functions ncwrite @c ----------------------------------------- @subsection ncwrite @cindex ncwrite @deftypefn {Function File} {} ncwrite (@var{filename}, @var{varname}, @var{x}) @deftypefnx {Function File} {} ncwrite (@var{filename}, @var{varname}, @var{x}, @var{start}, @var{stride}) Write array @var{x} to the the variable @var{varname} in the NetCDF file @var{filename}. The variable with the name @var{varname} and the appropriate dimension must already exist in the NetCDF file. If @var{start} and @var{stride} are present, a subset of the variable is written. The parameter @var{start} contains the starting indices (1-based) and @var{stride} the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable. If the variable has the _FillValue attribute, then the values equal to NaN are replaced by corresponding fill value NetCDF attributes scale_factor (default 1) and add_oddset (default 0) are use the transform the variable during writing: x_in_file = (x - add_offset)/scale_factor @subsubheading Example Create a netcdf file with a variable of 'mydata' and then write data to that variable. @example nccreate('myfile.nc','mydata'); ncwrite('myfile.nc','mydata', 101); @end example @xseealso{ncread,nccreate} @end deftypefn @c High-level functions ncwriteatt @c ----------------------------------------- @subsection ncwriteatt @cindex ncwriteatt @deftypefn {Function File} {} ncwriteatt(@var{filename},@var{varname},@var{attname},@var{val}) Defines the attribute @var{attname} of the variable @var{varname} in the file @var{filename} with the value @var{val}. Global attributes can be defined by using "/" or the group name as @var{varname}. The type of value is mapped to the NetCDF data types. (see @code{ncinfo}). @subsubheading Example Create a netcdf4 format file with a variable mydata and assign an attribute "units" to it. @example nccreate("myfile.nc", "mydata", "Format", "netcdf4"); ncwriteatt("myfile.nc", "mydata", "Units", "K"); @end example @xseealso{ncinfo} @end deftypefn @c High-level functions ncwriteschema @c ----------------------------------------- @subsection ncwriteschema @cindex ncwriteschema @deftypefn {Function File} {} ncwriteschema (@var{filename}, @var{schema}) Create a NetCDF called @var{filename} with the dimensions, attributes, variables and groups given by the structure @var{schema}. The variable @var{schema} has the same structure as the results of @code{ncinfo}. @code{ncinfo} and @code{ncwriteschema} can be used together to create a NetCDF using another file as a template: @subsubheading Example @example schema = ncinfo("template.nc"); # the new file should be named "new_file.nc" ncwriteschema("new_file.nc",schema); @end example Unused field in @var{schema} such as @var{ChunkSize}, @var{Shuffle}, @var{DeflateLevel}, @var{FillValue}, @var{Checksum} can be left-out if the corresponding feature is not used. Dimensions are considered as limited if the field @var{Unlimited} is missing, unless the dimension length is Inf. @xseealso{ncinfo} @end deftypefn @c --------------------------------------------------- @node Low-level functions @section Low-level functions @cindex Low-level functions @c --------------------------------------------------- @node Low-level functions - Library Functions @subsection Library Functions @cindex Low-level functions - Library Functions @c Low-level functionsLibrary Functions netcdf.getChunkCache @c ----------------------------------------- @subsubsection netcdf.getChunkCache @cindex getChunkCache @deftypefn {} {[@var{size}, @var{nelems}, @var{preemption}] =} netcdf.getChunkCache() Gets the default chunk cache settings in the HDF5 library. @end deftypefn @c Low-level functionsLibrary Functions netcdf.inqLibVers @c ----------------------------------------- @subsubsection netcdf.inqLibVers @cindex inqLibVers @deftypefn {} {@var{vers} =} netcdf.inqLibVers() Returns the version of the NetCDF library. @end deftypefn @c Low-level functionsLibrary Functions netcdf.setChunkCache @c ----------------------------------------- @subsubsection netcdf.setChunkCache @cindex setChunkCache @deftypefn {} {} netcdf.setChunkCache(@var{size}, @var{nelems}, @var{preemption}) Sets the default chunk cache settings in the HDF5 library. The settings applies to all files which are subsequently opened or created. @end deftypefn @c Low-level functionsLibrary Functions netcdf.setDefaultFormat @c ----------------------------------------- @subsubsection netcdf.setDefaultFormat @cindex setDefaultFormat @deftypefn {} {@var{old_format} =} netcdf.setDefaultFormat(@var{format}) Sets the default format of the NetCDF library and returns the previous default format (as a numeric value). @var{format} can be "format_classic", "format_64bit", "format_netcdf4" or "format_netcdf4_classic". @end deftypefn @c --------------------------------------------------- @node Low-level functions - File Operations @subsection File Operations @cindex Low-level functions - File Operations @c Low-level functionsFile Operations netcdf.abort @c ----------------------------------------- @subsubsection netcdf.abort @cindex abort @deftypefn {} {} netcdf.abort(@var{ncid}) Aborts all changes since the last time the dataset entered in define mode. @end deftypefn @c Low-level functionsFile Operations netcdf.close @c ----------------------------------------- @subsubsection netcdf.close @cindex close @deftypefn {} {} netcdf.close(@var{ncid}) Close the NetCDF file with the id @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.create @c ----------------------------------------- @subsubsection netcdf.create @cindex create @deftypefn {} {@var{ncid} =} netcdf.create(@var{filename},@var{mode}) Creates the file named @var{filename} in the mode @var{mode} which can have the following values: "clobber" (overwrite existing files), "noclobber" (prevent to overwrite existing files) "64bit_offset" (use the 64bit-offset format), "netcdf4" (use the NetCDF4, i.e. HDF5 format) or "share" (concurrent reading of the dataset). @var{mode} can also be the numeric value return by netcdf.getConstant. In the later-case it can be combined with a bitwise-or. @end deftypefn @subsubheading Example @example mode = bitor(netcdf.getConstant("classic_model"), ... netcdf.getConstant("netcdf4")); ncid = netcdf.create("test.nc",mode); @end example @c Low-level functionsFile Operations netcdf.endDef @c ----------------------------------------- @subsubsection netcdf.endDef @cindex endDef @deftypefn {} {} netcdf.endDef (@var{ncid}) Leaves define-mode of NetCDF file @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.inq @c ----------------------------------------- @subsubsection netcdf.inq @cindex inq @deftypefn {} {[@var{ndims},@var{nvars},@var{ngatts},@var{unlimdimid}] =} netcdf.inq(@var{ncid}) Return the number of dimension (@var{ndims}), the number of variables (@var{nvars}), the number of global attributes (@var{ngatts}) and the id of the unlimited dimension (@var{unlimdimid}). If no unlimited dimension is declared -1 is returned. For NetCDF4 files, one should use the function netcdf.inqUnlimDims as multiple unlimite dimension exists. @end deftypefn @c Low-level functionsFile Operations netcdf.inqFormat @c ----------------------------------------- @subsubsection netcdf.inqFormat @cindex inqFormat @deftypefn {} {@var{format} =} netcdf.inqFormat(@var{ncid}) Return the NetCDF format of the dataset @var{ncid}. Format might be one of the following "FORMAT_CLASSIC", "FORMAT_64BIT", "FORMAT_NETCDF4" or "FORMAT_NETCDF4_CLASSIC" @end deftypefn @c Low-level functionsFile Operations netcdf.inqGrps @c ----------------------------------------- @subsubsection netcdf.inqGrps @cindex inqGrps @deftypefn {} {@var{ncids} =} netcdf.inqGrps(@var{ncid}) Return all groups ids in a NetCDF file. @xseealso{netcdf.inqGrps} @end deftypefn @c Low-level functionsFile Operations netcdf.inqUnlimDims @c ----------------------------------------- @subsubsection netcdf.inqUnlimDims @cindex inqUnlimDims @deftypefn {} {@var{unlimdimids} =} netcdf.inqUnlimDims(@var{ncid}) Return the id of all unlimited dimensions of the NetCDF file @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.open @c ----------------------------------------- @subsubsection netcdf.open @cindex open @deftypefn {} {@var{ncid} =} netcdf.open(@var{filename},@var{mode}) Opens the file named @var{filename} in the mode @var{mode}. @end deftypefn @c Low-level functionsFile Operations netcdf.reDef @c ----------------------------------------- @subsubsection netcdf.reDef @cindex reDef @deftypefn {} {} netcdf.reDef (@var{ncid}) Enter define-mode of NetCDF file @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.setFill @c ----------------------------------------- @subsubsection netcdf.setFill @cindex setFill @deftypefn {} {@var{old_mode} =} netcdf.setFill(@var{ncid},@var{fillmode}) Change the fill mode (@var{fillmode}) of the data set @var{ncid}. The previous value of the fill mode is returned. @var{fillmode} can be either "fill" or "nofill". @end deftypefn @c Low-level functionsFile Operations netcdf.sync @c ----------------------------------------- @subsubsection netcdf.sync @cindex sync @deftypefn {} {} netcdf.sync(@var{ncid}) Writes all changes to the disk and leaves the file open. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Dimensions @subsection Dimensions @cindex Low-level functions - Dimensions @c Low-level functionsDimensions netcdf.defDim @c ----------------------------------------- @subsubsection netcdf.defDim @cindex defDim @deftypefn {} {@var{dimid} =} netcdf.defDim(@var{ncid},@var{name},@var{len}) Define the dimension with the name @var{name} and the length @var{len} in the dataset @var{ncid}. The id of the dimension is returned. @end deftypefn @c Low-level functionsDimensions netcdf.inqDim @c ----------------------------------------- @subsubsection netcdf.inqDim @cindex inqDim @deftypefn {} {[@var{name},@var{length}] =} netcdf.inqDim(@var{ncid},@var{dimid}) Returns the name and length of a NetCDF dimension. @xseealso{netcdf.inqDimID} @end deftypefn @c Low-level functionsDimensions netcdf.inqDimID @c ----------------------------------------- @subsubsection netcdf.inqDimID @cindex inqDimID @deftypefn {} {@var{dimid} =} netcdf.inqDimID(@var{ncid},@var{dimname}) Return the id of a NetCDF dimension. @xseealso{netcdf.inqDim} @end deftypefn @c Low-level functionsDimensions netcdf.renameDim @c ----------------------------------------- @subsubsection netcdf.renameDim @cindex renameDim @deftypefn {} {} netcdf.renameDim(@var{ncid},@var{dimid},@var{name}) Renames the dimension with the id @var{dimid} in the data set @var{ncid}. @var{name} is the new name of the dimension. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Groups @subsection Groups @cindex Low-level functions - Groups @c Low-level functionsGroups netcdf.defGrp @c ----------------------------------------- @subsubsection netcdf.defGrp @cindex defGrp @deftypefn {} {@var{new_ncid} =} netcdf.defGrp(@var{ncid},@var{name}) Define a group in a NetCDF file. @xseealso{netcdf.inqGrps} @end deftypefn @c Low-level functionsGroups netcdf.inqDimIDs @c ----------------------------------------- @subsubsection netcdf.inqDimIDs @cindex inqDimIDs @deftypefn {} {@var{dimids} =} netcdf.inqDimID(@var{ncid}) @deftypefnx {} {@var{dimids} =} netcdf.inqDimID(@var{ncid},@var{include_parents}) Return the dimension ids defined in a NetCDF file. If @var{include_parents} is 1, the dimension ids of the parent group are also returned. Per default this is not the case (@var{include_parents} is 0). @xseealso{netcdf.inqDim} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpFullNcid @c ----------------------------------------- @subsubsection netcdf.inqGrpFullNcid @cindex inqGrpFullNcid @deftypefn {} {@var{grp_ncid} =} netcdf.inqGrpFullNcid(@var{ncid},@var{name}) Return the group id based on the full group name. @xseealso{netcdf.inqGrpName} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpName @c ----------------------------------------- @subsubsection netcdf.inqGrpName @cindex inqGrpName @deftypefn {} {@var{name} =} netcdf.inqGrpName(@var{ncid}) Return group name in a NetCDF file. @xseealso{netcdf.inqGrps} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpNameFull @c ----------------------------------------- @subsubsection netcdf.inqGrpNameFull @cindex inqGrpNameFull @deftypefn {} {@var{name} =} netcdf.inqGrpNameFull(@var{ncid}) Return full name of group in NetCDF file. @xseealso{netcdf.inqGrpName} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpParent @c ----------------------------------------- @subsubsection netcdf.inqGrpParent @cindex inqGrpParent @deftypefn {} {@var{parent_ncid} =} netcdf.inqGrpParent(@var{ncid}) Return id of the parent group @xseealso{netcdf.inqGrpName} @end deftypefn @c Low-level functionsGroups netcdf.inqNcid @c ----------------------------------------- @subsubsection netcdf.inqNcid @cindex inqNcid @deftypefn {} {@var{grp_ncid} =} netcdf.inqNcid(@var{ncid},@var{name}) Return group id based on its name @xseealso{netcdf.inqGrpFullNcid} @end deftypefn @c Low-level functionsGroups netcdf.inqVarIDs @c ----------------------------------------- @subsubsection netcdf.inqVarIDs @cindex inqVarIDs @deftypefn {} {@var{varids} = } netcdf.inqVarID (@var{ncid}) Return all variable ids. This functions returns all variable ids in a NetCDF file or NetCDF group. @xseealso{netcdf.inqVarID} @end deftypefn @c --------------------------------------------------- @node Low-level functions - Variables @subsection Variables @cindex Low-level functions - Variables @c Low-level functionsVariables netcdf.defVar @c ----------------------------------------- @subsubsection netcdf.defVar @cindex defVar @deftypefn {} {@var{varid} = } netcdf.defVar(@var{ncid},@var{name},@var{xtype},@var{dimids}) Defines a variable with the name @var{name} in the dataset @var{ncid}. @var{xtype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The parameter @var{dimids} define the ids of the dimension. For scalar this parameter is the empty array ([]). The variable id is returned. @end deftypefn @c Low-level functionsVariables netcdf.defVarChunking @c ----------------------------------------- @subsubsection netcdf.defVarChunking @cindex defVarChunking @deftypefn {} {} netcdf.defVarChunking (@var{ncid},@var{varid},@var{storage},@var{chunkSizes}) Define the chunking settings of NetCDF variable @var{varid}. If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}. If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. @end deftypefn @c Low-level functionsVariables netcdf.defVarDeflate @c ----------------------------------------- @subsubsection netcdf.defVarDeflate @cindex defVarDeflate @deftypefn {} {} netcdf.defVarDeflate (@var{ncid},@var{varid},@var{shuffle},@var{deflate},@var{deflate_level}) Define the compression settings NetCDF variable @var{varid}. If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). @end deftypefn @c Low-level functionsVariables netcdf.defVarFill @c ----------------------------------------- @subsubsection netcdf.defVarFill @cindex defVarFill @deftypefn {} {} netcdf.defVarFill(@var{ncid},@var{varid},@var{no_fill},@var{fillvalue}) Define the fill-value settings of the NetCDF variable @var{varid}. If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true. @end deftypefn @c Low-level functionsVariables netcdf.defVarFletcher32 @c ----------------------------------------- @subsubsection netcdf.defVarFletcher32 @cindex defVarFletcher32 @deftypefn {} {} netcdf.defVarFletcher32(@var{ncid},@var{varid},@var{checksum}) Defines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If @var{checksum} is the string "FLETCHER32", then fletcher32 checksums will be turned on for this variable. If @var{checksum} is "NOCHECKSUM", then checksums will be disabled. @end deftypefn @c Low-level functionsVariables netcdf.getVar @c ----------------------------------------- @subsubsection netcdf.getVar @cindex getVar @deftypefn {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid}) @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start}) @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count}) @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride}) Get the data from a NetCDF variable. The data @var{data} is loaded from the variable @var{varid} of the NetCDF file @var{ncid}. @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), @var{count} is the number of elements of to be written along each dimension (default all elements) and @var{stride} is the sampling interval. @end deftypefn @c Low-level functionsVariables netcdf.inqVar @c ----------------------------------------- @subsubsection netcdf.inqVar @cindex inqVar @deftypefn {} {[@var{name},@var{nctype},@var{dimids},@var{nattr}] = } netcdf.inqVar (@var{ncid},@var{varid}) Inquires information about a NetCDF variable. This functions returns the @var{name}, the NetCDF type @var{nctype}, an array of dimension ids @var{dimids} and the number of attributes @var{nattr} of the NetCDF variable. @var{nctype} in an integer corresponding NetCDF constants. @xseealso{netcdf.inqVarID,netcdf.getConstant} @end deftypefn @c Low-level functionsVariables netcdf.inqVarChunking @c ----------------------------------------- @subsubsection netcdf.inqVarChunking @cindex inqVarChunking @deftypefn {} {[@var{storage},@var{chunkSizes}] = } netcdf.inqVarChunking (@var{ncid},@var{varid}) Determines the chunking settings of NetCDF variable @var{varid}. If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}. If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. @end deftypefn @c Low-level functionsVariables netcdf.inqVarDeflate @c ----------------------------------------- @subsubsection netcdf.inqVarDeflate @cindex inqVarDeflate @deftypefn {} {[@var{shuffle},@var{deflate},@var{deflate_level}] = } netcdf.inqVarDeflate (@var{ncid},@var{varid}) Determines the compression settings NetCDF variable @var{varid}. If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). @end deftypefn @c Low-level functionsVariables netcdf.inqVarFill @c ----------------------------------------- @subsubsection netcdf.inqVarFill @cindex inqVarFill @deftypefn {} {[@var{no_fill},@var{fillvalue}] = } netcdf.inqVarFill(@var{ncid},@var{varid}) Determines the fill-value settings of the NetCDF variable @var{varid}. If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true. @end deftypefn @c Low-level functionsVariables netcdf.inqVarFletcher32 @c ----------------------------------------- @subsubsection netcdf.inqVarFletcher32 @cindex inqVarFletcher32 @deftypefn {} {@var{checksum} =} netcdf.inqVarFletcher32(@var{ncid},@var{varid}) Determines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If fletcher32 checksums is turned on for this variable, then @var{checksum} is the string "FLETCHER32". Otherwise it is the string "NOCHECKSUM". @end deftypefn @c Low-level functionsVariables netcdf.inqVarID @c ----------------------------------------- @subsubsection netcdf.inqVarID @cindex inqVarID @deftypefn {} {@var{varid} = } netcdf.inqVarID (@var{ncid},@var{name}) Return the id of a variable based on its name. @xseealso{netcdf.defVar,netcdf.inqVarIDs} @end deftypefn @c Low-level functionsVariables netcdf.putVar @c ----------------------------------------- @subsubsection netcdf.putVar @cindex putVar @deftypefn {} {} netcdf.putVar (@var{ncid},@var{varid},@var{data}) @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{data}) @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{data}) @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride},@var{data}) Put data in a NetCDF variable. The data @var{data} is stored in the variable @var{varid} of the NetCDF file @var{ncid}. @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), @var{count} is the number of elements of to be written along each dimension (default all elements) and @var{stride} is the sampling interval. @end deftypefn @c Low-level functionsVariables netcdf.renameVar @c ----------------------------------------- @subsubsection netcdf.renameVar @cindex renameVar @deftypefn {} {} netcdf.renameVar(@var{ncid},@var{varid},@var{name}) Renames the variable with the id @var{varid} in the data set @var{ncid}. @var{name} is the new name of the variable. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Attributes @subsection Attributes @cindex Low-level functions - Attributes @c Low-level functionsAttributes netcdf.copyAtt @c ----------------------------------------- @subsubsection netcdf.copyAtt @cindex copyAtt @deftypefn {} {} netcdf.copyAtt (@var{ncid},@var{varid},@var{name},@var{ncid_out},@var{varid_out}) Copies the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid} to the variable @var{varid_out} in the data set @var{ncid_out}. To copy a global attribute use netcdf.getConstant("global") for @var{varid} or @var{varid_out}. @xseealso{netcdf.getAtt,netcdf.getConstant} @end deftypefn @c Low-level functionsAttributes netcdf.delAtt @c ----------------------------------------- @subsubsection netcdf.delAtt @cindex delAtt @deftypefn {} {} netcdf.delAtt(@var{ncid},@var{varid},@var{name}) Deletes the attribute named @var{name} of the variable @var{varid} in the data set @var{ncid}. To delete a global attribute use netcdf.getConstant("global") for @var{varid}. @xseealso{netcdf.defAtt,netcdf.getConstant} @end deftypefn @c Low-level functionsAttributes netcdf.getAtt @c ----------------------------------------- @subsubsection netcdf.getAtt @cindex getAtt @deftypefn {} {@var{data} =} netcdf.getAtt (@var{ncid},@var{varid},@var{name}) Get the value of a NetCDF attribute. This function returns the value of the attribute called @var{name} of the variable @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.putAtt} @end deftypefn @c Low-level functionsAttributes netcdf.inqAtt @c ----------------------------------------- @subsubsection netcdf.inqAtt @cindex inqAtt @deftypefn {} {[@var{xtype},@var{len}] = } netcdf.inqAtt(@var{ncid},@var{varid},@var{name}) Get attribute type and length. @xseealso{netcdf.inqAttName} @end deftypefn @c Low-level functionsAttributes netcdf.inqAttID @c ----------------------------------------- @subsubsection netcdf.inqAttID @cindex inqAttID @deftypefn {} {@var{attnum} =} netcdf.inqAttID(@var{ncid},@var{varid},@var{attname}) Return the attribute id @var{attnum} of the attribute named @var{attname} of the variable @var{varid} in the dataset @var{ncid}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.inqAttName} @end deftypefn @c Low-level functionsAttributes netcdf.inqAttName @c ----------------------------------------- @subsubsection netcdf.inqAttName @cindex inqAttName @deftypefn {} {@var{name} =} netcdf.inqAttName (@var{ncid},@var{varid},@var{attnum}) Get the name of a NetCDF attribute. This function returns the name of the attribute with the id @var{attnum} of the variable @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.inqAttName} @end deftypefn @c Low-level functionsAttributes netcdf.putAtt @c ----------------------------------------- @subsubsection netcdf.putAtt @cindex putAtt @deftypefn {} {} netcdf.putAtt (@var{ncid},@var{varid},@var{name},@var{data}) Defines a NetCDF attribute. This function defines the attribute called @var{name} of the variable @var{varid} in the NetCDF file @var{ncid}. The value of the attribute will be @var{data}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.getAtt} @end deftypefn @c Low-level functionsAttributes netcdf.renameAtt @c ----------------------------------------- @subsubsection netcdf.renameAtt @cindex renameAtt @deftypefn {} {} netcdf.renameAtt(@var{ncid},@var{varid},@var{old_name},@var{new_name}) Renames the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid}. @var{new_name} is the new name of the attribute. To rename a global attribute use netcdf.getConstant("global") for @var{varid}. @xseealso{netcdf.copyAtt,netcdf.getConstant} @end deftypefn @c --------------------------------------------------- @node Low-level functions - User-Defined Types @subsection User-Defined Types @cindex Low-level functions - User-Defined Types @c Low-level functionsUser-Defined Types netcdf.defVlen @c ----------------------------------------- @subsubsection netcdf.defVlen @cindex defVlen @deftypefn {} {@var{varid} = } netcdf.defVlen(@var{ncid},@var{typename},@var{basetype}) Defines a NC_VLEN variable length array type with the type name @var{typename} and a base datatype of @var{basetype} in the dataset @var{ncid}. @var{basetype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The new data type id is returned. @end deftypefn @c Low-level functionsUser-Defined Types netcdf.inqUserType @c ----------------------------------------- @subsubsection netcdf.inqUserType @cindex inqUserType @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}, @var{numfields}, @var{classid}] = } netcdf.inqUserType(@var{ncid},@var{typeid}) Provide information on a user defined type @var{typeid} in the dataset @var{ncid}. The function returns the typename, bytesize, base type id, number of fields and class identifier of the type. @end deftypefn @c Low-level functionsUser-Defined Types netcdf.inqVlen @c ----------------------------------------- @subsubsection netcdf.inqVlen @cindex inqVlen @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}] = } netcdf.inqVlen(@var{ncid},@var{typeid}) Provide information on a NC_VLEN variable length array type @var{typeid} in the dataset @var{ncid}. The function returns the typename, bytesize, and base type id. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Utilities @subsection Utilities @cindex Low-level functions - Utilities @c Low-level functionsUtilities netcdf.getConstant @c ----------------------------------------- @subsubsection netcdf.getConstant @cindex getConstant @deftypefn {} {@var{value} =} netcdf.getConstant(@var{name}) Returns the value of a NetCDF constant called @var{name}. @xseealso{netcdf.getConstantNames} @end deftypefn @c Low-level functionsUtilities netcdf.getConstantNames @c ----------------------------------------- @subsubsection netcdf.getConstantNames @cindex getConstantNames @deftypefn {} {@var{value} =} netcdf.getConstantNames() Returns a list of all constant names. @end deftypefn @c --------------------------------------------------- @node Test function @section Test function @cindex Test function @c Test function test_netcdf @c ----------------------------------------- @subsection test_netcdf @cindex test_netcdf @deftypefn {} {} test_netcdf Function to do a basic test of the netcdf interface @end deftypefn netcdf-1.0.19/doc/gpl.texi0000644000000000000000000010433015126111435012215 0ustar00@node Copying @appendix GNU General Public License @cindex warranty @cindex copyright @center Version 3, 29 June 2007 @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program---to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see @url{http://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{http://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. netcdf-1.0.19/doc/macros.texi0000644000000000000000000000624115126111435012721 0ustar00@c Copyright (C) 2012-2019 John W. Eaton @c @c This file is part of Octave. @c @c Octave is free software: you can redistribute it and/or modify it @c under the terms of the GNU General Public License as published by @c the Free Software Foundation, either version 3 of the License, or @c (at your option) any later version. @c @c Octave is distributed in the hope that it will be useful, but @c WITHOUT ANY WARRANTY; without even the implied warranty of @c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with Octave; see the file COPYING. If not, see @c . @c The following macro marks words that aspell should ignore during @c spellchecking. Within Texinfo it has no effect as it merely replaces @c the macro call with the argument itself. @macro nospell {arg} \arg\ @end macro @c The following macro works around the Info/plain text expansion of @code{XXX} @c which is `XXX'. This looks particularly bad when the macro body is @c single or double-quoted text, such as a property value `"position"' @ifinfo @macro qcode{arg} \arg\ @end macro @end ifinfo @ifnotinfo @macro qcode{arg} @code{\arg\} @end macro @end ifnotinfo @c The following macro is used for the on-line help system, but we don't @c want lots of `See also: foo, bar, and baz' strings cluttering the @c printed manual (that information should be in the supporting text for @c each group of functions and variables). @c @c Implementation Note: @c For TeX, @vskip produces a nice separation. @c For Texinfo, '@sp 1' should work, but in practice produces ugly results @c for HTML. We use a simple blank line to produce the correct @c behavior. @c @c We use @xseealso now because Texinfo introduced its own @seealso @c command. But instead of modifying all source files, we'll have the @c munge-texi script convert @seealso to @xseealso. @macro xseealso {args} @iftex @vskip 2pt @end iftex @ifnottex @end ifnottex @ifnotinfo @noindent @strong{See also:} \args\. @end ifnotinfo @ifinfo @noindent See also: \args\. @end ifinfo @end macro @c The following macro works around a situation where the Info/plain text @c expansion of the @code{XXX} macro is `XXX'. The use of the apostrophe @c can be confusing if the code segment itself ends with a transpose operator. @ifinfo @macro tcode{arg} \arg\ @end macro @end ifinfo @ifnotinfo @macro tcode{arg} @code{\arg\} @end macro @end ifnotinfo @c FIXME: someday, when Texinfo 5.X is standard, we might replace this with @c @backslashchar, which is a new addition to Texinfo. @macro xbackslashchar \\ @end macro @c These may be useful for all, not just for octave.texi. @tex \ifx\rgbDarkRed\thisisundefined \def\rgbDarkRed{0.50 0.09 0.12} \fi \ifx\linkcolor\thisisundefined \relax \else \global\def\linkcolor{\rgbDarkRed} \fi \ifx\urlcolor\thisisundefined \relax \else \global\def\urlcolor{\rgbDarkRed} \fi \ifx\urefurlonlylinktrue\thisisundefined \relax \else \global\urefurlonlylinktrue \fi @end tex @c Make the apostrophe in code examples cut-and-paste friendly. @codequoteundirected on netcdf-1.0.19/doc/mkfuncdocs.py0000755000000000000000000003304215126111435013252 0ustar00#!/usr/bin/env python3 ## Copyright 2018-2025 John Donoghue ## ## This program is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see ## . ## mkfuncdocs v1.0.9 ## mkfuncdocs.py will attempt to extract the help texts from functions in src ## dirs, extracting only those that are in the specifed INDEX file and output them ## to stdout in texi format ## ## It will extract from both .m and the help text for DEFUN_DLD help in .cc/.cpp ## files. ## ## It attempts to find the help text for each function in a file within the src search ## folders that match in order: [ functionname.m functionname.cc functionname.cpp ## functionname_withoutprefix.cc functionname_withoutprefix.cpp ] ## ## The INDEX file can contain additional subgroups in the form of: ## #! Subgroup Name ## ## Usage: ## mkfundocs.py options INDEXfile ## Options can be 0 or more of: ## --verbose : Turn on verbose mode ## --src-dir=xxxxx : Add dir xxxxx to the dirs searched for the function file. ## If no directories are provided, it will default to looking in the ## 'inst' directory. ## --ignore=xxxxx : dont attempt to generate help for function xxxxx. ## --funcprefix=xxxxx : remove xxxxx from the function name when searching for matching ## source file. ## --allowscan : if can not find function, attemp to scan .cc,cpp,cxx files for match ## ## --standalone : generate a texinfo file expected to be used with being included in ## another document file. import sys import os import re import tempfile import shutil import fnmatch import subprocess import glob import calendar; import time; class SubGroup: name = "" functions = [] def __init__ (self, name): if name: self.name = name self.functions = [] class Group: name = "Functions" functions = [] subgroups = [] def __init__ (self, name=""): if name: self.name = name self.functions = [] self.subgroups = [] def add_function(self, f): if len(self.subgroups) == 0: self.functions.append(f); else: functions = self.subgroups[-1].functions functions.append(f) self.subgroups[-1].functions = functions def add_subgroup(self, f): self.subgroups.append(SubGroup(f)) def isempty(self): if len(self.functions): return False for sg in self.subgroups: if len(sg.functions): return False return True def dump(self): print(f"Group {self.name}") for f in self.functions: print(f" {f}") for sg in self.subgroups: print(f" *{sg.name}") for f in sg.functions: print(f" {f}") class Index: name = "" groups = [] def texify_line(line): # convert any special chars in a line to texinfo format # currently just used for group formatting ? line = line.replace("@", "@@") line = line.replace("{", "@{") line = line.replace("}", "@}") line = line.replace(",", "@comma{}") return line def find_defun_line_in_file(filename, fnname): linecnt = 0 defun_line=re.compile(r"^DEFUN_DLD\s*\(\s*{}".format(fnname)) with open(filename, 'rt') as f: for line in f: if re.match(defun_line, line): return linecnt linecnt = linecnt + 1 return -1 def find_function_line_in_file(filename, fnname): linecnt = 0 func = False defun_line=re.compile(r"^\s*function \s*") with open(filename, 'rt') as f: for line in f: if func == True: x = line.strip() if x.startswith("## -*- texinfo -*-"): return linecnt else: func = False if re.match(defun_line, line): if line.find("=") != -1: x = line.split("=") x = x[-1] else: x = line.replace("function ", "") x = x.split("(") x = x[0].strip() if x == fnname: func = True linecnt = linecnt + 1 return -1 def read_m_file(filename, skip=0): help = [] inhelp = False havehelp = False; with open(filename, 'rt') as f: for line in f: line = line.lstrip() if skip > 0: skip = skip - 1 elif not havehelp: if havehelp == False and inhelp == False and line.startswith('##'): if "texinfo" in line: inhelp = True elif inhelp == True: if not line.startswith('##'): inhelp = False havehelp = True else: if line.startswith("## @"): line = line[3:] else: line = line[2:] help.append (line.rstrip()); return help def read_cc_file(filename, skip=0): help = [] inhelp = False havehelp = False; with open(filename, 'rt') as f: for line in f: line = line.lstrip() if skip > 0: skip = skip - 1 elif not havehelp: if havehelp == False and inhelp == False: if "texinfo" in line: inhelp = True elif inhelp == True: line = line.rstrip() if len(line) > 0 and line[-1] == '\\': line = line[:-1] line = line.rstrip() line = line.replace("\\n", "\n") line = line.replace("\\\"", "\"") if len(line) > 0 and line[-1] == '\n': line = line[:-1] # endif a texinfo line elif line.endswith('")'): line = line[:-2] if line.startswith('{'): inhelp = False havehelp = True else: help.append (line); return help def read_help (filename, skip=0): help = [] if filename[-2:] == ".m": help = read_m_file(filename, skip) else: help = read_cc_file(filename, skip) return help def read_index (filename, ignore): index = Index () with open(filename, 'rt') as f: lines = f.read().splitlines() #print ("read", lines) first = True category = Group() for l in lines: if l.startswith("#!"): l = l[2:].strip() category.add_subgroup(l) elif l.startswith("#"): pass elif first: index.name = l; first = False elif l.startswith(" "): l = l.strip() # may be multiple functions here funcs = l.split() for f in funcs: if f not in ignore: category.add_function(l) else: # new category name if not category.isempty(): index.groups.append(category) category = Group(l.strip()) # left over category ? if not category.isempty(): index.groups.append(category) return index; def find_class_file(fname, paths): for f in paths: # class constructor ? name = f + "/@" + fname + "/" + fname + ".m" if os.path.isfile(name): return name, 0 # perhaps classname.func format ? x = fname.split(".") if len(x) > 0: zname = x.pop() cname = ".".join(x) name = f + "/" + cname + ".m" if os.path.isfile(name): idx = find_function_line_in_file(name, zname) if idx >= 0: return name, idx name = f + "/@" + cname + "/" + zname + ".m" if os.path.isfile(name): return name, 0 return None, -1 def find_func_file(fname, paths, prefix, scanfiles=False): for f in paths: name = f + "/" + fname + ".m" if os.path.isfile(name): return name, 0 # class constructor ? name = f + "/@" + fname + "/" + fname + ".m" if os.path.isfile(name): return name, 0 name = f + "/" + fname + ".cc" if os.path.isfile(name): return name, 0 name = f + "/" + fname + ".cpp" if os.path.isfile(name): return name, 0 # if have a prefix, remove and try if prefix and fname.startswith(prefix): fname = fname[len(prefix):] name = f + "/" + fname + ".cc" if os.path.isfile(name): return name, 0 name = f + "/" + fname + ".cpp" if os.path.isfile(name): return name, 0 # if here, we still dont have a file match # if allowed to scan files, do that if scanfiles: #sys.stderr.write("Warning: Scaning for {}\n".format(fname)) for f in paths: files = list(f + "/" + a for a in os.listdir(f)) cc_files = fnmatch.filter(files, "*.cc") cpp_files = fnmatch.filter(files, "*.cpp") cxx_files = fnmatch.filter(files, "*.cxx") for fn in cc_files + cpp_files + cxx_files: line = find_defun_line_in_file(fn, fname) if line >= 0: #sys.stderr.write("Warning: Found function for {} in {} at {}\n".format(fname, fn, line)) return fn, line return None, -1 def display_standalone_header(): # make a file that doesnt need to be included in a texinfo file to # be valid print("@c mkfuncdocs output for a standalone function list") print("@include macros.texi") print("@ifnottex") print("@node Top") print("@top Function Documentation") print("Function documentation extracted from texinfo source in octave source files.") print("@contents") print("@end ifnottex") print("@node Function Reference") print("@chapter Function Reference") print("@cindex Function Reference") def display_standalone_footer(): print("@bye") def display_func(name, ref, help, is_subgroup): print ("@c -----------------------------------------") if is_subgroup: print ("@subsubsection {}".format(name)) else: print ("@subsection {}".format(name)) print ("@cindex {}".format(ref)) for l in help: print ("{}".format(l)) def process_function_help(g_name, f, options, is_subgroup=False): if True: print ("@c {} {}".format(g_name, f)) h = "" filename = "" path = "" if "@" in f: #print ("class func") path = f name = "@" + f ref = f.split("/")[-1] filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"]) elif "." in f: path = f ref = f.split(".")[-1] name = f.split(".")[-1] filename, lineno = find_class_file(path, options["srcdir"]) if not filename: parts = f.split('.') cnt = 0 path = "" for p in parts: if cnt < len(parts)-1: path = path + "/+" else: path = path + "/" path = path + p cnt = cnt + 1 name = f; ref = parts[-1] filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"]) elif "/" in f: path = f name = f ref = f.split("/")[-1] filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"]) else: path = f name = f ref = f filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"], options['allowscan']) if not filename: sys.stderr.write("Warning: Cant find source file for {}\n".format(f)) else: h = read_help (filename, lineno) if h: display_func (name, ref, h, is_subgroup) def process (args): options = { "verbose": False, "srcdir": [], "funcprefix": "", "ignore": [], "standalone": False, "allowscan": False } indexfile = "" for a in args: #print ("{}".format(a)) c=a.split("=") key=c[0] if len(c) > 1: val=c[1] else: val="" if key == "--verbose": options["verbose"] = True; if key == "--standalone": options["standalone"] = True; elif key == "--allowscan": options["allowscan"] = True; elif key == "--src-dir": if val: options["srcdir"].append(val); elif key == "--ignore": if val: options["ignore"].append(val); elif key == "--func-prefix": if val: options["funcprefix"] = val; elif val == "": if indexfile == "": indexfile = key if indexfile == "": raise Exception("No index filename") if len(options["srcdir"]) == 0: options["srcdir"].append("inst") #print "options=", options if options['standalone']: display_standalone_header() idx = read_index(indexfile, options["ignore"]) for g in idx.groups: #print ("************ {}".format(g.name)) g_name = texify_line(g.name) print ("@c ---------------------------------------------------") print ("@node {}".format(g_name)) print ("@section {}".format(g_name)) print ("@cindex {}".format(g_name)) for f in sorted(g.functions): process_function_help(g_name, f, options) for sg in g.subgroups: sg_name = texify_line(sg.name) print ("@c ---------------------------------------------------") print ("@node {}".format(g_name + " - " + sg_name)) print ("@subsection {}".format(sg_name)) print ("@cindex {}".format(g_name + " - " + sg_name)) for f in sorted(sg.functions): process_function_help(g_name + sg_name, f, options, True) if options['standalone']: display_standalone_footer() def show_usage(): print (sys.argv[0], "[options] indexfile") if __name__ == "__main__": if len(sys.argv) > 1: status = process(sys.argv[1:]) sys.exit(status) else: show_usage() netcdf-1.0.19/doc/mkqhcp.py0000755000000000000000000001521715126111435012405 0ustar00#!/usr/bin/env python3 ## mkqhcp.py ## Version 1.0.6 ## Copyright 2022-2025 John Donoghue ## ## This program is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see ## . import sys import os import re def process(name): with open(name + ".qhcp", 'wt') as f: f.write ('\n') f.write ('\n') f.write (' \n') f.write (' \n') f.write (' \n') f.write (' {0}.qhp\n'.format(name)) f.write (' {0}.qch\n'.format(name)) f.write (' \n') f.write (' \n') f.write (' \n') f.write (' {0}.qch\n'.format(name)) f.write (' \n') f.write (' \n') f.write ('\n') title = name pat_match = re.compile(r".*(?P<title>[^<]+).*") with open(name + ".html", 'rt') as fin: # find html for line in fin: line = line.strip() e = pat_match.match(line) if e: title = e.group("title") break # section h2_match = re.compile(r'.*

]*>(?P[^<]+)</h2>.*') # appendix h2a_match = re.compile(r'.*<h2 class="appendix"[^>]*>(?P<title>[^<]+)</h2>.*') # index h2i_match = re.compile(r'.*<h2 class="unnumbered"[^>]*>(?P<title>[^<]+)</h2>.*') h3_match = re.compile(r'.*<h3 class="section"[^>]*>(?P<title>[^<]+)</h3>.*') h4_match = re.compile(r'.*<h4 class="subsection"[^>]*>(?P<title>[^<]+)</h4>.*') h5_match = re.compile(r'.*<h4 class="subsubsection"[^>]*>(?P<title>[^<]+)</h4>.*') tag_match1 = re.compile(r'.*<span id="(?P<tag>[^"]+)"[^>]*></span>.*') #tag_match2 = re.compile(r'.*<div class="[sub]*section" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match2 = re.compile(r'.*<div class="[sub]*section[^"]*" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match3 = re.compile(r'.*<div class="chapter-level-extent" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match4 = re.compile(r'.*<div class="appendix-level-extent" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match5 = re.compile(r'.*<div class="unnumbered-level-extent" id="(?P<tag>[^"]+)"[^>]*>.*') index_match = re.compile(r'.*<h4 class="[sub]+section"[^>]*>[\d\.\s]*(?P<name>[^<]+)</h4>.*') index_match2 = re.compile(r'.*<h4 class="[sub]+section"[^>]*><span>[\d\.\s]*(?P<name>[^<]+)<.*') tag = "top" has_h2 = False has_h3 = False has_h4 = False #pat_match = re.compile(r'.*<span id="(?P<tag>[^"])"></span>(?P<title>[.]+)$') with open(name + ".html", 'rt') as fin: with open(name + ".qhp", 'wt') as f: f.write('<?xml version="1.0" encoding="UTF-8"?>\n') f.write('<QtHelpProject version="1.0">\n') f.write(' <namespace>octave.community.{}</namespace>\n'.format(name)) f.write(' <virtualFolder>doc</virtualFolder>\n') f.write(' <filterSection>\n') f.write(' <toc>\n') f.write(' <section title="{} Manual" ref="{}.html">\n'.format(title, name)) # chapters here for line in fin: line = line.strip() e = tag_match1.match(line) if not e: e = tag_match2.match(line) if not e: e = tag_match3.match(line) if not e: e = tag_match4.match(line) if not e: e = tag_match5.match(line) if e: tag = e.group("tag") e = h2_match.match(line) if not e: e = h2a_match.match(line) if not e: e = h2i_match.match(line) if e: if has_h4: f.write(' </section>\n') has_h4 = False if has_h3: f.write(' </section>\n') has_h3 = False if has_h2: f.write(' </section>\n') has_h2 = True f.write(' <section title="{}" ref="{}.html#{}">\n'.format(e.group("title"), name, tag)) e = h3_match.match(line) if e: if has_h4: f.write(' </section>\n') has_h4 = False if has_h3: f.write(' </section>\n') has_h3 = True f.write(' <section title="{}" ref="{}.html#{}">\n'.format(e.group("title"), name, tag)) e = h4_match.match(line) if e: if has_h4: f.write(' </section>\n') has_h4 = True #f.write(' <section title="{}" ref="{}.html#{}"></section>\n'.format(e.group("title"), name, tag)) f.write(' <section title="{}" ref="{}.html#{}">\n'.format(e.group("title"), name, tag)) e = h5_match.match(line) if e: f.write(' <section title="{}" ref="{}.html#{}"></section>\n'.format(e.group("title"), name, tag)) if has_h4: f.write(' </section>\n') if has_h3: f.write(' </section>\n') if has_h2: f.write(' </section>\n') f.write(' </section>\n') f.write(' </toc>\n') f.write(' <keywords>\n') fin.seek(0) for line in fin: line = line.strip() e = tag_match1.match(line) if not e: e = tag_match2.match(line) if e: tag = e.group("tag") e = index_match.match(line) if not e: e = index_match2.match(line) if e: f.write(' <keyword name="{}" ref="{}.html#{}"></keyword>\n'.format(e.group("name"), name, tag)) f.write(' </keywords>\n') f.write(' <files>\n') f.write(' <file>{}.html</file>\n'.format(name)) f.write(' <file>{}.css</file>\n'.format(name)) f.write(' </files>\n') f.write(' </filterSection>\n') f.write('</QtHelpProject>\n') def show_usage(): print (sys.argv[0], "projname") if __name__ == "__main__": if len(sys.argv) > 1: status = process(sys.argv[1]) sys.exit(status) else: show_usage() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������netcdf-1.0.19/doc/octave-netcdf.css�����������������������������������������������������������������0000644�0000000�0000000�00000001337�15126111435�013777� 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pre.example, .header, .float-caption, hr { /* base00 ~ body text in light solarized theme */ color: #657b83; border-color: #657b83; } pre.example { /* base3 ~ background color in light solarized theme */ background-color: #fdf6e3; padding: 0.5em; } table.cartouche { border: 1px solid #948473; background-color: #FFE3C6; width: 100%; } table.cartouche td, table.cartouche th { border: 1px solid #948473; padding: 4px 4px; } /* newer texinfo generation styles */ div.example { /* base00 ~ body text in light solarized theme */ color: #657b83; border-color: #657b83; } pre.example-preformatted { /* base3 ~ background color in light solarized theme */ background-color: #fdf6e3; padding: 0.5em; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������netcdf-1.0.19/doc/octave-netcdf.html����������������������������������������������������������������0000644�0000000�0000000�00000432574�15126111435�014166� 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html> <!-- Created by GNU Texinfo 7.2, https://www.gnu.org/software/texinfo/ --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Octave NetCDF - A NetCDF interface for Octave

Introduction

The Octave NetCDF toolkit is a set of NetCDF routines for GNU Octave

Table of Contents


1 Installing and loading

The toolkit must be installed and then loaded to be used.

It can be installed in GNU Octave directly from the website, or can be installed in an off-line mode via a downloaded tarball.

The toolkit has a dependency on the netcdf library (https://www.unidata.ucar.edu/software/netcdf/), so it must be installed in order to successfully install the toolkit.

The toolkit must be then be loaded once per each GNU Octave session in order to use its functionality.

1.1 Online Direct install

With an internet connection available, the package can be installed from octave-forge using the following command within GNU Octave:

pkg install -forge netcdf

The latest released version of the toolkit will be downloaded and installed.

1.2 Off-line install

With the toolkit package already downloaded, and in the current directory when running GNU Octave, the package can be installed using the following command within GNU Octave:

pkg install netcdf-1.0.19.tar.gz

1.3 Loading

Regardless of the method of installing the toolkit, in order to use its functions, the toolkit must be loaded using the pkg load command:

pkg load netcdf

The toolkit must be loaded on each GNU Octave session.


2 Basic Usage Overview

The toolkit provides high and level functionality for reading and writing NetCDF format files.

2.1 High level functionality

The toolkit provides the following high level functions:

  • nccreate
  • ncdisp
  • ncinfo
  • ncreadatt
  • ncread
  • ncwriteatt
  • ncwrite
  • ncwriteschema

2.2 Low level functionality

The package aims to implement the netcdf interface of MATLAB in GNU Octave, however GNU Octave does not support the import function but the functions are available as netcdf.functionname


3 Function Reference

The functions currently available in the toolkit are described below;


3.1 High-level functions

3.1.1 nccreate

Function File: nccreate(filename,varname)
Function File: nccreate(filename,varname,"property",value,...)

Create the variable varname in the file filename.

Properties

The following properties can be used:

  • "Dimensions": a cell array with the dimension names followed by their length or Inf if the dimension is unlimited. If the property is omitted, a scalar variable is created.
  • "Datatype": a string with the Octave data type name (see ncinfo for the correspondence between Octave and NetCDF data types). The default data type is a "double".
  • "Format": This can be "netcdf4_classic" (default), "classic", "64bit" or "netcdf4".
  • "FillValue": the value used for undefined elements of the NetCDF variable.
  • "ChunkSize": the size of the data chunks. If omitted, the variable is not chunked.
  • "DeflateLevel": The deflate level for compression. It can be the string "disable" (default) for no compression or an integer between 0 (no compression) and 9 (maximum compression).
  • "Shuffle": true for enabling the shuffle filter or false (default) for disabling it.

Example

 nccreate("test.nc","temp","Dimensions",{"lon",10,"lat",20},"Format","classic");
 ncdisp("test.nc");

See also: ncwrite.

3.1.2 ncdisp

Function File: ncdisp (filename)

Display meta-data of the NetCDF file filename

Example

 ncdisp("test.nc");

See also: ncinfo.

3.1.3 ncinfo

Function File: info = ncinfo (filename)
Function File: info = ncinfo (filename, varname)
Function File: info = ncinfo (filename, groupname)

Return information about an entire NetCDF file filename (i.e. the root group "/"), about the variable called varname or the group called groupname.

The structure info has always the following fields:

  • Filename: the name of the NetCDF file
  • Format: one of the strings "CLASSIC", "64BIT", "NETCDF4" or "NETCDF4_CLASSIC"

The structure info has additional fields depending on whether a group of variable is queried.

Groups

Groups are returned as an array structure with the following fields:

  • Name: the group name. The root group is named "/".
  • Dimensions: a array structure with the dimensions.
  • Variables: a array structure with the variables.
  • Attributes: a array structure with global attributes.
  • Groups: a array structure (one for each group) with the same fields as this structure.

Dimensions

Dimensions are returned as an array structure with the following fields:

  • Name: the name of the dimension
  • Length: the length of the dimension
  • Unlimited: true of the dimension has no fixed limited, false

Variables

Variables are returned as an array structure with the following fields:

  • Name: the name of the dimension
  • Dimensions: array structure of all dimensions of this variable with the same structure as above.
  • Size: array with the size of the variable
  • Datatype: string with the corresponding octave data-type (see below)
  • Attributes: a array structure of attributes
  • FillValue: the NetCDF fill value of the variable. If the fill value is not defined, then this attribute is an empty array ([]).
  • DeflateLevel: the NetCDF deflate level between 0 (no compression) and 9 (maximum compression).
  • Shuffle: is true if the shuffle filter is activated to improve compression, otherwise false.
  • CheckSum: is set to "fletcher32", if check-sums are used, otherwise this field is not defined.

Attributes

Attributes are returned as an array structure with the following fields:

  • Name: the name of the attribute
  • Value: the value of the attribute (with the corresponding type)
  • Unlimited: true of the dimension has no fixed limited, false

Data-types

The following the the correspondence between the Octave and NetCDF data-types:

Octave typeNetCDF type
int8NC_BYTE
uint8NC_UBYTE
int16NC_SHORT
uint16NC_USHORT
int32NC_INT
uint32NC_UINT
int64NC_INT64
uint64NC_UINT64
singleNC_FLOAT
doubleNC_DOUBLE
charNC_CHAR

The output of ncinfo can be used to create a NetCDF file with the same meta-data using ncwriteschema.

Note: If there are no attributes (or variable or groups), the corresponding field is an empty matrix and not an empty struct array for compatibility with matlab.

See also: ncread,nccreate,ncwriteschema,ncdisp.

3.1.4 ncread

Function File: x = ncread (filename, varname)
Function File: x = ncread (filename, varname,start,count,stride)

Read the variable varname from the NetCDF file filename.

If start,count and stride are present, a subset of the variable is loaded. The parameter start contains the starting indices (1-based), count is the number of elements and stride the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable. Elements of count might be Inf which means that as many values as possible are loaded.

If the variable has the _FillValue attribute, then the corresponding values are replaced by NaN (except for characters). NetCDF attributes scale_factor (default 1) and add_offset (default 0) are use the transform the variable during the loading:

x = scale_factor * x_in_file + add_offset

The output data type matches the NetCDF datatype, except when the attributes _FillValue, add_offset or scale_factor are defined in which case the output is a array in double precision.

Note that values equal to the attribute missing_value are not replaced by NaN (for compatibility).

Example

Read the data from variable ’mydata’ in the file test.nc.

 data  = ncread('test.nc','mydata');

See also: ncwrite,ncinfo,ncdisp.

3.1.5 ncreadatt

Function File: val = ncreadatt(filename,varname,attname)

Return the attribute attname of the variable varname in the file filename.

Global attributes can be accessed by using "/" or the group name as varname. The type of attribute is mapped to the Octave data types. (see ncinfo).

Example

Read global attribute ’creation_date’

 d = ncreadatt('test.nc','/','creation_date')

Read atribute ’myattr’ assigned to variable mydata.

 d = ncreadattr('test.nc', 'mydata', 'myattr');

See also: ncinfo,ncwriteatt.

3.1.6 ncwrite

Function File: ncwrite (filename, varname, x)
Function File: ncwrite (filename, varname, x, start, stride)

Write array x to the the variable varname in the NetCDF file filename.

The variable with the name varname and the appropriate dimension must already exist in the NetCDF file.

If start and stride are present, a subset of the variable is written. The parameter start contains the starting indices (1-based) and stride the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable.

If the variable has the _FillValue attribute, then the values equal to NaN are replaced by corresponding fill value NetCDF attributes scale_factor (default 1) and add_oddset (default 0) are use the transform the variable during writing:

x_in_file = (x - add_offset)/scale_factor

Example

Create a netcdf file with a variable of ’mydata’ and then write data to that variable.

 nccreate('myfile.nc','mydata');
 ncwrite('myfile.nc','mydata', 101);

See also: ncread,nccreate.

3.1.7 ncwriteatt

Function File: ncwriteatt(filename,varname,attname,val)

Defines the attribute attname of the variable varname in the file filename with the value val.

Global attributes can be defined by using "/" or the group name as varname. The type of value is mapped to the NetCDF data types. (see ncinfo).

Example

Create a netcdf4 format file with a variable mydata and assign an attribute "units" to it.

 nccreate("myfile.nc", "mydata", "Format", "netcdf4");
 ncwriteatt("myfile.nc", "mydata", "Units", "K");

See also: ncinfo.

3.1.8 ncwriteschema

Function File: ncwriteschema (filename, schema)

Create a NetCDF called filename with the dimensions, attributes, variables and groups given by the structure schema.

The variable schema has the same structure as the results of ncinfo. ncinfo and ncwriteschema can be used together to create a NetCDF using another file as a template:

Example

 schema = ncinfo("template.nc");
 # the new file should be named "new_file.nc"
 ncwriteschema("new_file.nc",schema);

Unused field in schema such as ChunkSize, Shuffle, DeflateLevel, FillValue, Checksum can be left-out if the corresponding feature is not used.

Dimensions are considered as limited if the field Unlimited is missing, unless the dimension length is Inf.

See also: ncinfo.


3.2 Low-level functions


3.2.1 Library Functions

3.2.1.1 netcdf.getChunkCache

: [size, nelems, preemption] = netcdf.getChunkCache()

Gets the default chunk cache settings in the HDF5 library.

3.2.1.2 netcdf.inqLibVers

: vers = netcdf.inqLibVers()

Returns the version of the NetCDF library.

3.2.1.3 netcdf.setChunkCache

: netcdf.setChunkCache(size, nelems, preemption)

Sets the default chunk cache settings in the HDF5 library. The settings applies to all files which are subsequently opened or created.

3.2.1.4 netcdf.setDefaultFormat

: old_format = netcdf.setDefaultFormat(format)

Sets the default format of the NetCDF library and returns the previous default format (as a numeric value). format can be "format_classic", "format_64bit", "format_netcdf4" or "format_netcdf4_classic".


3.2.2 File Operations

3.2.2.1 netcdf.abort

: netcdf.abort(ncid)

Aborts all changes since the last time the dataset entered in define mode.

3.2.2.2 netcdf.close

: netcdf.close(ncid)

Close the NetCDF file with the id ncid.

3.2.2.3 netcdf.create

: ncid = netcdf.create(filename,mode)

Creates the file named filename in the mode mode which can have the following values: "clobber" (overwrite existing files), "noclobber" (prevent to overwrite existing files) "64bit_offset" (use the 64bit-offset format), "netcdf4" (use the NetCDF4, i.e. HDF5 format) or "share" (concurrent reading of the dataset). mode can also be the numeric value return by netcdf.getConstant. In the later-case it can be combined with a bitwise-or.

Example

 mode = bitor(netcdf.getConstant("classic_model"), ...
 netcdf.getConstant("netcdf4"));
 ncid = netcdf.create("test.nc",mode);

3.2.2.4 netcdf.endDef

: netcdf.endDef (ncid)

Leaves define-mode of NetCDF file ncid.

3.2.2.5 netcdf.inq

: [ndims,nvars,ngatts,unlimdimid] = netcdf.inq(ncid)

Return the number of dimension (ndims), the number of variables (nvars), the number of global attributes (ngatts) and the id of the unlimited dimension (unlimdimid). If no unlimited dimension is declared -1 is returned. For NetCDF4 files, one should use the function netcdf.inqUnlimDims as multiple unlimite dimension exists.

3.2.2.6 netcdf.inqFormat

: format = netcdf.inqFormat(ncid)

Return the NetCDF format of the dataset ncid. Format might be one of the following "FORMAT_CLASSIC", "FORMAT_64BIT", "FORMAT_NETCDF4" or "FORMAT_NETCDF4_CLASSIC"

3.2.2.7 netcdf.inqGrps

: ncids = netcdf.inqGrps(ncid)

Return all groups ids in a NetCDF file.

See also: netcdf.inqGrps.

3.2.2.8 netcdf.inqUnlimDims

: unlimdimids = netcdf.inqUnlimDims(ncid)

Return the id of all unlimited dimensions of the NetCDF file ncid.

3.2.2.9 netcdf.open

: ncid = netcdf.open(filename,mode)

Opens the file named filename in the mode mode.

3.2.2.10 netcdf.reDef

: netcdf.reDef (ncid)

Enter define-mode of NetCDF file ncid.

3.2.2.11 netcdf.setFill

: old_mode = netcdf.setFill(ncid,fillmode)

Change the fill mode (fillmode) of the data set ncid. The previous value of the fill mode is returned. fillmode can be either "fill" or "nofill".

3.2.2.12 netcdf.sync

: netcdf.sync(ncid)

Writes all changes to the disk and leaves the file open.


3.2.3 Dimensions

3.2.3.1 netcdf.defDim

: dimid = netcdf.defDim(ncid,name,len)

Define the dimension with the name name and the length len in the dataset ncid. The id of the dimension is returned.

3.2.3.2 netcdf.inqDim

: [name,length] = netcdf.inqDim(ncid,dimid)

Returns the name and length of a NetCDF dimension.

See also: netcdf.inqDimID.

3.2.3.3 netcdf.inqDimID

: dimid = netcdf.inqDimID(ncid,dimname)

Return the id of a NetCDF dimension.

See also: netcdf.inqDim.

3.2.3.4 netcdf.renameDim

: netcdf.renameDim(ncid,dimid,name)

Renames the dimension with the id dimid in the data set ncid. name is the new name of the dimension.


3.2.4 Groups

3.2.4.1 netcdf.defGrp

: new_ncid = netcdf.defGrp(ncid,name)

Define a group in a NetCDF file.

See also: netcdf.inqGrps.

3.2.4.2 netcdf.inqDimIDs

: dimids = netcdf.inqDimID(ncid)
: dimids = netcdf.inqDimID(ncid,include_parents)

Return the dimension ids defined in a NetCDF file. If include_parents is 1, the dimension ids of the parent group are also returned. Per default this is not the case (include_parents is 0).

See also: netcdf.inqDim.

3.2.4.3 netcdf.inqGrpFullNcid

: grp_ncid = netcdf.inqGrpFullNcid(ncid,name)

Return the group id based on the full group name.

See also: netcdf.inqGrpName.

3.2.4.4 netcdf.inqGrpName

: name = netcdf.inqGrpName(ncid)

Return group name in a NetCDF file.

See also: netcdf.inqGrps.

3.2.4.5 netcdf.inqGrpNameFull

: name = netcdf.inqGrpNameFull(ncid)

Return full name of group in NetCDF file.

See also: netcdf.inqGrpName.

3.2.4.6 netcdf.inqGrpParent

: parent_ncid = netcdf.inqGrpParent(ncid)

Return id of the parent group

See also: netcdf.inqGrpName.

3.2.4.7 netcdf.inqNcid

: grp_ncid = netcdf.inqNcid(ncid,name)

Return group id based on its name

See also: netcdf.inqGrpFullNcid.

3.2.4.8 netcdf.inqVarIDs

: varids = netcdf.inqVarID (ncid)

Return all variable ids. This functions returns all variable ids in a NetCDF file or NetCDF group.

See also: netcdf.inqVarID.


3.2.5 Variables

3.2.5.1 netcdf.defVar

: varid = netcdf.defVar(ncid,name,xtype,dimids)

Defines a variable with the name name in the dataset ncid. xtype can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The parameter dimids define the ids of the dimension. For scalar this parameter is the empty array ([]). The variable id is returned.

3.2.5.2 netcdf.defVarChunking

: netcdf.defVarChunking (ncid,varid,storage,chunkSizes)

Define the chunking settings of NetCDF variable varid. If storage is the string "chunked", the variable is stored by chunk of the size chunkSizes. If storage is the string "contiguous", the variable is stored in a contiguous way.

3.2.5.3 netcdf.defVarDeflate

: netcdf.defVarDeflate (ncid,varid,shuffle,deflate,deflate_level)

Define the compression settings NetCDF variable varid. If deflate is true, then the variable is compressed. The compression level deflate_level is an integer between 0 (no compression) and 9 (maximum compression).

3.2.5.4 netcdf.defVarFill

: netcdf.defVarFill(ncid,varid,no_fill,fillvalue)

Define the fill-value settings of the NetCDF variable varid. If no_fill is false, then the values between no-contiguous writes are filled with the value fill_value. This is disabled by setting no_fill to true.

3.2.5.5 netcdf.defVarFletcher32

: netcdf.defVarFletcher32(ncid,varid,checksum)

Defines the checksum settings of the variable with the id varid in the data set ncid. If checksum is the string "FLETCHER32", then fletcher32 checksums will be turned on for this variable. If checksum is "NOCHECKSUM", then checksums will be disabled.

3.2.5.6 netcdf.getVar

: data = netcdf.getVar (ncid,varid)
: data = netcdf.getVar (ncid,varid,start)
: data = netcdf.getVar (ncid,varid,start,count)
: data = netcdf.getVar (ncid,varid,start,count,stride)

Get the data from a NetCDF variable. The data data is loaded from the variable varid of the NetCDF file ncid. start is the start index of each dimension (0-based and defaults to a vector of zeros), count is the number of elements of to be written along each dimension (default all elements) and stride is the sampling interval.

3.2.5.7 netcdf.inqVar

: [name,nctype,dimids,nattr] = netcdf.inqVar (ncid,varid)

Inquires information about a NetCDF variable. This functions returns the name, the NetCDF type nctype, an array of dimension ids dimids and the number of attributes nattr of the NetCDF variable. nctype in an integer corresponding NetCDF constants.

See also: netcdf.inqVarID,netcdf.getConstant.

3.2.5.8 netcdf.inqVarChunking

: [storage,chunkSizes] = netcdf.inqVarChunking (ncid,varid)

Determines the chunking settings of NetCDF variable varid. If storage is the string "chunked", the variable is stored by chunk of the size chunkSizes. If storage is the string "contiguous", the variable is stored in a contiguous way.

3.2.5.9 netcdf.inqVarDeflate

: [shuffle,deflate,deflate_level] = netcdf.inqVarDeflate (ncid,varid)

Determines the compression settings NetCDF variable varid. If deflate is true, then the variable is compressed. The compression level deflate_level is an integer between 0 (no compression) and 9 (maximum compression).

3.2.5.10 netcdf.inqVarFill

: [no_fill,fillvalue] = netcdf.inqVarFill(ncid,varid)

Determines the fill-value settings of the NetCDF variable varid. If no_fill is false, then the values between no-contiguous writes are filled with the value fill_value. This is disabled by setting no_fill to true.

3.2.5.11 netcdf.inqVarFletcher32

: checksum = netcdf.inqVarFletcher32(ncid,varid)

Determines the checksum settings of the variable with the id varid in the data set ncid. If fletcher32 checksums is turned on for this variable, then checksum is the string "FLETCHER32". Otherwise it is the string "NOCHECKSUM".

3.2.5.12 netcdf.inqVarID

: varid = netcdf.inqVarID (ncid,name)

Return the id of a variable based on its name.

See also: netcdf.defVar,netcdf.inqVarIDs.

3.2.5.13 netcdf.putVar

: netcdf.putVar (ncid,varid,data)
: netcdf.putVar (ncid,varid,start,data)
: netcdf.putVar (ncid,varid,start,count,data)
: netcdf.putVar (ncid,varid,start,count,stride,data)

Put data in a NetCDF variable. The data data is stored in the variable varid of the NetCDF file ncid. start is the start index of each dimension (0-based and defaults to a vector of zeros), count is the number of elements of to be written along each dimension (default all elements) and stride is the sampling interval.

3.2.5.14 netcdf.renameVar

: netcdf.renameVar(ncid,varid,name)

Renames the variable with the id varid in the data set ncid. name is the new name of the variable.


3.2.6 Attributes

3.2.6.1 netcdf.copyAtt

: netcdf.copyAtt (ncid,varid,name,ncid_out,varid_out)

Copies the attribute named old_name of the variable varid in the data set ncid to the variable varid_out in the data set ncid_out. To copy a global attribute use netcdf.getConstant("global") for varid or varid_out.

See also: netcdf.getAtt,netcdf.getConstant.

3.2.6.2 netcdf.delAtt

: netcdf.delAtt(ncid,varid,name)

Deletes the attribute named name of the variable varid in the data set ncid. To delete a global attribute use netcdf.getConstant("global") for varid.

See also: netcdf.defAtt,netcdf.getConstant.

3.2.6.3 netcdf.getAtt

: data = netcdf.getAtt (ncid,varid,name)

Get the value of a NetCDF attribute. This function returns the value of the attribute called name of the variable varid in the NetCDF file ncid. For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.putAtt.

3.2.6.4 netcdf.inqAtt

: [xtype,len] = netcdf.inqAtt(ncid,varid,name)

Get attribute type and length.

See also: netcdf.inqAttName.

3.2.6.5 netcdf.inqAttID

: attnum = netcdf.inqAttID(ncid,varid,attname)

Return the attribute id attnum of the attribute named attname of the variable varid in the dataset ncid. For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.inqAttName.

3.2.6.6 netcdf.inqAttName

: name = netcdf.inqAttName (ncid,varid,attnum)

Get the name of a NetCDF attribute. This function returns the name of the attribute with the id attnum of the variable varid in the NetCDF file ncid. For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.inqAttName.

3.2.6.7 netcdf.putAtt

: netcdf.putAtt (ncid,varid,name,data)

Defines a NetCDF attribute. This function defines the attribute called name of the variable varid in the NetCDF file ncid. The value of the attribute will be data. For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.getAtt.

3.2.6.8 netcdf.renameAtt

: netcdf.renameAtt(ncid,varid,old_name,new_name)

Renames the attribute named old_name of the variable varid in the data set ncid. new_name is the new name of the attribute. To rename a global attribute use netcdf.getConstant("global") for varid.

See also: netcdf.copyAtt,netcdf.getConstant.


3.2.7 User-Defined Types

3.2.7.1 netcdf.defVlen

: varid = netcdf.defVlen(ncid,typename,basetype)

Defines a NC_VLEN variable length array type with the type name typename and a base datatype of basetype in the dataset ncid. basetype can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The new data type id is returned.

3.2.7.2 netcdf.inqUserType

: [typename, bytesize, basetypeid, numfields, classid] = netcdf.inqUserType(ncid,typeid)

Provide information on a user defined type typeid in the dataset ncid.

The function returns the typename, bytesize, base type id, number of fields and class identifier of the type.

3.2.7.3 netcdf.inqVlen

: [typename, bytesize, basetypeid] = netcdf.inqVlen(ncid,typeid)

Provide information on a NC_VLEN variable length array type typeid in the dataset ncid.

The function returns the typename, bytesize, and base type id.


3.2.8 Utilities

3.2.8.1 netcdf.getConstant

: value = netcdf.getConstant(name)

Returns the value of a NetCDF constant called name.

See also: netcdf.getConstantNames.

3.2.8.2 netcdf.getConstantNames

: value = netcdf.getConstantNames()

Returns a list of all constant names.


3.3 Test function

3.3.1 test_netcdf

: test_netcdf

Function to do a basic test of the netcdf interface


Appendix A GNU General Public License

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program—to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

The precise terms and conditions for copying, distribution and modification follow.

TERMS AND CONDITIONS

  1. Definitions.

    “This License” refers to version 3 of the GNU General Public License.

    “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

    “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

    To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

    A “covered work” means either the unmodified Program or a work based on the Program.

    To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

    To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

    An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

  2. Source Code.

    The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

    A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

    The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

    The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

    The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

    The Corresponding Source for a work in source code form is that same work.

  3. Basic Permissions.

    All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

    You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

    Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

  4. Protecting Users’ Legal Rights From Anti-Circumvention Law.

    No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

    When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

  5. Conveying Verbatim Copies.

    You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

    You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

  6. Conveying Modified Source Versions.

    You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    3. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    4. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.

    A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

  7. Conveying Non-Source Forms.

    You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    3. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    4. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    5. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.

    A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

    A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

    “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

    If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

    The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

    Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

  8. Additional Terms.

    “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

    When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

    Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    3. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.

    All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

    If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

    Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

  9. Termination.

    You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

    However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

    Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

    Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

  10. Acceptance Not Required for Having Copies.

    You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

  11. Automatic Licensing of Downstream Recipients.

    Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

    An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

    You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

  12. Patents.

    A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

    A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

    Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

    In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

    If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

    If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

    A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

    Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

  13. No Surrender of Others’ Freedom.

    If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

  14. Use with the GNU Affero General Public License.

    Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

  15. Revised Versions of this License.

    The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

    Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

    If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

    Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

  16. Disclaimer of Warranty.

    THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  17. Limitation of Liability.

    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

  18. Interpretation of Sections 15 and 16.

    If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

one line to give the program's name and a brief idea of what it does.  
Copyright (C) year name of author

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see http://www.gnu.org/licenses/.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

program Copyright (C) year name of author 
This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
This is free software, and you are welcome to redistribute it
under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see http://www.gnu.org/licenses/.

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read http://www.gnu.org/philosophy/why-not-lgpl.html.


Index

Jump to:   A   B   C   D   E   F   G   H   I   L   N   O   P   R   S   T   W  
Index EntrySection

A
abortLow-level functions - File Operations

B
Basic Usage OverviewBasic Usage Overview

C
closeLow-level functions - File Operations
copyAttLow-level functions - Attributes
copyrightCopying
createLow-level functions - File Operations

D
defDimLow-level functions - Dimensions
defGrpLow-level functions - Groups
defVarLow-level functions - Variables
defVarChunkingLow-level functions - Variables
defVarDeflateLow-level functions - Variables
defVarFillLow-level functions - Variables
defVarFletcher32Low-level functions - Variables
defVlenLow-level functions - User-Defined Types
delAttLow-level functions - Attributes

E
endDefLow-level functions - File Operations

F
Function ReferenceFunction Reference

G
getAttLow-level functions - Attributes
getChunkCacheLow-level functions - Library Functions
getConstantLow-level functions - Utilities
getConstantNamesLow-level functions - Utilities
getVarLow-level functions - Variables

H
High level functionalityBasic Usage Overview
High-level functionsHigh-level functions

I
inqLow-level functions - File Operations
inqAttLow-level functions - Attributes
inqAttIDLow-level functions - Attributes
inqAttNameLow-level functions - Attributes
inqDimLow-level functions - Dimensions
inqDimIDLow-level functions - Dimensions
inqDimIDsLow-level functions - Groups
inqFormatLow-level functions - File Operations
inqGrpFullNcidLow-level functions - Groups
inqGrpNameLow-level functions - Groups
inqGrpNameFullLow-level functions - Groups
inqGrpParentLow-level functions - Groups
inqGrpsLow-level functions - File Operations
inqLibVersLow-level functions - Library Functions
inqNcidLow-level functions - Groups
inqUnlimDimsLow-level functions - File Operations
inqUserTypeLow-level functions - User-Defined Types
inqVarLow-level functions - Variables
inqVarChunkingLow-level functions - Variables
inqVarDeflateLow-level functions - Variables
inqVarFillLow-level functions - Variables
inqVarFletcher32Low-level functions - Variables
inqVarIDLow-level functions - Variables
inqVarIDsLow-level functions - Groups
inqVlenLow-level functions - User-Defined Types
Installing and loadingInstalling and loading

L
LoadingInstalling and loading
Low level functionalityBasic Usage Overview
Low-level functionsLow-level functions
Low-level functions - AttributesLow-level functions - Attributes
Low-level functions - DimensionsLow-level functions - Dimensions
Low-level functions - File OperationsLow-level functions - File Operations
Low-level functions - GroupsLow-level functions - Groups
Low-level functions - Library FunctionsLow-level functions - Library Functions
Low-level functions - User-Defined TypesLow-level functions - User-Defined Types
Low-level functions - UtilitiesLow-level functions - Utilities
Low-level functions - VariablesLow-level functions - Variables

N
nccreateHigh-level functions
ncdispHigh-level functions
ncinfoHigh-level functions
ncreadHigh-level functions
ncreadattHigh-level functions
ncwriteHigh-level functions
ncwriteattHigh-level functions
ncwriteschemaHigh-level functions

O
Off-line installInstalling and loading
Online installInstalling and loading
openLow-level functions - File Operations

P
putAttLow-level functions - Attributes
putVarLow-level functions - Variables

R
reDefLow-level functions - File Operations
renameAttLow-level functions - Attributes
renameDimLow-level functions - Dimensions
renameVarLow-level functions - Variables

S
setChunkCacheLow-level functions - Library Functions
setDefaultFormatLow-level functions - Library Functions
setFillLow-level functions - File Operations
syncLow-level functions - File Operations

T
Test functionTest function
test_netcdfTest function

W
warrantyCopying

netcdf-1.0.19/doc/octave-netcdf.pdf0000644000000000000000000076517515126111435014001 0ustar00%PDF-1.5 %ĐÔÅØ 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚmTM¢@½ó+z&ÎÁ±?tBL$ñ°ăd4›½*´.‰<øï·_•è̀f’W¯_wƠ«îrđăc;̣ê`GæUOÛV×&³£øç¾öƒ¤Ê®[vïÖæ6ïWÛ7ñÑTÙÖvb¯“uYt/N¼.³ó5·½êÿ¢¥=åS‚> stream xÚmTM¢@½ó+z&ÎÁ±?tBL0ñ°ăd4›½*´.‰<̀¿ß~U¢Îf’W¯_u½ªîvđăc;ZäƠÁ̀«Ÿ¶­®MfGñÏ}í I•]/¶́̃­Ím̃¯¶o⣩²­íÄ0^'ë²è^œx]fçkn{ƠÿEK{*ʇuÄpg6;µ̃$4»¢;»µgZ8, ’ü²M[Tå›P¯RJG¤eWxm½ñ­÷E™7·¢â ̉"/²îÑ7»¸¦‘¼ưj;{Y—ÇÊ‹"1₫t‹m×|‘£o¼irÛåI É‘c¶×º>[T̉›ÏEnn#×Ûû₫bÅø¹‘û̉î«¶BS¬ØEVå¶­÷™möåÉz‘”s…«¹gËüŸµ)gÏR©đ133wÄ xAÄbêí;¬̉aGL6K& 0+‡}&ö"?‘á°(̉¦̉a/ ¡ć,•!£½¥‰î-fö3¤Ù*IĂx {aªùđ”sIC%̉đhSô¢¨7å£Å}­HÏ=ŤIYƒ¹(îƒêjŧ ÿZóéàü4{ÖØSOØá5˜‡áZ ä®ekxvKº·Ǭü÷…Ü@2aÂ> stream xÚmSÁnâ0½ç+¼$z Ø¨"¤€ÄaKU¢Ơ^C<ĐHàDN8đ÷ờV{Hôüæç=üúØS`¾Jñ m}u%Œ̉ßE Y]^/`»w¦¶oâĂƠå:1L·ÙÖVƯ‹omy¾èUÿ­àTÙ ÖĂ₫v¹Êó‘DM^ug{¦…Ç‚° ÉpmUÛ7¡^¥”X[“ÖôÚă{=1î+kܽ¨8 …@iaª²»¯è_^|Ó˜¼¿µ\¶öXq,ÆŸ>ØvîF^‚ñÎp•=‰!9̣̀₫Ú4gÀêBË¥0pôù̃̃‹ ˆñs#P~k@hZ+vQÖÚ¦(ÁöA,åRÄÑf€5ÿĦœq8>K¥Â_¸—X NˆHæĐÔ3$¤Ç˜{<Ư0*¢5cƠ~ÿP÷ơʯÂùƯ5WÂ42^!0^#rq‰xƘœE„3xÎü ñ ªz“)c̉gl1B̀î̉°ơ•?ŸXqû!̣NA‡¨W»A*dư1ùÔ)iȧΰÅç“Đó â9ç’†NVf¤¡–kô¯VäaUJü†ố?%Í5Ø»bÿTW£=ј«±®–¾Œ¿É5ëñ2éfè&p2pj³V^ócH£Mc†VYxLS7˜E=›₫1âj· ¾gÈÈ endstream endobj 6 0 obj << /Length 308 /Filter /FlateDecode >> stream xÚ…‘ÍNĂ0„ïy C¯×¿W(­ÔC(œP¨$m$¢¤Ă3À©mq›¹¬¨ ªˆ‰‹¬e(+Ȱ!³ÍD²=w»áØwïéjd[2Ï)ŒA¢Ó.å ̣¬#o#V›ûÙôm›v@q6èÀđÑ@àÚЧÓ@eĐƒ ü4Ÿ%Ê“ë₫ĐåF}×ï©Äsók/>‚?[Aˆ‘¦V>¨8~ù endstream endobj 13 0 obj << /Length 622 /Filter /FlateDecode >> stream xÚSM›0½çWp$̉Âb̀W®ưØJ{ªªÜÚ¼à€µ€#cRơßẃçc­V‘‚ç1yóæÁ¢ ~,ªó¨nxÚđ:j§MæQÓGxøñmĂ(¯(yZÎï¦%e^ú¼äªê§ưæñ©,#–¥»lÇ¢ưÁµee•̣]´ï¢Ÿñg}ÜæMüר~p»ư½Ê"Íkh™̣œ̣Z‡?>UÅu­„§‡ÖWy¿2Vbêm[V¹ ˜ú¬<Ëó₫ÊmÂ9Ÿơ0»SѳF"«ôL’ªL릉V¥,₫Բ(ínf> stream xÚ•VKoă6¾çWèV¨hñ!‰ÚÛv· Z»Eá{P$Ú"jK†D%Í¿ï ‡rdÇ©±0`‡Ăy~ĂRøñ¨Q¡%Ó²ˆêĂ]ê¹Ă."⯇;äT&Y¦$Đÿ+–d"órÉBë/›»ơ½WLª\D›­7+r–f*Ú4Ñ·ø³Ư`'gûnơ}óûú>Ë"²2-9ʧQÂKÆ…&ñMkNR%+s‘£àL²^æáËß×4¼̀g¡¯µ«VBÇOøgV‰*₫bܧÏ÷HËøXƠx̣Ï*ËăjgˆiÇ ¸\*æ¢`y‘Í·ƒ1Wí§=KưÖ¡gü«ĂV‰Ju|¿̉2F̃̃¥¹ ^øÓ–C圈º6h˜F3Œ?5ư}ä*¦ÔKÆ3NN¹~•È\ÅĂÔư T!âº?®D¿¬´«™+fctSó‚~ÏwĐÛ¶ê0k2ÏâªkH­=‡~™t<ơ®â镌dRCÅ1^8˜ªçK•#¦!]Ă º â³^ª•ÇF¸¨M¢Ê܇+$ˆëh­PGCô[ñÁ¼†~lûµ6ƒ«¬ßd¾®±í¢)¥x¿ĐLü€5ăÀh;ØXPà²8/đ+ª3BµL…Ç“LyÜơ+˜–qÛŸ 1çןèĂ;T5 ÓẵÖD¸ rD²Tñon©= IÇ/ƒƯµH8ÓĐÁuBâ[3ÅƠL ^û,§NXw^ăd³xRĐmÉcØ ‘¿s¡È 5f´»Î»‡7zânœH"áÜAÁ³Ưï‰ÛU9ÑcuÔ²#Ó+­( Â'”& Î!ˆ‚B±0Xœ\Ä̃n?Ѧ]b¡àuÛ´áÊq0µÍ½"7́«ˆGxLNV¶ư4»e»Ùđ5„+™²BóOf±eÏ>˜Î dV@Wÿ9A" q¸ưĂÖPC YÀ£P÷3óÙº–˜×iÁdỸ¹*̃`ç4;€~;;æWü 7µ{âUÇ#¥µ̉‰’¥*?…ơ#̣î×ÍíjÅ QD9LX oh–ÁK!$›~VŸs–C;\O÷ừ>₫ˆwåắ1Àä_¬¼Œ?̣̉íSètÛí¾û₫SÿØÀ)Ï.C2c©< áư¯Œ |Ăá •̃aæ^.½3.ËđQĂ ûMgđ†aƒ¹¢¬Ô¬~#óưd¡€r/C¹4ăCj;Öë]7%=„÷dB¤R¤t ïôêôÈl¿&Ù¤3®n¶ë7ˆIKŸ¥Q¦á“Sß„LNâ×0s¡ô4hú?uûÄI endstream endobj 86 0 obj << /Length 2787 /Filter /FlateDecode >> stream xÚíM“Û¸†ï₫:Ja âƒdkgœMmÅU[³¹$9È­Fr$Ù.ÿû4E€hDqv, ÊÚn‰ÏËFăƒä³ ₫ñY‘ÏR°R³ơĂ«́üîáì}ñÛÛWÜ´[BĂ%jùóí«Ÿn”ñŒUYÅg·÷3•çLqÑÙ»½›ưc¾Yüëö¯¯₫|ÛR¹bJ‰^mëë2Ÿñ‚å\ÉÆuó)rÍ²æ·Æëí¢’óƠûm½XBÍ÷÷íÏ×ûƯBđù©nû±]J–ñüSđ6Ë*ø̃iâóßé=èØ.FɄԹ‰Ñ68ÇÈË*Óó_vÇÓj»Ứ>´1®vwí‹í~u×¼Û‹1—I)½@Ăߟm=ˆg%.W“Jû₫i±äºhhï·ÿñÍïj́́£ÍKø̣ªh†́ñ€Ôwchè ôPV9±­®}‰—U {º`ªÆ3’u–Íßí€âFqB̀ßlơúÔ¼–óÍnÁçGøÎæ èMœ?ƯhỊ́<;_9²ïÇƯ…ñz-f-„˜'+¿DF3ï&¤ˆ6—à`&dÚµU„’Læ"r£ˆf\,*6íµ~LgBä‘ ¸0z’œH­”âµâ PZñˆ j3E+¤k« )l̃b¢Ơʯ®»Ó׆æĐơ{!ÚHê{¢‡ dñ*r(y,U„‚ «H*ѪH4¶‹¸„Cw¬TD bœÎÛäçƠq³n‹ß«¦hz÷¥)’êĂ—MưuX„TLT3ä¬Aα JΪ¼̣#L%Hd ‚ÎL\ B‚Ôwch • “0q%HÏơhQ•d…4ƒ ¹-A₫²ùđ±íjmë/‹¼œ×MÙ±mߺÿ¼[Ÿ6ûƯj»95û6Z°[ê”l.)r€e$: DđQ å̀„íÚ äLUÚ ·=©†î¯mñmuđ4 Àë<ÿaËñÔGzrQaI‰—‚3@IÁ2(̀ÿ·;¤ O¡àÁîmpX´Ư¡›fđØè¤í ưvN#÷ơ¡̃­ëA_(‡î Ÿ!WT_¨m<¬ß9 ÇúÑ¥®Đẃá³Ơ?¢Éê»1xúGÓĐ‘¢b €Æàơ“C79c©„bÙc‰¥mÓ†;WK/ŸÈù= í© fṢ,g™P3ç†iÜÏÏLyׄ¢̣âK™è̉=„r–ă&.eQ ÷œ„jÖ‚]×̣Ë3̀*K0ƯT»Â¬Ævëơ¡^ê±nYƒºJCÄ/ÏCH -Cñé§‚A ÄE2E ”ßN YÉ ]9…äV!w›ă§Đ0q• ÷T‹Åđ¯g€’‹‡mP/(˜)‚!][ÅÈJ1ÍK§a³ÙƯïÇ£J¦‹2I&å,*ÍX®¢•ƒ Êññ )3A9´ëN9%”Û)GZå@ǵn4×À%OÊIÉf\2¨xÉ8”d0·*(̀É®;Éèf Ë 0…%³:F+Í<-ózIB1øÄ Ä ‚) 3E ¤ëN J3ø œ@´È×Ăf¼À×I/ÛCH,¥x±8”X0±:(̀±®;±HăåH,…'–@:)á¥Öi@́%KĂ€/ g€’æ3, ̀i®;iÀŒa©•“FéIă¸n¦c>Ö«Ñ™ü,c%̀礙üë^íh!‰—3@ɳ– †Î,a¸æµâÑÓ™¦C .éùLÛȈÈ_(³$Ö &5y³°°Q ¹%>¤m=ˆ²?­ +Ø`J× 3Ié̉¯-!±"tâÄJ"ßws†©uǰ¦Ÿi¥ŒXŸ¹ÍeKÙ̀ßkùXÊ3­¬Zíä诛÷‡Ơá[«Đ›E)ÂKÎk$ä ù£Ö˜Öƒđz*mu(?ºDư Ö!HâôHRƯwóˆ'ëú´ ́f猨`w/HPƯzƒú´¾»gêÓëMü¼û÷ë•éRv(%h —©æzÖE₫†({Z£ÁEp=z‚àâ`&€K»îÀ-`¿Î1¸¹îf÷È _”vªÇ÷K–Ăe;•@?˜‡Ôæ”ÇCí PPc²ÂP£`¦@Mºî Ö’qîA-<¨Ó¯Æ*]°™ {văùu(~1Da~Q0Sø%]wüªfÜ•c~eŸß7ơưêóötî¤ï°Hø¡)®W£Ă¸pVˆ4û¼U©=«ñÜ:·0·(˜©U)/K…(XÉ©JM£zÓ¹ÙlÍỮ}Z,›a¤Ă*°.Öræ|‘«áÏmûơGàÆĐ³Á¥!‹½„téx‰“%ÅvÏÉ#¢œB®Ë%¤¦l*ιVUS˜rîrÉêưYTûĂxêÈà~™H©ă îdYˆ'Ư PÇÈ…YGÁLtƯÑÎñn°3í¹Oûz»?Ö¡‰<‘iÁáờÙYâyç₫Äïº0ï|ÊDÇ;éỤ́W%ªÄ¼‹ïÁÍNz@Eôât1~̉-Ѥ#énẢq0H§]w¤—  LºôI¯wwP’¯u¡é—¼Ï¸3@!9+ƒˆ£`¦ Nºî/`ƒ¶̣W>â0¸³aº_o}j¹ˆ'ß ÈÇø…ÉGÁL!ŸtƯ‘Ûäྠ˜|= ÿ¦™‚ÚCœà±ªD„ºI({Êă¡v(¨1Ya¨Q0S &]wPĂÔQ¡†º@ưöđi|N•+&̉¾ÑË\îbÏ|<ÛÎÅ6,̀6 f Û¤ëm¸{’Î<¶ËÛ¿ĂƯỄl¡‰U™¥; =K¸!nÍYçÖ ¸Åđ„¹EÁLá–tƯqË+¸ë—ÄÜV>·{3Å´ J™.Ë—¨±ó†ˆxæy ^˜ỳæI×ó™f"̃ Pæ­&8Ô¡˜˜­̉äÏ5‰[âyw(̃1tãQ0Sx'][̃yƠ¬UđyçưƠ3°¦`ü9) q Ó„hÔ‘u· ê8˜ ¨Ó®;Ôan–åê₫êƯă·ƯztȰ‚EíU3¼=–…xÚvŒ\˜v̀°º ¾VªÇ–—ÙVZ̀`(QëƯqt+"ŒÛ x0²OmE4­áôRLY° f£¼p’>^̉à'æ)N«$đ}7huÜ.3ÑZ³™ n-^dXk½ưPwơ=è.Ôă"ƠØ×Đ3Äsî Pœcت ç(˜)œ“®;Î%| …1́"0—"q~œ·Äc̃OQP Cî"™Â8å·C> stream xÚíKsÛ6Çï₫:J¡Ä“`o}%ÓN'Ó‡ÓKÛƒc1©¦âỤ́´ưö]J$° ˆ‚NS)Æd&–ih÷Oá·°xˆÏ*øÇgµ˜ƠV2+ëÙíÛ«jơ₫Í́đâ‡çW¼/·„‚KṬóë«Oi=ăkª†Ï®_Ï4o˜²̉Ù»^Í~¯×‹_¯¿¹úêÚỶB3­d¢Û¡ô ßœø+Ü‹0¬̉êà[2ÁS‹¥©ªù¶ƯƯ®^³ơöç÷w/ñ¶®O˜‘’5Ö€ë½OKnêĂü6y1¡È¿¼xa₫±#j*VÙÆUpG Óđ7V5đ{|Â+!G‡÷/‘)†Gnö4Q„‘˜„I×a.àÄëÂÏVÍ7›I”µ¯¹(Ÿ7çäaŒẀHåjñ½9íß¿D&Ÿµ¡›}ó* *R“*é{Ơ4 «uª™ơ»…°ó›ûvÛưÜM?u-ăÆ>§î¹Éđ;Tn6¿ÈÁoÀPœ_¬&_Ú·ă×f*ù­Çü¾¸]¯&‘­&m}¶O×̣ü&áîk>no€‚FÀÔ¤ÀMúvp×’)Í1Üv ÷O]÷áæ₫ë/&‡î|—J_ø̀<Ä îk<jo€‚ƒE@ÔÄ¡VB2~–\2®ß[:¯8³Ö‚tS1YŤņR.&ú~5Ä„8Xß¼Ú´ăâ5ô¿­!Ä ¥b«®™M¨¨4"³‡XÔ"¬̣¢–D́æTÔ&Aî›":́†¦HƠ]pû¨c>Uûºob]-¡yi‡.³«u¨ü|¼Ưû)ºaÜ^J Û”c‡v—/l̀¶ˆ±ưÅo QÏ·¿¯· >3³Qđi4%góÿäl†Ú̀‡Ơ hÅи"5)¼’¾°ß´*VÆ€ư²ư¥âúf7)WĐcăª €?¨Ü¸}­æƒë Pàbxp‘pIßܪf¦±\÷Ù:’Ư}”4ăÙ÷úºÎÇÙ pÆH8#5)8“¾œuăDUcœuç \éú¿µ÷RL÷,S²ư¡Ÿ»C-fƒ  °p«I•öí@µœÉ&Ơ„ ¾iw}%6zSUAó̀=Äïk?po€CFÔ¤Núv€Ë̀“#ÀëpŸ)®µ*鉋́j µŸ¸7@!#GjR'};Àµ†[̣o6¸ÏQ@bÍQ(˜~*9ÿ%G1Ôf>°̃,††©I–ôí€Uœ5*¶‰{2G¡xYWrC­æƒë Pàbxp‘pIß\aYƯ¨`¦£LºS9F–Y÷óï9ô•ϳ7@ñŒ™"xFjRx&};9 ö” xæ1“’µ4åiü¡“}-æƒê P bXP‘PIßÔ Ö75!¨"ºÚiú± Ÿ„lÊc÷܌Šîk<jo€‚ƒÅEj¤&j̉÷µ²°ÄT‰j@}÷¸£đZrQ·™yj?pd€<€,8V“8íÛ^ÆnÖ‚M°Ë…Ê.‹º$º0~~ûµÀúJÎçØ 8Æ,#5ÿưªTe$«Ô©U©C)ư&Ïöûev÷ëW»‰e©œ«rA­J=>4 & !hy(¨ô„̉rŒS^´’ÈƯœÖ$¸}«C‡ÛĐꨆY´Ê°pH{ûî® ¼¿ûđ‹Mù4,kŸ.rʧ q÷~pD¸—’Â7åØá- dY¾Ă‘đªƯhs&ª’¤ù¦̣I÷(Ô1qëHM ́¤oG;ôÔ´µ˜öpˆ ‹SHÚeI¶_ŒÜæ=ù˜{æ5s¤&s̉·Ă®)`~tª ‰9l+°e­öeÈã3¹7@aQ#0GjR0'}˜Ăb-&l1×̀#Y|˜-¨LÙ?sa9¢¡̃³ÑF´¼ •A«I@›öíж ²÷£m"hGϦç=ê,{y‡JÎçØ 8Æ,#5)“¾Çuµ? q\ç¤NôD¬¥Ă}Éî|̀½ sŒ9R“‚9éÛa®kø©1ævbf"½›CPº~îéÀ¡ªóiö(1QÍHMêÏŸ¡’ ÔYub†j(墡ä¿|hï—û¸jÛ®K)åüº[ö÷Ưb ?g­¬n¬aḲKÜæPúHfjU¬ë‘̀µÜ‘…$Éc7§¢0 OߦĐQ4´)’Ă3E£™§nÇçIŒ̀8s§´W$Ü}ÍçĂí PpcÀ¸‘¸IßnnáZ€Ù5×û¹Ơ®y°óè ̀Z¨2u~‹†:ÎÇØ 0Æ(#5)“¾Æà#ÆX­#&ÑåHĐ‹}F÷5Ÿ·7@Á#àFj₫ûuj¢Đ»'FC)ưˆøån½YïÖKÔŒƯwß‘yjZ_úHÍøäD+>y¨¦DÂÓ=¨Ó•¸4ưc7‡ÀU±ÀMcƯµJ'"¯o•Dma™Z!jG#XåđÅ»íĂî†8cf´)\Îwö`¨å|½ d 2R“2éÛlàp ‹9ÇƯLØôÑÔ6ĐÔ¶Àü¡̉3}Åå£é̃O‘‰è ÀôRˆ|£„†Ă3{FpÂz£:Ùđ*&6fè ơez¦ûÑÂu·e¥}Ør¢¯··»ơ»íñÑ̉ À¼̣`é}Ù±¤ăÎQSË@Sr<ƯA "+/l)₫GNN…m ä¾9¡»‰„£Åj·ÔY¢]x½Œ?|°©îéĂ»j¾Ïgưük5[Á¿Bûs_̣í Z¦º[f±™ưxơư¤ E`÷| àĐ„MµV²b†ó’»ư¨=Ä"°G$?½*1‰D"5Dă xrfƯw¡½ÿ²¬î›E— küÀÆ8 U*#:ÙPb(°WüÙd„%Ÿ·ÛƠú/xUkØưù‰JÏŸ¿xy¸đ¼Ư¶÷7›Ă/ß=¾Ú¬o¯¿]ß¶Û‡v|Ïz¤đñ̀â‡̉GÂye±r gÊøùg:@îv)©&ø̃ Á₫ư'êŕ怠>FĐ́¿X/­:Twz÷m}0uœ… ‡½¯ăö¿̃®Ú¿:hZafÈƠEëKy1Ä¡SZIú¿àGă“ 8LKVÀÑäỨñÑ€#Ùưï¸„Ó endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 837 /Length 2469 /Filter /FlateDecode >> stream xÚÍ[]o7}ׯàc÷Áïå÷"(Ôp·@[äc±Û¬d{’ë•IN›¿ç)Í8•ÛÆ6Ï'Ï9$/É;÷̉^åTXQ E¤8EIYö¼rÏ‚̣1(¶*Z§Ø¨”p3ª̀~–đ–!«w¼aÅ ¯Û¬8ăDÊ XÊØƯâb\£ˆ0  38zÅǜ‚' €ôYÙÈ́ ­Á}‡G¢r•pÍ€ÊĐiA¸Æ«E7 œ™9P%눈ç í2RV·¬wÊÈ5+®-d\;¼J¸öx•ó̀£-$ho .^ x?r¨’(‡¶ô åă#Xio›PîG…E)$qeOBTÛymS¸½-¯‹_ư¡Û,¦´¶ªđĐ(P"f´àGá–!@×ÔThïWJʸߔ’3>·üàŒX˜L¶®)eBôj„Ĭ£c:‰(áÿd;xŒ¯¬`ÛRÂÿ‰iđ 8`…JÜ”₫O°Ằ̃jk©)¥5¨Ơˆ̉M©)#ETjˆÅ0G|®5éƒä#F²:ÅÜ’’úđ÷ˆ̉Äï›¶+ňµcX¦(I˜­ å~™ÂçNˆq&‹ˆE‡†¾×"pºü_·ÚN7ùï¥ZăIèf$ Ñ$JËQÚ„øç°.!§‘¿lJÉ’âÖ%¤LsöM) Ÿ0£¸ 2¹:±kA¹X|s”]`”ä5<Ă;>‘ÇȾ߬o>Ld`UÔ¡‡*̀‰‡a϶¥9DDƯFXḿqØ> stream xÚÍVmOÛH₫_±{ǾÎzß$T©% W ©ĐÓƯơúÁ$°́œc üû{&&ƒá §“ï¼<3Ï̀îZ+”ĐÆ í,^PĐxa¢Ç3 «Đ™Îá=Ó"ô‰È>tÊ„Lhíă@gE¬°°œÁÏ"€Î°ê{G¡½‡ÊÂ=D¸[¨£Ñ¬¤o.@p0Ä€1Đ^C óÁ²Ađ̀ "¥9*BTw2^AÀ?²Èh€“p79€÷÷ŒVIA`B"ܳ/dI´ MWjáª#Ü-³ê4̣‰pwœ9‡XÀ²¨ă\܇Wơz°F¸&¬zđGṽ²PÏ5¡̣QH;î”a “„_`n@…¸bBPd₫PE®€¬0cƒÀƯ&tZqba:’„Ñœ¸!œÉ p>³¢LA€;9„Gƒ Ô„1F1m§€Ù0Æø…ÀX ,°1@yĐ™ŒËÁ0™̀0µpÏ02dyŬCàÎX€Z汌e1UÆ2Ïî–3D‡ÅdĂƯ1µ˜_ă ÛÀƯaN A 5è‡Àăàê•cú!¨ÄôCàcàLX±÷€ư&a´Là9&đ¤`>0Y¼Â;je ÷hi°»;_/’¾+˪ .NƠûAQ~ ßWơ4Ơâ‹Â₫T_ĂĂ4iÄ«3é¸I ̃-Yi™iK’̀̃‰Ư]1<Ăưê¸Ă‘xsP]í̀Óeÿ¥25»('MQ•K~Ùៗ©̃¥YQ¦)¿sNË_ÄÛ·üưd’FK‹ç&I¥V±3Km^S;ÉS°ÁÄ3ÚWÆTFj4yƒ©I^;S E’ ƒ‡ƒRz̃A1Jgư¿€¦˜MñR]_g¶fă”™w2ܶ ›SZƠ˜Î^̉Éç₫Ói¬{L”qÖâ4®@%-„Jâ®é›:=¡N Z6ï5».'Ï’ÊåílÜyß ïÁMÓ Æ}V ́ÉVF}v8­óóÔ°§ÎưººX´5₫ißG endstream endobj 425 0 obj << /Length 1275 /Filter /FlateDecode >> stream xÚµWKÛ6¾ï¯ĐQV´HzäX´ R 8è¡é+Ѷ°²´ äÛ_ß!‡ÔkµÙE`#‡óüæaÄđ ²œ“œgAy¹‹-UŸüøô₫:¾£çO‡»ư¯B4&E\Đàp ‹Iœ£¼Cü̉Ư߇ßî~9Œ‚D$ü;µzîªsĐŒ0*£ÚxÁR›jDÊĂ;¶ư ›¦nO»ˆg"”m…M'+CóÖÄAÄrNØá¬à çáĐíà"́Çz@ÊeDzđÚ»Óƒ½v̀5*VQ/OÂá¬Z$ üµ½‘€`Uc ±ˆ¦„:ƒ>}9Ki$ålö*_*¶ÇÑÅ‚)K‡4$ËSk¾ÿăóV ¢„Ü1},¹5_w“®ªÖªg<uwÁ¯Á† ,»™©‡¾Ô=P voœñüÆ3c¼%{̃îKLyÙT6,åŒdŒ›BEC/˜¦Ê%âk-] 0ªUg¸µ‹đKưjÁæÅ,ưIR¬̉o(gÙă‡Äÿ*ơ„δ•jËg$v­{~4Q"[5”ƠéM ô-µăÿ‹x]4œ ’Æ4H#‚Û!®¤đ‡2[ÏA߇›Ôjî×Qóˆ‹ åáYñFđÜÑŒ}£­…ZK œô³Üwˆ€Yơæ¾z‹Ằ—̃ªzkW²®”vu YṣúkYª¾?^[ SñOœg'w!D[TPôí%ærüÙˆ9 LF›Óh´e¶­%É㩦 ÙƯ\tmé¨OøRăIÉ̉È=oô &rẨâ­^ 3N^ëFE!ªm1À¡v†º€zW ºăz‡°<%,[UùñÚ–È“ D´<ï ?4Í ‡„đ$eS;Ï æf±Ó…wŒÛL`"$á϶™átđ Ü´€ ËQÜŸ5vÄĂ&Å,XÀAiÀ>̃”]Û*k-r¸Øˆ4”u#Û™pm<™tdá£e9)|…“ÍÛ=c ¤²±Ă"m‘ˆèØi/íÚăLN£Ö7¾y„»¦Á^‰œ€ë̉ ‚%4tíØ2¬ i‘½=dx‘¿¾s­*¢ †±ª§G06†©ǜÁ;m¾]ßƯ0ĂBd1eDZßÈAù&¡U£dïÛZ©Öæº;ºỵúÊp«}_X4œ­©äv†ÙTü&¾©Ç7›á{˜×¹ƒ6ϼ?ù 2„jn *T(­dơŒo–®Ư#Ñù–»Ö:ªÈẨ˜}+µ†vrp×èô3o†ÍT(c$êkÛΗº Œ aă¡o€1̣l‹BX‚̣~Üă09đµº^èVSÅ—à0®è²eÑ]F(¼Zm\$$MÿŸjă°°T,Êc»Ø°À"J`)¬UäôÏf]¹-qË·¿C:i:̀ë ºÅ©«ûOê$uƠÀ|Å9Vá!„‹Î8H«%G=ÿut÷"[àÜ$œº]Ô¼u;€ă2$;²¬¼Á™à§S怜 ̃Œ}̃‚ѱÅyg‘3ÇáăibÄ;‡œÍ¤¾èwcBñưw·ËÅỊ̂Ă?“æ^ù.úe„fü?Ï»²á2Bü^ú/lâËJ endstream endobj 429 0 obj << /Length 662 /Filter /FlateDecode >> stream xÚµUËnÛ0¼û+t¤€åCÔ£·¤mRiÊ©í‘([ˆ†ÄØÈß—«•œØqѦpà ¹Îν+î1÷ă^,¼8‘4‘±—7 6Fû¥‡‹ï— >á !ϳÅû ¥<ÎhÊRîe¥§£,Iw|Yáư Âÿ•}]|ÎvDJ(ªBùYgô‹Ô‰đxLW!¤†*DD́0k "IÎ}NôPå~ cEn½4¸¼Ùø’Óo*³‡¥0/ eéD—­à”Äv¾; ]}_YŒ¬ûÎ1ÙT.Ua†dU-Wx¬ÛµÙÎÔ¸-ÚÜV]«kGä§p×#Cïè\N'¿p«ª]bxG·í+;E%¹6öă§ D'Íxu’ø“ñ°6ÅBÁ¸Ê0O…&©˜|£œä `q8¿jtoO¼‹?₫ÁBR.’ÿ³ĐÎø²«ë,Úî\x²wt5yáêđEásE MCåTE”Oï꜉iç‚F.ÂƠæyo´5Ç8ƒ :²Êôu´E5¬ÿJúJ©U[v'êÊ/´µ§Ö ´'× ã@́Èû6j‡₫Ä+Óèc-N£Ă6ئWЦ/ÙbkªSÙÉZºî}‘qrBPWÍ+662Dªf]›Æ´€µ²HÁHkl^”¦/u>‘u%¾ù‰$ÙƠÙ9ît<¿¼¾ÅÀMn5ÜÆn‡¢ßùA$R²GÇ6€ºÆB$åc!Ólèw5§4D%‹¦±œŸ̉ñÅ9.¹˜A‡KI³ flÛêg Ökœr½Å#tÄ9·öOæ'Â㻇à »™†qƯO¹'1đ6U­ïê9<ŒVJR‘¨}Cđ5è̀ØêÆ̀_çß9;ûÉ endstream endobj 433 0 obj << /Length 2153 /Filter /FlateDecode >> stream xÚíYƯoܸ÷_!́“ØåñS¢rèK“s›Ă¡‰Ñ—\dIk ÑJ®¤/-ú¿wF¤>Me×=瀢…a,%‘ĂáđÇ™ß ™Gáy!÷B-ˆ¡—¯h÷¶¾óLăƯ®˜í·‡ûIÏßß\}w­”Ç(‰hļ›ƒ§8%TGƒ¼›Ôûà‹íÇ›¯~¸)®ˆ’âÂYû̃O¦ÖÜc!áLIœWÁBñÉ̀ºWđ¯·‘ôOẻæU¹Ư‹Pùï²CVge’¡ZËPoÏ5 ©Uưæ>ƒABø+¢ÁGé'§Dl¹öÛâ‹éăÓç­R~œñmaæ¥ùm$é·ƠvÏC¿*>å­y×¶o5IßÂwíg©ygŸ Å?~otÆ•K"dÀ{#Â"mN.ûÜßƯï‹́óVpb 0®e& ô¢£hÖ‹+“¤ÎâÖi6[# ¿L™±®·ZLl«¹Î‹́£xŒ‘H©n û^5cûÉ~¦₫A8í¯"µî{@l3—dE"¬ï¹s ‡™?Çơ()H$TßTc.[p°_$À`U¦Øÿ„-v›‡ºzÈêöËÆ)5TD°p[œœB#àØ %„¬yÏeDä̉ʯ @çÎdg,ïΤMEE›ƒn¦÷dÙ³y¥$J|r¸¦Lºgu±5`û­M""""Ù÷%®cºç<$Q¨Đ„1ëó₫›0v"ÏN3réàª}Lè?¢˜gÖóĐ „·ú’>trŒË™‹2§&K_YÈéÄDÔeø-9X!a0veœjÀÖÆµ EB>@₫M~̀Êfôhsi ¶Œ—6 ó¸; ^Öñ#éV^lñ^ ·®;WÿÅ|̀Û{Ó2 €FÚ«cà.7æ‹528̣mïâ¡ĂíDÉkÓ|Üơ²+ûîmy0c̣®ĂÛ P`Q¿íwtªlW̃Ø *‹ü˜·YJ¶{)¥ÿö`ăR?Îî¹Fơa ³ă«cV mg›;ÉL—&‰‹¸6míé›üt‡5%.°́-.\̣†KÜÆfev.¡pĐ'gđ"ÔˆH£¸¤~ÓÖư1ÂGluVÆÆŸ“Ö2svđ] Ùn3ơºW³èZ̀©5gp̀Ô8̣̣P9= „¨1b ºfÊ%Đ›ÆœüªL{²‘ œuFs¯kÏ;;³˜[.²ăIej>₫)k_¿¹¶XíṼ¹RôA_¬ÓiĐưw8U£§J³C|*Úù@¹4Ù²±ËT0ÎŨI«Ó@æ’ØóŒñ"¢DE=äÙËB¾cU}Ü» §ê]„uô7÷ùZ(pL`Ô .W¹̀Ú$=È>wøûđ€ơ` %‘ÇtàĂGê¥đñGz]Ï£'€Ëh̃û«¿º̉À9¦‚¢¸²œ?)â¦Éçñ€ƯF_]„î@L("µpE$ïœF6róÆÿuêÍD9ơ H©ÀXí‚¡ƒ€úo[ûCö²| tŒơí«Ư9]˜†jVø ˜æM¼FøYC@“©yèØ[Ú­Ó|Æó‡¨«`¡5Óóbbó¢ïÛçÜÔ¯²»̀~¸3½—ĂîÔtB½SôhĂïđkd~pÀ1₫%?ö‡áØ­‰Î9äBÔoŸ¼7nÅ­‘<Íôó½F}Êî̉₫Û7?úÍTîSW$h3;̀ 9qÑ fô¢Oäë>ÿkƉ ÿkƯ…„Â"°¤Yá‡_âăĂ !›æá¼ˆ0-PmÚ¬iI™lvĐ:>ÀϘovÿÜU¹Ù1ºÛq»Ùqú¯Ưæº#¦ĐÓR› .æ{JÊơ0›fè †sBƯkª‰âiv9ë³¢©^9 I(e+è\^ö“PÍË%x{Î̀½TwÑ#·LkÀ¥?A4%k¥kÎ +B÷q_ă-1Á0 £Y¬ü;3¹ßºÙDV¤óºj¯!ˆƠûªh=׸οzk•Sâ?[_O Fÿ ¥·2‡ endstream endobj 292 0 obj << /Type /ObjStm /N 100 /First 840 /Length 1206 /Filter /FlateDecode >> stream xÚµWÙnÛV}çWÜGçÁäƯ—"XaÀ /E[×(héÚ&¢*—Øùû!ǵ¨ˆÑƯ…gÎ̀œJ#ăLÅ> S‹eÚañ̀̉e`̃3Å‚c•L(U3a,VĂ„³‰â @÷LJ°j< ´° T«î1Jà™¢³cÊ€W¦U’3-U¢¤d́Á¥­Äj˜öˆOZf8üHÏŒ¢ûÀŒ1=—qàÅ ´jf%ø”aV»D)Ǭƒ…¬;ïrº¨Ö_߉[ÆƠZc ̉ĂÔlTá1à–ï$ơ²S\ÅEî(ÆEë}ôgQÆ%Ï¿®¿ƠeüÑ®Pèư\Årä€H§`Ç9w%׫¢-z:n:Ô/ăDm>úƠ¾K%!?Mû<ÀÁ|ăv«#¼í߃·MĐ^ ú&^%"<üxÑ/±Œũ+s̉]¯í‹E,›ÅÊe|H†-IFƠaÙI~“ I¶ø©k0ŒÏ§Iv›ª«±é§‰₫ê׸,̣Ơ»ä¸0Á¤£†ÈÔ‡«$~-1è÷eYđ²ŸWpÓ+´^%ä{=.É>Tơ2Ö5¿"ÿ‹–]bÚM-Æ.«Cê1uiRƒÑÇZ:!;ë®Ûç¸(?=&qz4|́Ưµíºù%ËîïïÓ®,–y›§Ư"¯Ó¸́²¦ºiïx6” ëU†8«lj1> stream xÚíYƯoÛ6Ï_áIjVI‰ê[›~¬CÑb;`h‹A±˜X¨,¥’Ü´ûëwGR2¥Đ™md†të~©í¢ºn-·xt²ˆ ăƯ/¾I¢¤§8óôââơ¹‰ÿƠ@ñÈ+PJ‡3‰ù³×K#v?X±ửa·/–çÏ_r+‘(a÷²‚Ób KR7>6 JbøQF¨ ‡ÚÉ‘ CÿëÏà}Đ1™%ÈIŒæŸĂY›¿ÍÀ†É́VSnf̀*PÎ.Î~÷%(MB"¬"Xc0 %%Má!…|2”KŒlFu`oWƯ¶Q¾¤%‘»(ª«Úw@D‰”ƒ[ÖYk8gy^ „d¥y‡̀åª̀ơnäệNªÊ!± …†ø½]+ȼƲ1?×M½½1Ÿbzẩ·¹AÖÙe©̀Na₫ºUM¡rb¤•Ñ ‚¸ÚiHp$=‘id„~…Ü[Ÿr!˜-!1ă#B—Y£ <6 X©Ü.÷Û<³fNƒ&›GIđẮ́l®_o‹nmH5̃à̉U]–ờskŒK½ù)ÇH)IÊH HÄÁÉ·ÙFy]* •‰ƒœ̉ñÁ U ˆÙ^öÛM­=[w†Ä¡.ÚƯW¹/œ#pT"ÀÇ^œ8¶ˆÏ¢Pè($ujJ±êób£ªBßQbZ}ĐxY+(̉(|¶ ”|8ʯE ±`µ¹åƠ‚sB“ä´Øe2¤ ¸ {¼µV²è§X¤‡§´‡Ys ̀&{̣‚đ€™B́m£VuÓ¨Ö0­û{*§WV]¶ó‹E*d1Åæ©[e->…/J“˺è{;3ø—Ø—ÑSº™̃«Ù„¿¯‹OqåË¢, ª–[¿¡̉âMÆ_¡ ̃ª æ¡Q§qØ_lË­%ÓZÀïđ›xùbqđzJ³ă×Óü4Ào¥ohđ+¤®L¢: ª]Ñ´7˜¬·IßƠ½Ûñ¡d¨ÍMçxf’Œa?c0€Çe*#²N½Qßđ|UzÑ6…‘ˆ[DJñ88 w >ç=?óZ\ơ«MNç†̃@ÓáNˆ?±V ?.­êÍ $(´éq1«róî>Ødß‹ ²Ün,èq]óO˜=´/͉֨½ đÇ£)âö1Đ7GS\m]¾CSPÚ!4FŒŸMÜv}S̉Ù₫©Åû#û‹cÛKƠ8Cº-Ú¾#vDwW{ï–¹̣”îñ|­ôåèË…ñ×` ™c+˜îiEy,ƒ‚TÏ7Ë€Ñbtø<cUu檦yg†â ‹3Ö]ˆjW¢œ–ù ăóË¢ƯnZ³®[I|ضIđÇZÅu¯µíÍra9 ép§1'¡®&N“1 ”ÿSÈx|K|:gô₫Ê2¹)NJÑÿ·E_c´ƒư‡½-̃[F£çrŸ´n}Dvl=©Tˆ°́ëFưÑ̃ö‡¥$é'»z$n†Ñ•FÆYÀ<ê.úÜ´’q?ô˜>8èFºÜ›cöyÈüC̉iQ'Uxôí»ª7´ÀC««Ë/̣1o_Ü'¥H¦Ú8₫n5åσIwME*ÂÑY¾›@<=ÄÁ¢ê$đI)Ê|₫׳?—/4h†£î`kÉd¦HöáƯ‹_ß½_öÿâút]° endstream endobj 444 0 obj << /Length 2680 /Filter /FlateDecode >> stream xÚíZMÛF½ûW{±´;¢Ù_üđ"‡Ä±Á;́Å1EÍH…¤<οßW]Mä´’Y±§…Q³»X]]]ưêuÑbâŸXÄr'*HT¼È÷ÏBÛÛÜ.¸qơĂ3áäÖ\$¿»~öâ1 i˜Åơv¬êz³ø°|u—º¢Y­•RKơrµÖÚ,߬½ḮLˆ^̣§kj৬9é¦U*32Mø¼*CDI4Úÿ{µ9§kêU¯®(ñ`|ÛeMçS¤D ù—â!+ÔÇê)F5åÆ1  `̉¿à#<¯̉I~¾¢´Âx „`0ëI'œ%b“ .gé‘Û§¤“ [¸mêưl¶!ó)Ơg>Ïœ"Œ•êÓIđÜœ*˺Ä%ă$2v™Ë¡ĐÛ­w2è4ñÂô"ôD4Û¿©&À§Ç­Wb!‘CÈPÂñh#ä …/fÊ`Øiư6ÿê8]% 6)¦ù öxÓ·Á‡́¯ƯjL32ơP¥ß]mM°Z'‰`regÉl ѱl|«X PcESxÖÉØ÷Øœ|ÈögeEÉ\É>$kàħ²Ú”yád‡Äú&c₫àÛó$ ̉ôq{T’ö–sĆ‹Ç=ưu<°ár-ư»bïöÁ½{f¿…Æ¹ÖØo4Ó!.ÈñZ⸋tNñ̃ưôر­Œ—…åB÷Ô_`# XôtOư5w´Ç^mËO+æ·ôúx9à?CëFûphZÖÀшÆ'R[ä]ƯÜßƠ­ĂѾ%:D à_=+~?f;¨Đ²jûk#P¦´ṇ̃¸§†[‡£·!6%́nm¢¤Ç¾ »6´ü¦~¬-^½Æ(VLúN›è̃÷!€ĐñcA@!¸/oïúM‚öáJAo«-/å₫®̀i‘w¼ă |/ ăÉÉÚŸÂܬcĐÍÚkV#úÊG}w,Ü(KéåÁº°niÍmy³cÿX=c =ô[5ÅØµT¯K•̀…zîh¦^Æ]»î̉" ‘Câ…U`B{“₫đ1\l0ˆÉ/î­äp+c:˜»Åûgỵ̈D ̉$µU%Q)°‚!í₫M¼‰–Îv W¥´w ^³@pÏ/€N‹d_Z[kSvYNWBê¾á ˆm_f—¼"ĵ‘>̃F°âs^hq?æûL̃qỆs±IÔ ¨C̀4:åXÈOn_xû‡pÆ›úÀ÷JÂç k { @_à{%ăÀÄ©U%¤óư6#`Kh‰›b›wnÂ2¶Ú^Á¨±Ù<´7RÔXÄ×°R›Ä^o&VÖàʦȹ|́bD©™"TèŒWư ÇåØöƒFƒÓ‰½Ü³ÀĐ?»chslÊ ›t;“¤“‡¨{99zIOé­È7îvg;ßñ¢ô•„=fO9^J)DHnÚ³-†%gK>{¬Hˆ%_Å·̃ÈL­€ï<Àb‚0ơ5æLSâh:ç„ÎN*2‚ÂÀj₫áKà°§Üïz ´•ùæKa,¦æQÏ }‚O°Ư²> „éKjÔæ”LÍ’Ë+‡>Ó ª.c9@mh¯©Çª^I` Uˆ²‹B’¹¿#¶B­AÅâBEŒº,–A©2E1â)P§A¤´UfàI&Rèhç̃¸ÓÔÁ ƒ‡ø)‰bPú!U&ÑpL$\YĂï9\ˆU!G~ cb\Ă™1.ÀFH46ÊVLEL§Öv3ÏAăÇI¢¦´ôªèM5;2 MÈÈ„Ñê›Ó~Ó̀¬véA+ÿEiDZùE¥År¾({|û[Í|"â;§’É”B#I§tû‡]}cá_Ï>rií¾ bàôm¤l9Å‚­rY í³ó${xZöß|ƒœ‰/|Z .˜æOu¤È5ĂNX°×½s±û5û*₫©m½àLéVHñØMÅ N©“³QSÔîË-¦A”Ë.t $³j×8çÄ»‚Æ>;8Rê>́Ùd=¾—½Ë;ËúBơË„×RÑ‹₫O¡M[xé¾D!OœJự=YYÿÙt‰å‡¾àüˆ¬©çYó¶Ù9 ØçöC!¡ơĂËLƠH Ú<‰GKúÎ@ª¤ÔC-Ÿù˜Íß&GoĂĐï˾tûbhơ+ü&́ó¯N'i>™;2îÙư!¯>ïëimy[ÍcîáUÿDMÏ7üëo|`™)ë˜ṭ‹#*B[ÿ¸ÅĂS endstream endobj 447 0 obj << /Length 2576 /Filter /FlateDecode >> stream xÚíZ[Û6~ϯ0f*cF$EQÊ¢/›6Å^ Ít÷! ‰*KSIÎLö×÷’¢D›ÍtŸÆEÏå;G¡«₫Ñ•d+™q’q¹*w/b½Úß­̀ÅO?¼ vß6n;ÿróâå!V4&yœÓƠÍvIê¦Z½^ߣê×ÎyÄ_­7I"¢7ë,‰öm9Ö]‹O’è'µU½jKµ̃0)̣̉˜9¡$]oDÊ"ûrˆG’T¿(bf^}äK ̣èMƯ¨–@º¢”äB0Íy¢àä]đJcO±œđ̀)öK,b»K. &„eí¦-°m‹ q1a”N;¯C´(#B8b‹₫­„“œ‹/ ơR0%L¦ ưhÈâ,NHÅáø¨ø¿Á¿̀à>ÏàÆ¢C„8K±/¢Ô×UĐè\’Tdç¼`ĂDN(çÖ ¨Ùư/t}&Eô}±fYôÉRÈ—DF2™Çc—4‘Ó–±3TÇ{e²¢½àÑǵHY]Ü6*Ä*§àpN%»{q²~úJˆÈœ—ÔíÓ·j|ưƯ³øKL“9 ³qß)†¼˜bCƒ [V@ØÆÜ:Ì­Ë‚pz`Ä£*ƒYÊ¢ ˜™S(×phB@-9¾ÂΠ6¬¤DnuÙ豓ü"®Ô¶Ø7£Y &¢¹`¶€ èUu,eˆRöR& Eß“²Ó¶®*_E5u7MI)ĂKa±•_C‹öƒ̣\ôE;l»~÷9t¢Uû î̀-â_8üW¡øz:6RÎH É pĂWØ(O‰äTSâa'ÀsÄ‘Æ)`¢ô9XR¸NÑy–<-̉Öúvªï"~2+kùĂP™‘fÏ"´%iœø’u oAxy"´XB‰LÙsÈÀmÉ<óe°¡ê)€đ*̣¢m₫₫©Ø=4Ájˆ®àÛN₫5@1‡ÔƠ[5–ƠÖ·úÚ¢KØQœ̣éξö®6Ÿªb,¾±´uÈ›ˆ°húqîp£}́đ}1:.ÂpÁl¨ÈÜù,²Àu&mĐ$SKYjƯЉ@ ±û„m!iK¼¹6+ȯđdÿ́"oô¶/½„T˜¨D4¦Úá(eăä̀H,å;KAô|=©w~’Óy–"½Y TóăúlƯ=°;Ơ¾§Đ$·ïŸïq½~úëºwˆÿ•¤ä,U"nïl×Í!}Æ̉÷ÔïÆj«@lÑéŒr‚:朅5ô}̉Vî4Ôq¾ä2i£V€—¤PƠ“ËûoƯÿ^²;Ưs'YâÂÛ×ɦ·c­t…ô‰‰œGFŸ&8À€’ÂÓƒÖ'½ŒơCÓƯ"¼ä’¹cs]".Ó¨,ZóÜ"ysSM»P_l©|]|êëư€Ø2<ơ,O:c_…t€Äœ÷¾ Q$Ÿ§ÍwæNFĂD9Ù4»ë»ưƒYÓçe¬0„½ Xzñ́"^Na&ÀØQ€­ń>!ü–“5»­E.ñ£̀ó̃Ö;l¿0î`b¤²å«û̀ÄhªvÜç>3ùÇ9(<*đ£±z0…C”̣e& × Q‰ùôy±CbÖOU|‰|$ÄHđhÆđ¡€û®íïAó¡6‚YvÖ»Ư}[CØø¹å_X}̣z bè2°èå>Ô_¢–+7®,¸¸2pĂƯ¾Ñv·ÖúWÇp&T‡Ï“ÿMáî₫~ơGôæ/Ă3™‡g†r s‹{µ+₫—°f(g₫=“pÀÙ%Ÿ.Ø̣éâ´dz¾iP)ᡟ§¨g™nX&\rĂ%hØAî`óùlm††Ó¯ÍH̃ ¥à‡VX̣°…đg‰];à5₫PÄ®-û•Á*€y/tùŒ:wHÊLউ4øL¨}C¸âmËưÎ\Ă$r_û>ˆ²xYIÁaÆI‡ÅQÖá7J‰9ơ‘ƒ.g)ưL`Ÿâ4]Æ:Z*÷ê²'^C±C»OwNk}{´»Wú”p₫ÖŒú!µ•ö(Ï‚Ÿˆ+Ÿ)r¾}i!©â&º2üưŒ0è ̣$Ø".cíàs?äDjåT´f7zD#îØ­÷¡DÙë=……„‹>|ùIÄ <[»™Ê²‘/ïơQA½‡~̀¼Fú“ø ܆/@‚µ‹.!ßs ºM¼±lÂÿd^Ó®¤ßWæ“¥¹î»}S™ëÛi¤–ÊUÆÇOÅî3}¾VK¶|ăÚ­»̣'Âåo“?·æ£—̉FêP¾™>uµœÈ9àÏ$I’Å×½ÙlX…a3`Ç|₫Äøú^‹×₫ú®₫O0CµYdŸë`6¡½ÛñÎ5eø3 Tk¥ç‚U7´|ăê£₫l®ạ̀Ư—rù) \xØ̣‹ôy1_ß+mú_øÄ₫‹ôĂh ûÉ,ƒ††ú.Ù¨í¸éö?×Ûƒrđ»‚n¨Îû̃nªm¤c‘́F7³®È4Àüñl= endstream endobj 450 0 obj << /Length 2077 /Filter /FlateDecode >> stream xÚÅYmÛ6₫¾¿ÂØO2±â»”â>Ümº}AÑ¢é¶_̉ mz-œ,m$9Ûܯ¿’’%‡Z¯/‹g)Î Ÿ>CÑEÿèB³…N9I¹^¬÷W‰ímî®ñöÛ+êÇÅ00ü×ƯƠW·R.hB²$£‹»íXÔƯfñ.ºÙåi–1ç<⯗±2º]¦":T뮨+|#¢·fkS­Í2fZª,̉Ë÷w?\}s7¬-™$Rđg*Ú>£mªƠ “)’Há4~ŚMƠ‚f-¨&U”7Æ5ÖĐUl@ÍᔞèúÎbë₫v;?ë„ SnĐX=¯Î¸ RrĐØ.ü[ƠKrc'JJ̉4í‡~é}ѶEuÿ –¦mOÖßôæ ÔÈÀd!ÀC”*©Wê¾Û¹=²¢aG¾¯¶Ä+¢Ç$0UNưÔ_qọ́²­_‡4’¤"ë5¯ÖEµ­½ä”-¨ \(†c•„˜&¬W¶Œ%÷ă2¦Q½ä,zŒKóqÉidJXZËhë¡Ô¥r’Àú^_Ü] ̣I,VM¾¤Qóɉº]f<‹³óa›R1ßK¨ èÖ›-¹7Ư͵;Tÿ¾Éר́€s‡ZPJ2)Y¯<ùđxç†(=¢ÓªwX[ü'(N“aÔ«ÊÆđªLiömH×DÉôQ1û‡ÎƒêTœbD+Ñ}¿Ä`Œ₫á₫Tæè-ç©ù#‘ üh<1 âw‚×oM×:Ô9˜\7f›ÊÎơ®—,vø¬á̃¯s×éÑÚ®ƒÀñX/ª‰4}÷æVºW%đ‘@R‘Â@G›EbÆScœơØᤨ>üX¬~_f"2MruoëÇaØÉ¦QÂAïå©{ư"0óißBœ ×¾5Ư¡©N½û}â|¾æQ½=ñ́è›[׉>ûÆ?sX{i`ÑîÇéc¤Ñ ÎLñ!G­ôo9•Œ·rr³Δ†äÏư÷ ÜÆRFư^BăKđpKØ…±¤£~ø(–àÉÆ̉X%h ¸€‹XÑ4º ËÈÊÂôjƠ¾³,]OT8èú́É´9¢vpY··vú,ô¸/Ơ½ùµ¦ˆ‡˜”DS6Ư1Ö£‚1~UÛ¶™…±ăÈ!³°#‚́C^m\£rÖxˆ˜E}hϬ‡±LÖ̀'˜̣1l¡¿7 (B¹PJă³ %!^§3’RtéÄYØ'"|Wn•ƒäqF3$lÂ^®ƒD‘hØN¤̉~ üR[đèM‘¿{Ÿ,6đ́'B/íÈư`­QÅrñëƠ/! Í̉„PYQIÏ’ÖeÄt2¡s̉ç›đ*$Dª̉/wW@å²qW’0–NƯ Äªè‚N„ vÖ€ôïp‚ щ| '!ˆ†âbâ—DÎb\MÈà`“ưHÎ)¬£ĂïYˆ]1$ +ͧÉ*è$ p’¦Öë_à$ Mà$ }œ椓…¡|âZ¼ÈÂ"#âdƯ Ô™£h !î¬ÔÇ£̉3ăÛ¢4®̣úùs0̀üÉÚ‹j¯2&ĐºéÎ\₫x̀W0zîLL)‘U¬›ólpö@̀€Æ15…Ø?]Ú¾x.‡ÊˆU^ƯÿÊûµ9áÚ°g¾Đé ¸?-„̣.‡Ăßơz¶ăï,F•ÎÆ ‹ªüä}mơÙ˜Ëè Ô7ë²n/ çvøÿmn¬²ó…Œc®ưXtUUb¼Ơ¡ uP{zn&OKÂ2̣úçE’c«Ïà“sN|ªtÂg $è)æn! «|„€‹({²è™\}́ëù‚§YG²œ°¹kK‹”n#¥Ă>c'*̃Wđc’,œ32uzçFƯdÁ!àB ©”ˆôèƒéÈ)é@Lçç¨øÁÅ,ŸÄÅv9&WÂ÷z¸ºÛÛº,k|÷ơ—ë† ·›¥?$è¿iäLû:xhH’1ơüCâåùn3ÇôÓ :¥#4$ÖeñØÀ*Ü:ƒ̀_EÛY#…êc/Hh]Q¼5L.àÚ•Û©̃"=c CeúB‹°–±ö¸|î́ÁÂ-¹ÔÜV°ËHzrt̃èá°ª`4Í\)¸ È7óø`¯ú´‹ÍîTkˆ<₫¼Ü›®¦µ»Rö+ˆkùà ¦· ĐásíÁôúăUFŸxá°r’+đÉ‘ÊeqØñ%̃ÓAc w»º¥@…w]àÏh$Ăx÷¨nÏ~tá̃Ô{\~U ×eGV”ûñ Å&­‰ëæ<Ÿô´ü›¿̣ưCifbA2mo«U_¶Xf0₫®ËÖ ‚bôÁ¹À²ük_çü‰ËkĂv"!$t‘8#Ƈ¬€¿¯ƒs‘c>zyÔ5PTëëW¨Ï sè¨e:[ endstream endobj 453 0 obj << /Length 1862 /Filter /FlateDecode >> stream xÚ­Y[oÛ6~ϯö$5Ç;©{h“¦èеXâam186 “¥Ô²ÛíßïÔ6•(K –¥£ĂïÜ/& †?’((Íf*Ymϰ»»»MüÅƠÛ3̉ĐÍp> |½8ûùRˆ„`”áŒ$‹ÍƠb|JÏ¿.ïöf7›3ÆRör6ç\¤—3ÍÓC¹ÚçUiŸđôÊl̀Δ+3›S%d–êٗůgoƯÙ‚ $8›´¥>A«iB·EK%‚{´ Qøă³¹4- I÷«ơ™r}a6È+BP&µp2‡£°$AiNè%êG+„¹†×ùg,pC¥†\9¢œ¶Då*_ÇXÁ¹Ë+̉ 2'd¢  ›ˆç{³œQ~·ÿœ˜µ·ĐÚ|Æ„—f¾­À¾ûûƠÆ~0ûó‹Ko3KY˜æ̀lx&QQ „FqKüăĐ8s9bZ8 ³VẴDâÄDyùm‚}>Å´-UËu¾­cœ0L/Æ©Ñ÷åî)ŒzD·Ëư>ÎI! Ÿ̀éPùäë̀p“)É[Ú/3Dé/₫£ñkP̣˜Ëf.#&Θè³4cˆ)ú́•Ùv/8¡é₫«±$-­¶3ª̉›;R›k,…ơXû¹Îg$ƯZ71eị́}­—âÈs¥FDÇ|!ô\²L Åx|iqÑ—v¸ô.¡'DºÜåË›¶1x/6&€ó́¸ÄABÔè́ÿ‚†Éœ í|5°ĂmQƯ, Èœ¥à™»üæ°7µÿ>†]K”)ơè3ƒÄUà₫œrí/v{‘»Üg¦áçäù̃4/€ [Ăßd ­F#%@)8H˜̃Oß5`Êj€ẽèRfHñV—₫U““&'<Íëæ¶YË]K4'áÓ‹³†Ó¥nÊjµó4>SsOèSuí́ɼ4¦₫Z†÷¡6₫¢ñnÚ máăĐú|đ‡ñÂÆ‰+ËÚçT‡bŸßM ií̉Y€Üü“×û:^dđ_†E@ÆÀå,³JØ.÷±,Ơ–êùl„a¢â e¬3ñI¼t/åBB2Dy¦dH(€dñd(ö³mu¶×hîÚÆH@¸^î—µÙÇ̉ 1̀S»XÖy_wè6¿ưjÀ}%mvn•fÙ¦*x¡ÜÆKQY?̣̣¶×ç y@÷Åî§hä"E» ¿´̀>^ưöj¦YºhÎo]I”r‘ Yf¶‡üô'kx¸J~8Êm₫è²[‘\Ÿưk‹‰¶Å•8V8kºÍó÷¯®¯ßÇDár˜êGEÑGµ?d—±çÓĂQ>‡>߇(ô!ùëw‹¨a¹Óy6ôTmp¬ ăaÏ¡ ¨ú¶ë”ñáÍÂåïˆ$’Ÿ¢÷JB ;f> &Ä"‡4“̉„'´ ˆă£m<”€kđ ́®ô“B pˆJgú?ÖÖÑÁPu ̃s¬@̉L‡?6†Oj˜Bê´¸©Xq{»»«'”5›´Ç=ZƠ,ûц­»dÏUÓ„@t¤¤¹6¢(|cp»«Đß5m…•Ëä-¡¿ßÏ¥m³ÓôB ϵ]L}^£§kcÚăêêe (‡–›÷Bw+#LiÄ :fĐ¾{zت}Oµ­‚‰µmw̉¨¸¢Ö´ˆ‡'8 ³;7°o×EĂ Ccù°º®a¬CúÑ© DÛ›̀îVØSW &@Û́Ä̀Ơ€²ăçÄÈ}xg·º3å˜QaƯÔ5›¼0årkb»±!ÓW Ûjmÿ0JCïü ÚZ¸±lgMge‹à £́œü;iðfHö ¶üØ'ỰK¥ë¨IwÙë¡Ư“Å'pƠ§Û‘%´¹~dÉEđ‰/í̀£ọ̈£5$FJ‘)kH6i ùpB€ú›Á~(HoÜ¢[÷ËG+ogg’Óä}QN$(“ñ§F9É XÀ:â4Ê 91 ̀S—P©rÈ_ÇyU¬ÿ !!×#EÚ'BB€v/¬–Mm¶ˆ₫‹Ésṭ€èTZOŸç‘c3ŒÅAîå[„~«=2 ±!ÍĂxÊj…̉±„« €ȱª@OSÏ¿åjzQ°Ôc $l"ŸØB‡ê†üŸv@Üå~a> stream xÚÍXKoÛ8¾çWè(Ë÷£À^7Aö́¦¾¥AáµäD€-§–Œüư”,*’í¼v‹BS#rß|3#aø#‘¢‘̉ i¦¢Åú ×»ÛûÈ-n.ψ—K@0éH~}¾""lH4[v¥Ñm|₫0¬²í$aŒǺË$á\ÄÍă]±¨̣MaŸđø&[fÛ¬Xd“„*!Ml&w³?ϾÍÚ»Hpv¢¢ô3m5CÔm´¥aÁ¶ QÄ™$B̉¸eH\-̉%J³å4_[•>_H‚ŒÔ€£„r$”v¤ù:Oœ]9¦Äk±?&VC¸¡sú,đĐ cÄ)k^-Ă€ÁËFêÓĐIQƠJóuö笲b袑¦¦Ûˆ— Đ’P qÂ0 NxưÀ„[ï3&âêÁ/ÀµYQ¶ˆyÊ«‡DÇ$Ó½…(‰Œ–ÊPƒiC4/̉̃ñ`é}5!ñĂĐ!Øzæ*‚„!P^ô-œWó2«†—é}T:-À²‰fâYst:¯m–ö½(aZ!n³¹ö;q/yEXßƠyé¶·YµÛYÜƯa*%„#¢XZ©n>Ñgù”¿Ú| qÓ˧ÛÿÇ÷ƠĂhê¶P¾s©f°³g4ƒ đ÷N<Î5¤‹ÅñÜciܻ͂©ĆăíñÀë-Ÿ¬qW*÷Đư»Îªóé…{”B¾äë:đ,K»Èa±)<ˆ„êêÑ' eœ6ß³æÚU¹ù2dHó66A4®¦Ă8•aJ‡pÊFpz5=Äüê ̀ßœ9̣$䈣ÈQ䌥 gÈ0q;đ‚$ øĂ§‡ÜæHj'{ t(çĂqq*dü* QïF`₫êö•ñ*/‘4æ"} G¼W»0¢Á¼~½¹©bÉkXt‹üôu¾+ÑZÔ«̣`§C–º€åX̉ ×Cv«‘R¬(¢Z¿¤‚”–'4$œ¶RyßQEöäaU'™—qu¬5˜‡~ïçÚ¡B̃IŸ—ÛÍ·XˆcÑî/·'tÏ`ÑÏ1ä ‰¸o á‚Ă 4ưèñŒ0Q*ÂÈt[_O•<¾·w;yqDíË«́ ƒê·2(8º|Yaå£ àƠ´Ü̃á(…‡@t0,EOµä:L+;¯¢ïgûo Á•LCs[ö(Â}&ÔPàær°*i´Ÿ1̣̉™G>Y:§ÇXè1{xY·œ-CŸ×Å€6ó%å܃†X`9ßBSù5P‚[í>˜&Iü—}·₫–Ï€sç»UƠ\aûü̉ưh₫›ÊƯëñÆ[·Ú£»ç:đƒ%©cÑâBCđˆrŒ(#o‰—Àa„D”dŒ<5Z†…lÂ6%É7áD %ơ{qđi]l@Áƒ³ pùÅp´[­®[9ÈÅ÷ÛÇWUh™¿h”ÛF’±ß¬RS}“sroÔéj?ơüˆo ÿ5¥ưʲo¸UçE«ëÇ@‡ëư%'ˆèºuîÁñx,á2{Á(`́g^ª_[Äû-™Tà26>ÔöâäÜÁ øđÜ.^Đ™wkÍ,W₫ 7ùÏ— endstream endobj 460 0 obj << /Length 2210 /Filter /FlateDecode >> stream xÚƠZßoă6~Ï_aÜ“ Ô,“*p/·{)z‹̃n°/ÛÅB±åØ8GJ%yÓö¯¿’’E…í¦Íơ°À¦¨ápføÍÇaØŒÂ?63|f¬ V˜Ùê₫º̃únæï¿¿baÜ.#ÿqsơíµR3FIF36»Ù EƯ¬gŸæo¶ùC[Ô‹¥b.¾[,¥Tóë…•óC¹jwU‰oäü}±)ê¢\‹%7TgsFŸo₫uơÏ›~rÅQRœ©i7ú‰º–Ϙ ôíÔåP%½º‚p"‰Z,•æó´aóvµ̃]ùó÷ơĂ»ü¾¸^d û~ê}{­ÍŒ1’)ÅQ-9|¯´VÂp? zĂ#Ô ~Ôߨ,L6&ù‰*ˆ)J´ˆrµ[§&0ªºQ Œ…Q‘Ë–,ă$“‚0å¿/ÚC]z·mp¹®åVäVm|Ï]]|s|ù®hß¼½ö}?Q&÷ Óá´`,fˆê,ÿ¡(ü'ù¾©¾Ké)±2ë×<¶W˜$öïRSB9w~1J ¬'œüăBđyÁ¸Đ†›ppûeÊ FÁ̀s̃₫Ñ ˜ôµ°„ZöùsI„®fO} Â#ÿ¶Ûà·Ê·`7À;₫¯á×hó”_ßơV{Ö•wơä•&̉ÚI?â “.¤è,»̀…ߤ$iÂMKSørn(P€Hʦca¸·CXÜæM±ö]U1măß ÔùÓÂgư­}醷©Àøˆp×?¼mίy½[7)“KA2¡Á Ơ?âa:\+c–@:ú*@’pÉŸ†O,ʹ]ŸF{Îi°W¼‚X¯́üëBi°̀.¿Ư¾ÖNÀ†̀̀o¶»Æ÷m¬Ëä¡§vÂs¤ù1.o@Gîöéº|úđưUíûÂ{X‹¬ÁºxưssÍGŒ?ôåeÁ›èŒĐt+@¶Ü Æö$P×Å&ê¹Qä†he'‚§Èë?ÁôIÓg!Ør~i}8ƒj†Ôơî~b‡ÇÆ›Um ×*Ú^o Œă²Àx×ÂÅ9Böđ+$x¤µe„At•uo£/tô…"2ëµü[J¨‚uôî½u*´IY(ơ1æ&eÙQ0ÅB ¡Ú¯ÏáY…`Ëis¾°¤BK)42ÊÓ²mU·I¥>Ê*e ±ó-}˜Ôâ[d¯£́"Ç‚’0öºêÓ'#4c/éßc-“Ñ4I₫ó“VHĐ×µ$UåéèÇøëª³®˜}R†aD1ơºÚ¬ĐQÛăíÖŸ u\‹ûÙu·p@è¤÷ÈhXWáM…½y]çÁrø)è§ÏH°ÂÜ7Ưç#Æ„“¬ăÉ:¤Ù9“„‘`ç„wŒ†:÷›-‚å0,Äp\ổé7Ûáw£“0J®²ßyô{_>"\È—›¶ªó»âô‘ø´N+´Ơ‡ƯoE“²̣]-ỎoA3`;2I¿!D, ! 6n‡{¹^ Ă-ühü/Wƒg&…6D¡ê£0±m¹¤@cûmÛm?ƒ̀‘B/œ.Ø$¥̉!ºÅfÁÀcÙ¸­ºië(# Pä\´öĂí\¬“‰ơ±æü4mơ‹6vëqë„'ƨ¤íáXÈl¤¬{í| Ï^jƒâ/m~1´$n³£uAF7bà^i³ ÷S“œç^)#ïFK˜ö.è"Ỡ­|ÆÚƯªC“’ˆWOs¬cÇbu±ñÏ̃±PhÜ…ÊcîNUăT…̀‚ÚºQ¨H,¼ÎH r˜Ä3)Á!ÊÛẩ|đ¶ǾûÏÆéÚVü_¦}<66›ưK̉Á‘M•%/ơe_|-ö)Û[ »™8\ »Ú8vÙEut«ê₫¡.ÆßpBÇ ±À¯c‘S•P´æg' 3 £ÓcV\B:!®³>ß`yÆ¥–r´øñÀtÈßû²—èm…¼m) ŒođÆ[Q̣9¸wtçÆÑ,¦0\̃$ÿÜ_ JƯâ™D2w9üé3­á%Ôd‰4³G7̣~&„ïg®₫.¼c–NáÊÉ0' đSƠT£:½0YŒáfa…á¸ZÜ9"-ụ̂—«9L+œ½á ơ_ T”ƠƒuaŒf¤1ÓÏËp“y´D!÷ù/»ûpä ÈI»”UËgêØ×»î ư|ôÄo& Ô î°úËå²ú²™X̣¥Då|Í÷‡âô-åt™ÚÀ_9@"™àÉÇ‹_éî` ¯î÷K¿­qbŸ’ˆ†×?¼ÏåĂ?8 q°y…ê‹8³”Sœ™ET¶ÈSÈ ŸBY@7¦/ ë₫J̉†ơŹOBÓ€1¨âßYÀu”CUoÆrtï­æo:Lµî"L@ ¸?+«åˆÔ¹îÇz×Ưm]îÚ¼æoÁœă©}ë_ 7G•’N……ƒ3[g‘4f_>ƒ‹Ä—ø@+¢y†’F̉QA5ªe«#'vÉRơW›f̃=׸tw8Èoq#88 ¦éÏ0.́‡”)–˜%èø®=‘F”W°*_b FFm†’ÄåEÙV!ô Ë“NÇÿ#':… endstream endobj 463 0 obj << /Length 2811 /Filter /FlateDecode >> stream xÚíZƯÛ¸Ï_aôÉbVü¦èK7Ùk®mM¶}É­-ï ‘åœ,g/÷×w†¤$R¦w½·A‡}XI¦FĂùøÍC̉Yt¦ÙLN ׳ƠöYfŸ¶73wñæûgÔ[ÂÀe0̣¯WÏ₫|)åŒf$Ïr:»Ú„¢®Ö³wó‹ÛâcW¶‹%ç|ο[,…óË…óC³êª]ƒ¿ˆù›rS¶e³*K¦3•Ï)]¼¿úáÙË«áă’I"?SÓ~ô‘º†Í('èÛ«Ëɤpêr¼¸XJÅæ hCçƯj½!ëróŸE.æE{Y—ƯjÁéü¶l9C%ÁjF)É¥d(3›-™ ’{‘M9HđoÛ7Êdæ̃V:|›ÊŒ(x7óo¯ªuê#0=É~Ôó”$E˜ÖưˆOE›Ä)á`“‡©~h¿ú°?lS²@uFi?fHư¨(D–LJ¢)„8‚JêF¿(ʨhÊ=„ˆ6óî¶t«3`kø§çö»öé¾́ºª¹ñƒw›ÉKŸR‚¯ªâzAçµ}˜Ïïªîv2n0I*Ẹ̀ ôf ÂÔ<0ŸŒÇEoUÍäë¢+Sß̉9˜‚&¼%ëGÅ̉À\^mR–‚æD[öÈ‚‰C˜‚¥Úcænx±ïZ°öẹ̀ñEiHn†ùÿ)%œÍÑ—ÿxyuñ·—oÂÔ ¬A‰Rú|iÏA½Óxư#¸ââïoÿưÏ”4“-ç yç ơqZƒÙñ±3;̀7ëjf[÷¡§—Œ1Âra¡Ơđ­ƠZß”GëœMđÙ¦èƒÀø—–”̀ñƒđ,´Hx…˜yA˜`gA¼:™ˆug2Âr, ZC.ç1xü?Zçipßm÷33!+ôf>Û̀¿KĐK«Ư¡y’¿4'LâüîúîzªF0µ2éxM”̀¤©<ƒú£Lœ¨ßƒ¢%=7‚ GñđjÓî¶îÊ?x]v/.Ươ”@á»D¤ˆ(gàÎaÎÁ°˜ ÂÈ­wÅÚ̉˜H³AíPŸÔ·)3„å~¬‰̀Vl¼ÿ”eJ‚2PpÂ÷GÛ(dm¢¦TD ½zCNÑl¢ÇƠR«±IŒ2±!Ơh2÷}V5ẹ̈W÷ÔMWÍËÂñw·®¶e³·ë[„I-¯‹½ó˜²ñ®uaq¨»₫[» €XùѪ۵sRpµÈ#,Âïsö[Ùîö̀ÏS ²Ä„I†¢“Và°ú1Q8¡xk¼°/G®üMÏíêåƒ"e]ÂÜ­xÿnÿ Îÿ¼₫ƯµU×YÊ7E½ƒu†S8Úîî{â-ÚÓ[®±v&̉P>!1¡F6Ư-E¤B%ƒ¬§)™˜‰’lŒ)k&Ç~ô}±ưXWv2đ¸r_/[·2­Ó$—RI*oI.I®îI.Ö$º¤j~‰Hnº áƒäƯƒpÙỤ̂KTèê|₫˜”ĂîĂ’ÀåƠzÿ%$5E×µ×”÷®^CÙ†ÖJÖ×m´sºnSj´˜¾ ®?­m€îTó8M^5¿ª;0Ld²°èƯ®G‡ —¶»CçïƯ¿ÈázZä(‡"gqTĐù̃7ưü'Z·dĂçmăGáƯm²đeR;q!eØ!}'cÔÖB×`uA#4í0O?ô•ªÉÀ̃Ç56L'ñÂ' ‚u) lq´U[Xx«]#‹GƠoÇ4ˆK4‡ø£:™/± h3˜Ä–ëºTđÙ̉hnƯˆ^̀ŸêúĐ•i= 7A•LeÛ´Wf¨ iB¯…§ ĐùÔ4MDÇ®FWBƯ/&ăhĂ(vïđ;…ï_ô }Ó÷¯W»̉ĂÉÛ5ëƯC%WƯH€̉Ơí{-u”|CKTgwoKß)êưî»dH†  œ°™^´¯^<éR¬*CJv\ì=•æâ;߇æCÔ |BƠÙµ)n’åBp’sù˜Æ4èơ¶ú­L– ňCô>¤¿¸ ç7A|e`íN¿MÈ@¤™vƯ“l+ÛvçÊCWÚ÷î,.8k؟Ƕ;±´á¯T”£IøGä”·¬àa;ê lèœè§2Øy;‘qTÅäŦ}ºÑ­Æ¹:¿pÙvbö₫Á2üu²›« ¿,×Í|©ă‹]«Ùyµuï.ÑD¸Áëk_đ:̣»{dƯ ̣¼`x’,íĐG”¢ÄŒ§@!ÈyàdÈ›v2Đ->æƠ}N†FæH̀*?åÁ0÷́fÀǹÈÎp̣ΕˆêæĐû8ˈZeÙînרRó{́®>EKx·̀đ-öÁ»néá ‹oÊ*£Zö§;|R`µøŒÅ$]18nÚ™TÅÈï©v[O]ùeÊÅía³©¿H¹€Ơc}B­3E鉨Ÿẹ̈SY§JdÎÏ)>/B­¦µº(c û¦j€VÚ¤mVÈëȨ‚ ßƯö#°,Ï~“ǽ^¸ë‹ ^?Xl`?Q|°Øèp—U¨SµF@ ›r“Ÿ iƠOµ=”Ë2£~³¬Ÿ¿[•H覩 ¤:t[\_&̀…g°áÈ]W1ørlœ@ŒbqÏ 7ÙÆ̃G45<ñËp¾Â’ Ø÷f@ư%pz8]ñî}6[Ă?̀2ÛwvävÆ=¼×³·Ï₫åOŒL–u@×JbÆO×jiF-§ <ƒ;LÖrv4KÄÙÙ°µk—çỂÍÜ?L¤f7˜̀ă8Ăc#Ùd—¦Ë¾‡ÄƯZ a5w÷(l[üZmưÊ- Đè ÛâDwôBN´„[›#-Íö:G¨½¬êúË´‚v?oNÈz,4¢œOE}Hâ,l‚ £ÏEœÚÉ3?|lm~å3÷́@a„Ü?…yÜô•Ü0ׯ—¾9xđOmêZđƒÀ¹ñïX6¾ûÚÅ‚cà†}Iå9¤l¤–$á9;MÂóqq9u°:‡:˜S3X̀ê§Àl ¡¸¥`Aá½vLMÈ´fq·Œ¸Ơ6B1ÏenÁ°a…Ne ÁI(C›¾ ̃!¬£¡­²[±-xŒ ï₫å[`øĐin9±G•đʹY÷µǹ¤É‰%&đh† jç°¤D¡0/•? µ‘ç©:”$ÔÔ2'6©¤ai囃8½₫ ¤·­]™8gÀ̉M‹É.’çÉvaÄ®SÑH9%˜́ jO°vâxæDqzF,̉÷́¦̉z`éz`'‘¬ô¾z8©˜> #Ï8Ú‡Xm̉;Û£>Ú¨ÀsFưö°OG„¦Ṣ$R+ápjăèL“ûy¤¨8!:xIMØq  JŸEä°·tç^¨†ùàˆX3ù€Û¨Æ¯Ÿ8‹hñëIw&*ö«#đÇgđ„ÊS‡Áđ±ăÄf8t‡×øûCwöÇÛ~XÈø-…f·S–Ëđhḅˆkƒ@#.’‡íà +nXG¼½?Ơ©î; ¨&̀&&üÚÇ"íJ@̀…Û»jïÛU6 ­ʓӡRT²ó¿|ƉBó˜yx̀₫/d[ endstream endobj 466 0 obj << /Length 2072 /Filter /FlateDecode >> stream xÚíZƯoÛ6Ï_!́É"Vü& ́¡k–¢{(¶4èK[ ­$+µä~́¯ßIY¢-Û2’n]Wh(‰:̃ï~üƯÉ4ÉàM4K´áÄpLîN2wwy“øÁÅ‹æ¥01í̀üạ̊äɹ” ͈Í,M.¯»¢.§ÉÛÑóÛü¾.–ă”s>âOÇ©rt>6b´ZLêY¹À'btQ\Ëb1)Æ)Ó™²#ÊÆï/;ùơr½¸d’HÁjÚ̀̃R×°„r’¾ºL‘L ¯.'ŒH‹§R±ÑÔ¡£z2½&³Å‡7c+Fụ̀åjöä\é„Rb¥d((KR/s/æc¾œMư4©ºÓ¸&J˜í¦ư â3™Á:ë5:̣³®_)5̀ /¾ƒ·ú´„µ““~À3°j3ë´O"L뵜ü®èS)–*ѰZ)ËQB&)¸J?ù¢¨WË…ú¶đ1Úºåµÿ›û?ÇR‚ÛgùƠ¼đw®̣ª˜úwÊ dVW~€Ê’ ‡îêD5±‚y ^AX>¯Ê§} IŒ°k'ø-×oÆ̃Zéèob„Lá"„ˆ{ọ̈¬ :ÄÑ–ªŒdŒ¹P‘̀D!Ç·Bî~U‡ëÛÅ8à‚zøJ3=̃,£I&̀øaƒâGŒŸơŒƯÉ@ 7lx Nó:?*£ƠRj$¤ HÿG«ê|Y?@´êà0†¹CÁ 8f&åjQ¹ÄÉ´ä?réßÛJƠj¦;Ù†ưé½q̉ÛŒH*ă ø}U§³Æ w£ÙÂÿ —¯úùÙ¹Ăa¯ĂY„úùÁZ€_×FÚe”k¶ˆƠc‚µ&G³Ê ­êr‰d¢«WƯ¬ØƠ¦oeJát-³™>í]÷¢™‰'Z)ø̃KR® áLD(ù.£b‡X*z̉%^=kf>!+íF¸ÜÍLäAøÓ,¼çîÍÓâ³:Sái‘OÆLnưƠtvW,*GÿqBA–^‡7̣Å4L,®óƠ¼nÖ*ưƯÜ_~33*&°…Ưµøè¯bYV¦§}Ʀ:#È…¹ˆ²zÍæ@Údd6§:ĐV¸Wwøÿ, -ưÇcáo1/ÀX'¾Ÿ 9ø7¼ç/>-gu] ¯¥MórqĬˆĐÈ@=+̀`àØ0LEwÇùù|¾­K“Çq̃ÂÈ%¸}ÉF £¬zb§Q’µçȬÚàúU~w?Ÿ9Ó½{¥çúóäYnw¶w wÆóA –„Bà0}n…£+¼–/wMƒDYûØ%ÖCO'µ]«í;.w"85`ùƯH¸pNÁÔ2́ V16ºGŸfơíÆ¤Ù´²P3 6¡́µ-j/¢d8Tp©ª¨{‘MÂ&ó£%L̉oÂUQÀw=yêö“स‘ƒ0Ơg#Ø̀øÆ1Œ}égƠ|»¶T>99Ô•¯W«6WÂ÷ĐNïCº•K“̣~̀ÙèK0¸…÷¾mz{Ö ;&¡_ùõ VSl×½}Ÿ%SxJ„N>¹™w Ä™FYóäơÉ¡Q̉t̉PïïÏZ`…]VxˆÿZ2!ág K„cÑJÇp´Ç,#Đ¿8„c©€6¡4âÈ2$0 ³Ă ´Œ‘ö؉ ‹·B&C5áâ Ø5j5ÑÀÏQ’4a×Ú´ˆá´3¢ëL…ĐtŒóÎÄ[•ï¦íØ;‘©M‡ÆÖq í†>†uĐÅÈaÖQ Ù-ß„*ˆrnG—ØZ,½YˆÈ@˜¾xsƒ­7ọ́*Ÿ‡[mfâ£UË nzËö(AÊxOÆZPFHê¢ ªơÛO}DeBP«GímHï”#–ă‹×å²—› ";@€Vd¼-ÇzŸ’€ Đ“ ́éAa{E*J\&==ï”A;.¾ơMÔú†øxæ"£>í˜-oÛeÛY¦ÅüR#H¾R×»4œÚï»#ë ¬•́TxÈïRÁ2ˆ‚Q‡₫đÎîĂZ€"m…·‡íÆíŒÎzYüͦ•Ă!oÅĐLµ&:8£•<ÖăhÖk ‡çQ=èÈ5äºuœ_ư8<]ăÙÇ£³¶a—^-ă%‚°«}Ă[j)QJ‡Éop9Đº`e ‚’́QÀ º VÛŸçvÀjß÷àNOrbÀç`ølƯÅÛƠ“…#˜₫'ÛèjĐGå­f8ư¨Ư 2/ lw±–éâØGå|.]µˆè/›̃3 ẹ́Ï"ƒô‡­FI®˜‡É×íO`ú̉}Ă® wÇráyÄ̀đ₫:sư8œÅ_ÉvÁ0´ăŒpXÛµư8PŒf́Dch!·à₫4†Đ£6Băơ möt­1„•= ‘Éđ‡#Ù“̃`-®Gí>½6ÜÂuỌ`!vh¡{êêÀ=ñ°èÇơîW7Ú¿ja)Ô£à/| ø{,Đn÷ráwƒYáÛƒÀó¹₫r_<ƇÀ9ôÑ{Ä@nØÚï=¤oÿĐgiÅhe’}¯´kPklo¹79ôG\™{¿₫<ÂĂ—!€ÿoêÛ¯ø[w.†_5?*ºïo3rtS endstream endobj 469 0 obj << /Length 2375 /Filter /FlateDecode >> stream xÚƠZKÛF¾Ï¯r’«Óï&ä°kÇA‚`°ë̀æâ5‰! ‘&eĂûë·ª»ùhª)‘‘3ñbC‘ŪêꪯM6£đÇf†ÏL"H"̀lơtCíỰaæ.̃ưxĂ<Ư—Ê¿ßƯ|ûV©£$¥)›Ưmº¬îÖ³÷ó×Ùs•—‹¥b.¾[,¥Tó·‹DλUÚwøDÎß囼̀w«|±ä†êtÎÄâĂƯÏ7?Ü5ÂWDI1RÓúDƯ„Ϙ ô­ƠåP%º‚p¢‰Z,•æóhĂæƠj½!Åî÷¿-ŸWƠOoP±oßj3cŒ¤JqäCgKΉH<›¬ªvÇ'G¨t—P ’ ô–îû* ‚!(àßTјÆ8IMọ́nU¬c"`åŒêêUŒ“&Ü4³2ÎH0X¿ÈÈÔ¸ế)\¶¬ àSγäJĂÀÉ`‹˜bú]^Kôđœê1Ç ²Êâ₫¸€ưñw5¤]–Œ)ÂÛE  ̀›Í ä‹„hÖØe¿¹(—; ·*[& –1†Êü¸P ¸,²ûmd8¸yă5ơ:&‰'„éfuEÇ¢@<[JØ.¡½éÍ:«²C^Åä‚©8„ש+†"iMA0̣%F¾˜ï=+¿1êCõ¼SÓ‡P“Be2HùW[œå—©È5Q̀F!Ÿa8¦°aP°uăM‘¿Ë¾ÂªE†¦:̣À Pêl‚6jƯåTW‘Ư÷ƯÏU¶ƯÆëV Â8-ŒúÊtÀ'°mÄb¨sđ¹†BS¦Bt?3†¤ív[Åp±yÚ n…QÆ̉‰E+¦¹ÜqvëÚưO»î®]3ĂưOÅvë®jè‹-¢ÅƒÖ½zJ1Âï)fûh‹ï ¼Áwtߟ àS̀ÿ'UỘ!=é©!84ø5˜Á#úT4Oj4G>ˆè&#ˆ“Ư¿VUƒ ¥{~µÅï~»₫Ïn+ Á&à₫i$¯áÖĐôê»ßỸjí@CáƠ¼?<&/H̉Îrë¡×ïÍ$‹kØX#f\Ó¤çXï?ĐÙB}L¤™}²”O3đƒ˜¼ưzóO?› ¤q­‰÷CVJ¥ç! B´NP¬°ñĐ´G‘-Ao磪H[¹èî„YÖöÚ⢽H$˜ Øl!£–#xÎé¶@@¤(h$$äó«¶‹[£™e%ira[$aí «ơ¼Ư#R««½ă-¼…[Đt‹ A~³m‚£r˜á Ư­:±ïºGǃ)pNÎûv›Râ§`Ƕ0¼ ẩœ–Âo —F¼æÊŒœ±ÁœÓô]¬—cl\°/’dVûg4êgŸi^ÅM>-ùfâ_‡¼\Ö•é”3 E°ùçgøqy¨;t³¤¬Ă€°“~do~Ûæ»s áäó¤3‚¤µ!<ÿó“sư¥]ơù9¿2?5:Ưă¤ø ̣â—ó“G•½(́4’*ŒiIåüöủ *2‚C© 3Ƈ€ ~eÖ„91Óu6A;̃û]€ºàD¶·ËƯ½U¡̣âtZªyc‚z¼>dz ÃN#/3»B¡fQ‡Ç}YE•‘ÑË*sÔFP;c»N›hYw™Wá̉g´{…DÚÆéTËtK¹.tNŸÔÖ/ªWG˨A!$ÿûÄôÊ€Ÿ¨ d]µÏầr^Æ8ëư±Æé^菱~YmV¸QY9€Î—đú%Ñl–Ơ­©€Ötµ/Ëüà²Ï~·.vî¾GÁqP;+Ưƒ̀•²pKĂ|°wTæÎ²ll^®2Á)çP±mºïêY¨íÈđU×ÁâU¯@ªÂówc]ÑH—î @(«NKwÂOfGp²€¥üléÎçùˆ̉û‹ë•Å/TäJ5Û|™ñPüwDơ;̀Œ÷Kéx‘óÓnĐ Î_7E¾]¢ÊÁH%I&p[m³Ă!®Yø‘̀wÔư½÷M¨¤y"‚ʲ=;²; +îRÂÿ3úŸ1ÍÚpÇ‚iBô:–”{ ÅÚ÷ÄÅó§¬=æØûñ³'˜B”Áù‡+}Ù|‹·XK@bÚ] èV’Đ̃·4(¨ús7€—2+nÙC¬3œÀwmPZÙgdàë…Î)ÁµÇïø¨ªiNWp©YS)cøƠ·°¡9}ÉƯ*Ö–ÆñåăÄ )q/lÜØ_¶k ¶ØH[o[œưwϘ:&4› “"“í€âÿ '1›€Œ ₫ƒo§A ÁÏ.ÛBêK_Ë_Á¤Z^ 4±© ô­î³Tđ,`|ÅĐ„C¯˜ Œ(ÓƯ™ g&x§™XưÚ™ÉIlÄÏX·₫OÂù`b¿ǴÔÇ̃đ=v‡à :y¾Œ3̀³&ÜƠ%¿S3:qºÀÿZơêÑ endstream endobj 472 0 obj << /Length 632 /Filter /FlateDecode >> stream xÚ­T=oÛ0Ưư+8’ƒ~‹ Đ¥i] C€:î”…*S‰Yj-:ưû=’!%j‘¡đ`êøx÷îƯG ~ååVR+sT7l°Q:́>møˆË˜Íï÷›«­Öˆ3ê˜ăh_Í]íèß<?ƒ?‘LJ‰å5É”̉xK¬Âç¶ uׯ…w¾̣'ß–d"gÆa®ÈĂ₫óæă₫\ Mµ’od:¡_ѵqIđè C™V‰®¤‚Z’i#đ×P7u¨}‰€Ó <*¦g8ʲև̣PÑGnº¶á¸%¬ñơƠÖäˆsê´1jt&©á<9{.³O8mæ8™S£-ÀØ;³‚hËHmøÆ4[ Ă%§ïÛâ¸̣ầL(pÆGÔ¢°·ŒJgà )×#ơçSÛ§̣†'ŸªùL´ÁCRƒ½«’¹HŸ·ÀüĂ6Ë”9(•,EÓøĂÈÀÍáh<¾NgA4–I_’¦#$_ä"´‚@¥HĐ;?̣-¾»^s­4µÊ]¼,‡[ ƠQ—½–F™CíŸ÷‘xC ~ÿƠLâÿ4Ó'vÔ_¢)«Ç>Xiƒ"U»©û0¯ÔµIWåL¯tƠ¾PMQ©ŒH}§(Ïa…¥Ö‰I6™$Û'±åWÓNYQ?ÊdÀƒ»x˜Æ7 ²÷dÖ¸s~] — d‹ÛÇQme\#÷ à–˜ú=@HQÅ£¾ ºÛ|Y[6\1<‰)‘¤ÿZ¹2­¹Üư¾x±(̀$Ô|>aÓÊù¦…!í̉ÿ¡[TëGÑ×åˆHz‚q*Ü8Ør¢;œë4µ₫T¥Ÿ„û ö endstream endobj 477 0 obj << /Length 3157 /Filter /FlateDecode >> stream xÚkÛ¸ñ{~…¿X+zP_?åÚKp‡  .{=½~ĐJ´MÄ–\JÚÍưñ)Ú«´‡«!9$‡óq̉Mÿ̉M•mª:ë¼Ú´ç7 ÍÚÆ_>¼Io ˆÛó‡‡7oßÅ&Mâ]²K7ûM‘ª¸̀•?ï¡Ûü3J‹»=üüæÇR‘q¡̣?x­Ă~uwm̉*Î̉BáƯøŒ¬Œáµï.—»mFºï̀W€ª"zw·-Ê<úđ×_yüA÷Ú6'|O¦eø£iu?j¤ûö‰i¹‹wµÚl* ®úû]GÚfèaGù=³~UôóÜk™I’ ƯlS•Æ)”–qd|̉Ÿ‡Ë]VG/ÖL„[¨8ƒç%qí¯ẻJ’¶ÍăØ ư0ó_=BGK`/aMDƯ{|ˆƠBëça?!ÏwY5V8ĂÜwÍ„ïM£{~ăO}ß :WY\%»MY+ *#AǬÅ0™ÄiF¿ EïöoƒXíÊđ9·×Đ«Ótù₫íÛư¸{x{KÊê¸L«+̉¾­ƒû5!×|M’¸̃”E;₫ø„Ôö?k̀ȼ ¥Ơ³™&ƯñÜ4đ·EU¨¢5½,wfœ¬yœ'Ç"iû̉8ûFËĂ/œp%ªRú–ÇiÁÔDÏùä¨iç³îI÷D°p—Œ³Ç¦?˜₫À3fº~O?js: ^ut³¢ÁûT™‘ºOkø»‹Ó¼dz>YƯœïÀhO«Æ‡ÔzV3úĂHÏÊ[4΢qà,agÑ4@rñÛđgoϘé`' ªO‹§pă~° Œ‹iÔlt a:jÁübúN®Caà—6 öË{‘.€UUîfÜ\Ơr5LŸ‡qbh…@d"`ÙàÅ6ídZb =²ĂÊ͡ײ‘¾Í̉aA^n$N1Î Êy˜å:dh7œW”{WGă‘ưÉNèÍw»E½da: đk[ª$úá…çÛơÔ6#êªJ•Û#H‹‡÷ñ{À)0l3|"Ä 2G¤b¸zFÊï8̀mHv[8²G4 WĂ×½:UÉ“_]ùWăÂéÄ bØTF^"cNñ4¼Øá`›óÜég/'ºkvW‘‘Â×êscúqí9{öù…ZÑ)œ%åC€©ÀL#ó4‚`¤~»«U„¦”;`AFŸW/¸*rÂ<ʪ?¥€—* Pª‡L»¢p^ʪLøªLņp yJßY–nđ'xZ¦ˆ‰ˆ×\.'̣®48ï™éÅ(èL6@\w*̀ VŸt3¢†Ñ̃#?ˆ?£çơƠA¤¸Ûê½¶–¢Î³Sïfhgű§/d®bWD#±Â^aCÜÀ +?.>·ÈÄ18FOàKGÅ­›‰!ñ <8’XŸœ/-rÖk\̣̃"<>Œô8vqa %²Q®¿µ«×¶đ{R$âwJçm-ûRL ÜV™=ÏøWààÙŒG8(EưHSy«`UËêV›'ïJ o¶­À-ëT'Cw1ë*= rô:!ôPöÁ‚FK*X‘î²ü_‡@èkçmêU_XLn­Ä;Ri)ߘ\tÍ=oêơ3Oˆ§Åm¡í* t}#›¯ÈửKBEç¹¥•GÉs>ǹŸv)¤ưá&ímä6 ü 6é©Ä5t]®0!ºËÅ`«2{ €M..°`5G4/1ç!GÆÙ[ —0Û!ävQ¦¹PÁ÷¢+zxi:›ñ‹¹Ư»Â,"°NÑx-}’mæT ÇWï0;o4¿Êwy ơ€}máxP«íÔ° FNø!¢›Gs2çé°D^g¡ÈÓëTÆ>±¯É¬=ç(‚fƠ­BïJå€8y#eÁrLÅ,Í̃ï1¤đê–pT. "₫m¬7y¾Đ²¤B¹RB’_*œ ¥TƠ_›óåDô×Bw•tW7QÔ?•Ô?đgöwä…Ó;ÀxEïU{Yem΂&¬ơä94ĐÊ"ơ¾˜ ±­‚4wÉ`ưŒKH)|P£«8‹ ':^0Ñ»ÿ–A!0(gÙuP‰"fâ—¼ä́URđópÆ… Bs¡ăyQEïĐKâ‚ç5<¯é ñè<%®q8ˆA¼Ë‰Î"ïøRôÂw¸ëvfÄ”B±¢̀ÑüúÓàjưñ–Ÿ’æ̉—4€OY‹G^² +ªz@?›é(çù \ÔkœôeD›g‚É@œ—@%ÁU1ܾjB9e])è¸WkùÜRÂ:̃—ñ}8 5•sÔª è#€–,L*p0LóD~ưƠ¶“>pƯ¯‚®ÊÈ-9:và¯{ZÀ½”½a¢(@ó[ĐÓ¹¯¸ÈÿăẨó{Íp'AƠê»ïx…ă?œÍË´^¢,%Ö Z(&,%÷0Đ_/'ª̣`T9%#"´•ä×àÛü‰¹z–›N¯%-½Ü (wÙg™‡̉§¼ư ûư„Û÷ȵ‡T8~ǰhIÿE0úv8_ %Á¾(Í—ÿV¨RH€ …½”̃>©—*:ñö§Ân.py\ơăh̃}ËAŒÍÀáà`/hÎ@m+7ƒBkÛó€È¡₫›̉jCă‘c"Æ îI·3«yÁU骴’t¯á%JöJª¬X5æ–Ë×Àâí˜X?™n†î ϱ9‘F¢MW`¡G#ÔÑ‚ƯÁ–ͰÀŒÑ Tïáñ‚I ¦×5÷¨ê—©9¢‹¬̉ë‚rm_O)îTK=¡ÂFØçêÊ·ññB¹œB‰Ï¤™¿À¥#$óÓ ̃=CCÖ ”k÷ëá̀ậ®¾æ9> ¼ÍO{^[’oÁ„×£/ÄQc ñ&ÏAȰî# ¿® ¨*Æ8äXRÈo rƠÄ¡@P‹N Ÿ²ĂàˆƯơ—pT$3¡"Î/Å èËÏEP(à¼ư·¿!ấđuu óy‚©Qö€—=u|wơ`rùEi-Ê-ça–万=ol“ơ!kâ…nÉË»åÎĂ²Ḍ̉TÚîYrûIê`ô¾î1n/³•ry ỗÏ-©láăÄÄkFv³v­ê¦Kkº2¡rQyÊ&Fɨ8ÅÍ¢Åk ¦ă)Ÿ:ù*Ưp¶ .=¼½Í ®8J‡Ră» oÊù´,ȽÎàtËb¤„lù ©¤ôkƠT@€Á “ÍÈ™CCWO%U¥&wºt«Cdé;KWÄ́RŒæ>|®dê™”ƒ‘Ùv£HT§r’đ’¤e,:Ù-tHéµe<{°̉Ó¯ç[TÊÀœ¿ư› @Hz/Ê׫Ÿ‡Á;3‰×É]às?'ƒYBü¿¿ù%Ùÿ·9EùÜ ­Ó«¶qHx¢³Dÿsÿ| @ endstream endobj 481 0 obj << /Length 3227 /Filter /FlateDecode >> stream xÚË’Û¸ñK8U#…o¹9¶×qjmo­'§8ˆ„$́đ><|}úÔĐ®-4€F£Ño*¸ñáÜdáMvˆö‡(»)êW>Aûó w~ÿ*u;X¸[¬üûĂ«¿₫’$7¿Ïư<¸y8-Q=”7ÿö^wƯƯ.ÓĐ^!L÷~ó̃ư₫ñ ”%̃ëOo¹óæó§·>|₫ôIºfB²Ïƒäfäû <0·KSß{«¿úAܘѴͰÇÍ7A²O¸<Ưg–m_ƒ(~¸˜aŇ[fW¯Oº—™±åöÛ]˜y¬ ˆ¸iO¼g¼èÓ£%Ócfú]à<”ó˜<_(;̀”½i»;xÓç̃œ/ز8 =U -÷j­»€3đ®7́*óˆÍk*…ƒ'Ù1^Ô(»®z `ná*=wMSʼ'¶Oˆ§í‡{Bo˜ „\Ưàníá…èBƒ®MÑ6åTŒmϼ©Ơđ8¬o¿zäez¿ơí¹Wơ-ܳ? ÀTC׿AqÍu¬“%›G³¿äÑÔ”xá,p¾̣µG°µ‹£̀{§́…˜ôêÚ_Å —*Ë^|¼½0̃ô™ÈnwœHDC·²»)çơ½¦Ç6Petƒ29Ú…µ²¬€C ̉™§y¯h¾™öL @ ³/ÑögƠ˜ÿ©…º\½ÈĂƯ–áûæDCƯî̉œoª¸yBrˆÇqrEJ•đçGABÏ”yÏ<:ơmͽ¶çªTƯ(˜«j9—{êe2gÅ“ăöøî¼¢í¤† ªîÆ3ơú¿“éMsF3¼"‹‘ík3  éóÀê .jlOs§V-’‹­]¤¿«b\Ÿxwˆ=à̓E‚3U£Ăâîøq+€iNÖfÑ¡g;À³¡yÔ¥³j±jbûØE³=Óª¯ é̀.ÔˆdGDtkÏ<*'ơrÀ6âÈÉΦ¾1-.²í-́Ár1t†áZƒ¾;y[có'®æ®ë+ó/X~ªI(9x™®o;uV#ú0ñ0œC Ü'Æ–A¥àăF‹äfà¾-Eñäq JëÖ0́‘?r85¨đØ "cHƒ]Đ—°A4™I\đÓ¶\P₫‰[f*.Z÷BVÙj”¢2̀Æ':µk†ª©¹5W¢h^´‹Ưđ¥Ö#qÈWµ6ßë' Ăœ2r>gk¦̉d/@ˆ[ÇÈ„aº“pJ/O>̀ƠñÍØÚ•Å?´ëđ%ZGh¶ª/zA—KÓgÿ4JBwă£ù˜jüƯ ‚·ÁªtÉ¥ ˜ă@“Êư6s¨âñ²îŸJá=[_ u,5O¸OY©­÷g¶ªŸ²Ăk‘«¤wkDœl´¯aë¥w¦/q#û(„H¦ª¤äÉ+² W‡æR¦Ï’¤ °b“ÏÑ«ơ[³™eQ  ŸÍÀb~Cªø6W¤Ú˜K<§ç­ 2g erl0đÓX|&?, •è0ÁÀå­Đ.²Ä±o+™¼´ƒ` oX¢nÿ£uu-uw{ÜÈ[J¦YËIä±ă >Boèµåă_Đ¥‘÷ÅêyÍÁ eÁk$Àù5«]7ơ"¨äƯRyÄW ¶«ä!Óh«®‰àS¯¥'q¤`™MÉ–Ư¥Â[XÅĂ^ọ́S €©¶Í]kíP84 ûØ]?aLv–î×ÙĂ¹@†˜)æÀ̃Đja°ÈWÈEưBµ̉~»†¡ĐŸ"Û¡D=›„ƒ3 !d 6÷ ÓlY«¢ÑÊ#¨\|”çí8®́5 ̀²‹I%%KUû^Ê ‘o3m]¬ ́—ÔÅ‚9Ñ[{s:lĂEɇ&RwI:„ås£à7‹/lly—ăD4©x(²µ©Ú”döƠ²ƠwkS`í••sa¢ä²0ÊÚ™ó¼Œ?́ă$è$+Ÿç÷8G;¬u9aæJ0¦¦ΖjT<‡eª„4†3óŸy5cÀ`×Ê"€đÄ…øMod‹̀†hW8aÅ Ú̀qÖMÊÅíÇñŧÔáÎX%íø?—ÿ”z endstream endobj 485 0 obj << /Length 3156 /Filter /FlateDecode >> stream xÚÙ’ă¶ñ}¿b*/Ë©ÚQx“²Ÿ́M¼•ÔÆÙrÆv¥â<`(HB-…‡gçïÓJÜIJ@ƯèJîbø%wUzWƠٮΪ»¦{t<Ưqă§o™÷‚™ß?¾ùăEq—Ä»}¼Oî!ªÇĂƯ¿¢ï.—û‡´t0_î²,‹¾û†¿~üyôA÷zT-C?-O­i¸ưÑ4ºŸ4 HöU%Ơư¿ÿúæÏî@EŹ<û?OogÿöÙ®:Ê]\äLÄăÎUô~G=!EU4Eư‰áÿ–±¡9eÔk}`h?̀Ü0ư}MIÔ.Đ:6Ơßg^æ³Ă3ŸỜX–I˜G°QŸ4"AlÔa65 Û2Í2 ~H²]R$LA£Úö…™z‡ù>̀g=2đ¢ÆyâæpäQDMtCÛÓ]3Ư0vâ!&}ç6-veR†l”7ËO wl<ÇA¢øóŒ¼ÆÏƯƯ?”e}¯&+Ÿîá̃ơØ™i2C?ñâƠZ+ơ-JsG£9q+dnºßG§/.eK ;€¹ 2ËÉ=‚Ơ( ^[óZËp₫|–)3At‹i† ™;ƒ‡̃î©y₫§qüƯ»-áQ=n˜§rh¸Ï߉…tzjeä‚—0 ‰¿›ƒ–uóYÄÚÓ¬f oPfdå₫NÏÀưt₫‘˜‚0Ïèè/°f&¡Æ•¿ÅI9vÓêø|ú:ç¬ÊA0–¾5¡`WŒ“½RÎÇÅKyVÀj±„¯¢ƒ}s‹Lx'¯̣¥ÁĂ2_–™Û¬|‚¼'EÀÚÔÙONlfm·jÛ%i !y’‘Äă7\5̉ÉøD2Àm3Dà8à¡oe‚9̣0SCDÀ;bÎÉf,[j¢á"+L9Îs0ä#§+{„D9¹x̀1;ï.1EQÛ0/q5K¥wx¬.“E$Ç{VíñC8úºĐ¡,¤̀¨›™}5tÉÊaƒø \£ø£EJÓÈβ‹PA»æÉ̀2‘ †ÄṢ̀•·³”¶¼=q›4¾î°›ưỆ3ëóP2r·“9hwgä 0bĐ-©÷}ÂÁ,üÂc¬›7̣÷r]g.…&G§/Üq$ÆŒÍ̉ÁÖ7́_9àÀ¯¡f&¨ÎÈ̀µ/7ØYëløá| 7x&r̉âÁN@ÎA9"è­ˆ¶÷Y½0‹he Y¿Ă·"¨Vt°“Ä–ûlR…‡ £ØIàỢè•L!“Lâ¿7°úö3æpoÛG}²÷ûSÀĐˆ̃%eß±Y0ï‰å₫¾Χ„a¼°•ƒüˆQlUp̃y±†ăGèMg2oØc§„ôJwvf‰ eGU ¼ĐWƒ÷ÉÈöư¿;ê¦Å$bÈĐ'Ó¨–QtZMË(ÓDHnÚÖÀ© ưœk¤`æ%dâÎqiѶ-±!ĂS‹r²>a²6ÓXTI"kü弿₫åÓß±•²öV«¸f¬ B{.œƯ±ưÙé4Æ)‰₫̣E, ǃPæØïKç*2ă8s‚œ¥U2.dO<„& í“ Ăv dÜóh?Đ\ —œPÑÚ£́·PX}f¨ÜÔ´iS~=s*PÁtV.wza¸ÂOù¡„që…(¨×8iLI@#èœ=†NË:†M)Ñà̀ç{á-Â)µƒ/x·'#[6_W4₫J¡™C+¡N«¸G»U6“ª }û2K₫À}â3 Ø[¤Z°PÚ†HH׈ƒœÇ̀%xæÆzl̀$Ác¦>„X¨]Z¾đV'â[́8`ådÉ`—jnÜ„ .5ƯÛ̀¤}hƒ™V™{îb±c¤fJk°9eôöb°®I SÖüºÈÙ‡Í2áÈ_ &“0ͰªVn Y¯†À5ô'mSL¿ ?™yµ ÷œy+H( åTŸ|ü»×"êaèbƃ¯æAḍ–{­u=ù: ÆèbpÁ©Îi^ó;AyđV(@\Ù‡-Ç”‹»ÜFñ/èơøw̉Ùê#ÆY®¼Jó,¡ÔU!»Mí¶.¨È6P|°™N‹<Ç ă¼.P2×zŸ©6¦%"‰ơGësä­æ¨ơ+éQñº½ÿÛu)Ư¿*1ö_|Ȥ^rñơ½$öüÈ’úLP<<2đIM´"ï#‰Ø¸÷è̀µ$öĂ7o®GX…¶›4kD^’p¾ ƒ̣.'X¿*Çï$ûÆÚĐ2«èN:n‘öÀ{+«Öoe•ÏÉCÖ‚9 aº sÙùÊUî‘ æøZtT u¡Mw¦}’./‘GWí˜l8z.•‚oW±Û'Ẉ¥D¾øÁ¥̀Ăˆ­¤’UÅ%+́5 ă/< éL/æˆG­©¤qïJÊÜêi8Y¯ÂH ÆËL|û̃*+Lƒ(˜2yëq"0 <_l@E6đ V»ÊÄÏkêŸBêÑ/2 ½ `‡œ5ܺü5ä€Ç€¬N\”‘²ÀÖ©€:¶h@]¹'µæ¦XóM”["n^ÓÀ̀bgU%B¯s Çó÷́F0ÑË)À«Ụ̈`ŸoàÀS Ÿnevd&+€Ă%xb́¤½è£|Wÿ–dùgúÈKgÙÚK‡* œÿƒ7¤qµ__u#WíM¸ƒ †"IsKM X¡§Ö´S² ƯÊÄ3ÏPÀ“!ÇçÜ^(´>®öd±DPôʯ&n°>w‡8̣Ö EÖàüÜ–‡ị̉2‹@²9ÿGß §DT£ƒ„7soÆYøfŒÄëœ̀̀¨Á`ÊÇ\°)ÎK/N¼ƒyæĂC»B*Q̣”ÿ”b endstream endobj 489 0 obj << /Length 3197 /Filter /FlateDecode >> stream xÚƯZKä¶¾ï¯ø50Ưѳ%9'Lj ÆÂ°×‡ Î#±{èí–:¤äƯù÷®)ªG»Ùs° 4Y$‹¬ªUÅ̉d)üËêü¡nCSÔƯơMJT{~àÆÏß¿Éd̃&÷æ¯ßUƠC–Ú´Í̃bVïú‡'ßÜn»}̃$zèÍÇƯ¾(䛯ù÷û·¿b£L¾×ƒ¶êÂÔŸæ§‹é¸ư£éôà40ÈÚ:M²f÷Ÿwÿ|ówá@U^ª²øÂÓûÙÿC„,« E~<¤UÉR8ƯMfP’<©ùGơ½A"́*¿ ›†¸₫Ÿ̀X‘¢°E¾¶|ô—[αAë4Ú+·ÿ\”=“º¡}c€#₫rMDetV IÂñ2_µ ŸVĂn-¸đ5 ød 8Gă™]uoæ°£cb±†P‚́† §û[V”ê|Æ 3é¯8>™û@¶%F0ÊB³ÚÍ—É g¿âF°æüLwWB«|Q¡¬—ƯF¦\̀ƠÈ`8€ê:r+3Ô†e.́¯ p˜a_Ç}ÂVéă4b‘²ä/2 Ư©4Ÿ8PpH •x Đă¬Á 2˜~Fo$›‡«ƒƯ8BHØ—u›ü0t—™ÂφtÔ#]øâؾ¾đ8æwàGY¼ ̣ëíÉâ€yläB@£S³“)“¤Mœ4êÛDƯnè©ñ?øœFỲÆF ¯¼üb8 ‘ƠáØTëy”ùí8, x!€!‹·ă°ÿür'±ù» n¤c–+rŒÑ”™}U!#A§ê÷¨ư©¿ÙR»JrơH>~$X»)°@ư÷¢0öØÁåÚ;uR²)ü’£:̃»ô¶(T[ ÿCç6=ÇT>Ë6„4¹Ơ­´R.`‹q+8ϽƠªWOùv´p÷ăpOØƯÛ"(C kôSø'´&ÁÖ‚ÉÇçÑï8"x9ât°…Ư×´Iuh³;<¨M„ƒ¶{´bÔ*ù]“5Û–­Y³5¡k8V™•ä˜qæ(Ăú`Ă E[™¬xñí™h:r0íFkf̃¯I~K«Ô ¿`Ơœ ĐÜxơ ô‘6×q¢Lk‰À6ĂĂäœw„Vpˆj0¼=OöaÛ¤ll™é̃äØ₫-ÍÊZ¸ø­ÿô³%üláv­°.—ÍÚẠ:^•5>íæèÓN»ŒMm7¦r"P”KÉHVĂYoeè§ÿ;pÄIû&8̣:[ƒ#‡WD^gy@ÎVLú`Í©ÓF°|Á™?,Ï1yâôEwø½hE «5SÉCieL_÷:ªD¬‹²`ÖØPvóä2’J%~̃Á°œ“GÜaMb-ÄÆ†Ø+Dé<Me-—@Ầ ±qiJÎ>k—iwZ¥!̉8Nvüû:f1ë`×I˜\µ‘!êÅ@gC`Qî™%+t €}¨,ˆ<Ø ÏđU¦ËlZ—P ÓØ/trT»e²O”a|eû-oï -7‡¬ë%Á–0Ñ?q ¾Ä ̃U₫mô4 ¶A n¿Ä>˜æ/µ‡è-·„S<?5Zʶ8¼vQn~ Åḿñé ê‘÷ÙNY‹»Ç†ßÔA­Œ2ËÇæÔú₫&c›/Qù§×ΜÁê”.B*wđD‡…”ÉÈZtÄC̉=æ̣‰¢är7%¡© )]”m”`Gÿw6’PèA Hç–Ú?ư’BÚl;† n8Y]¦¢á¢µyâÔU†¢·Êvmßó«ñÁåE%˱%ÊÂQ®†rùû§ÙJˆ±£‚43[Ă´„J™¹/e"É¢N¬°”››Ơ80É6̃Uùb+sC”M¯œE^½”¤mè‚ëú”·+—Û„BÁ÷Ǹ2¬ơHÙđ€_À{K*°U\–­ê(v`^ÆÏĂKøÀ„¸öïßjû…+@°œŸÎUT§ÀÔ¤˜¥́Ë zĂxđ]oÏ}¼N;2—¤øÎ1ëW\å xú–«T&©ld{nbÚL,8zó(¦Ç)³c̉Ö…ĂEdH8X@€’¿¹À÷8₫¦Ñ¦÷¥:̣ÇÈøª$‰Âß­Œ–'=ÀÛ—V°?@E[\‹ô÷­)×¾ ‘Ç®c3Iư° ÷N¯yዘ˦ßM=BA–¶äø9úLXÂ÷ Œä%|ùà%RbăăÈ3äw2™ƯPQoÆg¤ûưÉ…á»ô˜/jFV“¢i2(˶gñàøqfÜ@$Ú\û/|5*₫¬gœOÆÂW<¨ÏrrZø7V!9X'~"¢ ¾v¡{ÿṇŸ]0‚œ^–:‘¸f₫tG~îêÛV'aR&++©W—Ơ}¨¬Ö¡ºPü%MW₫ §µƯOă>t„ŸUƒ»:­ăJ5Ú~«K€|ë@Ç \e¤³„Ï­«LM2~Cz<¦·Ø”g^º q ƒÎ€2¥&Ưöï@₫½Iå¸gqº¼üîâê‰ÖºÿäË9.0Ÿă?<¸ExàQ‡ª|•ÁKMIª²˜üßçPưg¾̃••ÿÊF Å®¨ÂJñ­â.₫ R{¤Dù!YºÅ·¾“¹Î×תU‰]ÊàWÄbc¢ñ™Ö²Ÿ$ä›Iđ½áÀƠ₫‚ZÛA—.Z›r‰ F_ÜDß7¡ư£y²Êúü¹LKÿqÆH×·CĂW®ü4ÊmÛtóƯØzÀ´é}Ñ-ư|œöđZ|hô.û_}û•>¤cï'+w* _1‰_ QÅE“ß póƠÏ»Y†Ô,¾zägIü¹f]µd“åo% 3A À°¬ ÿđ¶₫8e»́ïCûäó†£ÿ6Jo ́RîrÄ7¬½̣C ©̣%î(¾IíG L ñøu ₫ $đä † ö¬đG1½°˜­/Rq¯aEôÚÇ®I’đï₫\EĂ7 endstream endobj 493 0 obj << /Length 3307 /Filter /FlateDecode >> stream xÚZYoäÆ~ß_!ø‰V oÎ8Oë$6ØĂ–qZdSÓY9á±ÚͯOU}Ơ¬0¿yzó‡o³́. á1º{ª×[=Uwÿ ̃].÷ñ!°må>Ư?$I¼û¿ß½ÿ•?̉à;ÛÚ̃4€₫4=7®Ä÷®´í`iƒèX„At¼ÿ×Ó_ßüåi¾PgYüÎÛ{́ÿCÂ1ỳ‰ü1̀RQÙÁ½´¶¢[qĐơüC×(¤(\[v=\–]×zø=ñ`́02ø©^h›Æµ/÷Yv ¾Wüʶ?»–fx=Ùñdơ`]é;am5•#&Üà >ÍQ̣eˆ(»v˜Î²Çq»øíưCæAƠMÏc=5@(Í`|'Ó4 !LÀ{K,ø(DT€¸¿µa¨Luz`Wë¾ƯÚéÎ]ôZçΦ²[£W¹|ÏÜI9V±˜' ”» à3`¦Å¯0*óŒä…Q4\©.¦¶MMÉ‘$0p°¥̃®SÀ̃€øp|@Sưh¾(-àưv;êgØ;æj7iTl|Ơ[(²i+`©W.®ø Åóê¨Ê©0đ9v+J­3ºcO~Đ(Ơ p-V¬r‚ƠÉyĐ»—Ó́ưóëTH:Ls £fœg "ÉsåH«đ ô?÷L`Đ•ó 9#ó…I9¡4!v¹̃…rHwqs4“Åz•V¯¿ăÄaôî?×|„°øö…%Y&ÉúüUÁ¶röà,ÜæJ#ưRP¡S^1Đáû *iS°̃ô4g)ÈØöX÷¢xY½ïóàq‚_¨ÖæĂ¶(iväÍ!>†j ÄPơz<µøÇX ‰"°˜’²—‹ißñYÙ-kÆ™£Ÿ¸í0øf̉ưå"·Ú…đhÏ‹„É̀*”;4l;“_.0É"p5@­u®¥ÅÚ»ĐŒ7ZÓj–̀PºF_.f´̀ôv4®¼±zä³kܬT©jhÏ¡{/]{₫”đ‡&é5€å’˜²ẺÁb¹©7Ñtö%ôµ5#†°oâưdΗ†Sê´È–ơ‹£ä‘8o>çÊy§ E₫Âdf;´ừÛưíGÖà]G/a:>nË@É{è—³0V]W)ö•* dH ơ¬<¥à*ñ›Éïc~Çád7;8y¤ï#çḲ?ß)¿6Qº~Tˆí?RoD3}Ôf}oôxQ2*§uºÓêbÂ&•­ÖµŸ2ZŒ¬´xǸb_|̀qÛ¶€ïä`̉ÙäJÚq-•yákLúØ8_ÎyÈ-bêưÔøXaCSùk«© ‘â´Ø§ Öi¡×€Z*úmæ[D?x¦àq¾we ¿]µÏsDŸæH>CD²b.Ͼ–æÁ̉U¡Aeáù›ªĂV÷D„µ»¹MP–k›ÚÀ̃_“ ¾Œ„Đ‚¥̣¹<§c·ih×D«́LùPeÜù8×Qhlniơ M~t]£Ê·^ÓO‡á’#5!é0-Ñ")uÅvZ§Ôï…Û²ïD ”'jÁŸ^_o×¥́GÆGFA/)}¨Ùd±„Cî:IM”đÚͲr3¬ÅØ 6ö¥f‹ƯÈé*½î© 5}Ư„8%`NDÓB¢îQ7ÍWÆSRÙàÓ`wÖÏPè ¹HgV*z‚ª,§óªà H:i nË`£G9~Í­ô|®$™0ăóÜHvVhºvđéZ¡WyZAuÆ!åÛ,¦˜>Ÿ …Ï*‹“x‘zsLµzä’¬KĂ…Ï¦>Ưë½tzu$€_¶ïɦöµ̉Ô^Œ¸¦¤`o¡½5ªnI2U%Ù{ ió¬¬ù!Û*mÁmÔœÚWU嘧¾›₫Äq€’̀k÷–r‡d³Œ¼®7ơ³“$|ø `#\¡Î[ưD”8¤¦ujuđåév…8 ™s ™ûüÉ!›COœ ³gGÁ§̉^F4#¸ó]³iJ‡€=v+2œ;ơç®÷Z;åẫP²‰ËF̉‚Ï·d­¿b J57ăưÖœ-’?beƯkê°ž̉ˆÓ@S!)÷{…Q {é͘¾ëg«ø@H#© Jo‘À,ÛvÓËINRƯôU»1iæRù‘Çvº‡J•1V[Ăn{ôØOă’í>YÀ—ƠÀ.¬aY2¥¶«0ôơ¿T\Hp3ßÔˆñ¿rBOÇs%/ˆ+±đ̃·bÁv’±KØnñ¥Ư/~/áüV•Ă|i„†KA{u*i‚£–Fß¼³d%á€Kø$¨F›ƒ¾g%ˆåƯÀ  Ë®©Ñ³Ÿ§Ñ¯PD»h̀PưI¸xÖƒ\Ë˺;‡—,iĂh¡!1̉ W¯n¾ÓÉ5ßÄVüî*¶+×sMÓn°ư;jE-Å”´©|­Y UC0ă§.ùQ:·ÁæÉmR€ê¤?HP•ª­˜Z$É›Œ›«ôzÄeéñOW'誹̀̃3öúƠ·z{sµ5×:…£/h¥Ñ¦ê‹ĂÁ‘Gí» ‘3Úm>‚^}’®•‰e2 ]½kóï;$áäYø% )Oœ­•™₫‘#[•ïhÊl_í7‘¯œ½–dϱ•g$/ŒfîÈ‘U¥u ÀÏ#aà"[XxNo„‹V%èHûˆơá8_by•̀÷9̀]À¦’'hy­ư"3ú3A$!7ùØúŸ%ù_¤¿Ôñó_Ë̉́ñ]e•F̉?»^´Ưy­ÏI®›2…Nƒ†°Ç¿q¾'6#²uR¥²´çÇ.l(ñ–vÑ£uÊåiơù„“,ÔJ¢L³ª¶Ú¦Ë‹œ£\Óóü¸aÓçôÉz₫HíÈ-o•7?‹»œđ̣Ú£êYzêè¹(@ ÿZ ÅA)È/ỊÄØ EèSÔ±¢i/¿Ó( vñGz¦ôkÿ^Èöw¾ùfø\Q6ÿúë+ưœUz=#À»ÿ ™pC{ïoÈđÊ —FíÆÿGI¼²xöçT†₫µ̀øÿ“!t72ÿño'ú¿Bÿ’tï) endstream endobj 497 0 obj << /Length 2975 /Filter /FlateDecode >> stream xÚÙăÆñ}¿b' X)l̃Ê>M®uÇ0ŒÉCÍCƠÚi˜"å&5ăưûÔƠ%Nb,0́ª®¾ê®̉ª‡ ₫©‡&hÚbßÍCw₫Ö}}àÁOŸ?(¡Ûá.¡üăÓ‡ßÿµªT¶?dơđtJ·z:>ü{óx¹lwy»1ĂÑ₫ºƯE±yü?ÿđO”›Ïf0N÷ŒưñúÜÛÇßÛÎ “ Ô¡É6y¶ưÏÓß?üå)\¨Ê«}U¿ñöúÿ(“·Ü=åëp Évª̃ç ¾jömÙ2ơQdö½=‹Ạ̀¶à£ppdpBVăàBºggz€G9Vàq2£{øôùƠ“ÂΣe_}_"’hóx`Úx̃«Í'¤O||xª—q̣T#Oư³éz;đ[«l3£TÀO§=ß jøBàÄđu8Ç”³ÓGC⦙„ùÆó ˆ®pÍ omx‚ßi< †¶abbèt^7qw@Ü©kx%Ù₫dÜ+p“¥LK>ñD`C±¯êrɆ“°á§h39©+œ:tbŸ¹˜N÷tÜÔ?‹e3z82i” `y]%¦˜“}xÓAü³×\80€4ƽ½Œ¼¬‡óÁ¿åVƠÉŒF́‰‘ô%«2fXƯ¼B<á_Épƒù5›?̀ØÖ+¿Ùù…Gp)̉ §»ùểÓt=_f¿Göè­~¶½7™ÔbÅû 2Q÷ú³Î^¬øÔ‹ĂA4 ¨<»ˆ{7%,çư&ÙñîÆ´SzcD-œ<÷ßx=£Y7hÖŒ€=ÖnÿB¨w‰m£J’j ^TcÏZ™«} s49{̣¨ ¸peÇĂ/qÑA™,K›'ơñhñ̃ZÖÀÏ“L9¡'OŒ–r±ù¢̣tuñH³³½ÿwŒB³ăf'xï^ÏF‹ïhâ§Z0ÄmB̀*·»²È6 ñd àiΠ艿¬ûW&udh‘™U–U¡ŸyH4€‹v3oÀ·‚%̃ _ÛAÔL9Œ3ÚơP' ̉O[¯QE *13ÆN qc 9qf½q#đsblÈT­ûÑï.f#-K@˜wO ¸Ù ÇV¥rü¸ö–ÈƯC Î!XO +ÏÉçͧ¢{s#Lj₫ô!é²#;•îzin˜îWñî|ƒpwF-x|e¯ơÍÆxóĂä7èŒÏW.à{IhW+Nè“¢m ²ß‡*£n«¥,ZI¯Ÿ9:P6½÷¹üƯ‚!!yÜJ%́ƪ`œyN뢿»$VTIq{‚kËÍJGî3LD[Gˆ'+'ĂJ}ê¿…³‘o¯p„øL,n$TßWD)a¸Q•íæqµ¨ ă3 d|[*’ oñ~0°Ií„4qêV¢]›đA°²7‡8áÁhăIKkLè)ïÄ+]碘[¿®™³ˆ’rKåƯc(­‹ă,<€9Ô`¨ƯJ₫̉äIÔ(*ḾĐơ×#;@…”‹“^€̣11Ä+xINp£TơNî ²rb:h…°ÁE—*¥wêŒT kŸ¥Ç‘"̣»‘k^vÊkYđx'nÏ|£,àÊ©$ôB¨ÏÇ:¾çñ«ûĐj¥íÓúFI¢Èº…2@1m‚['x0E¶Ưµ×² /ÄíµT$ÈƠÂö؋ʋZU˜¨CjçƯQÅ•¦–r¦Cª1‘kîÉsàêDD¶au„f~,QÛó́Ç*¹)2Ô+[ĂkÓ¥̃̀º Ó9e^r´¡ XEƠxZ¤æ^¸,¿GEo}æ·"U z ÏÅe¨t”Ø:=óF#Ú¿w=iÛO²r|/̀’ÑIBÑâtR+ʘ]bD¡ Gͽ ´_xK*ù&1g} âØ]nêŒáćéa(9Í>v„;t ̣$ÜñŒÎ¤û#W¡‰×i J$­ÁºâT¼Zêw]®±É‚ÊÀ˜]d¹ÔeÜjM ¼âÄ+̃IáVŪ±f$5ê¾L ÇÜ1ç/"9qƒA"9½ä–%‡Ø´É0‰Œ”Ï—:Ho§›½ñnZÍßgK}º6K‹ólƒ ¬9 JÉØâéËj=£6™¤€rE¾xK̃o˜§52N£Iß5íú`É,Qœ 1ÁƯå¡lÆÑ½4î=‹æ£$L> ¾5÷2VŸ. jÅ0M‘1ejE4Œ2Um2>`"eI< ¶Ă ơj,ºÉ´̉ü?83ä#̉X°M¢TID ©÷dÑʘđ2ˆ!2O3­ˆ€ºtØ^tÚ(¸˜èVA­¼‹¥à ©àá&X\ĂA%nñ3„CèËÀ(fjµj¨²LÖùư1…‘¸#Ëî,‘R!˜áæP/%đ5>Ñm̃ó:0ưEĐÔƯĂ,h±Ñ/ĐăäÈ€Qtô{V ¹yăAp«”w"æ$-ô»^§èă¤Ï¡ï»ÍEà0uç»p°!ønÍpá±Ăt\¾rü«¹WïË“·´ï˜ÿ˜.ûậO¤¿¡ÚÈ}«4§^ë̀Bˆú̉H×q™Ó¯P’Í"¸«‚@üB×€º[ÉóT1L\e‘æ÷Wé₫ç(Hót¿&Ç¡ƒt^;zV…ZA²Jie5ç‚I'¤ñƠQ–vB’.¿éÀùùŸ¡~{ÓËT1e}3jøMÀ>ĂâKN¼B—°cHtܸƯ<îÖ$Û…4¢ÂœPâ`áë|ᔪµ"^â'̣¡̃₫L$ov²EKt`±í/è6­ó»å¤hkà`ÿ“¾ Çîô÷Ë I~D~8ô Ñá9™ŒiBV.Û£ßh”ÉX'âÂQN\Ô‰ˆ1nŒÎŒ[c€ô ±ªqOüóJ¡ Úùß}6¹N¨02µ Áœ·#щ¿Ñ@~ ¾"‹> stream xÚËră¸ñ>_ạ́%t•åđRn“dwj’­­©sHer€)HB† Híưúô ¨¡³[®2F£4ú e7)üe7U~Sí‡]QƯÔí»” îtĂ_>¼Ëoˆ›óÏï₫øcỸdéĂ>Ưg7ǘÔăáæßÉûËån“ïÓ́ËƯ¦(äưŸøûáçbC%LgœnúizjlÍíŸlmºÁl_¥IƯưçñoï~x *ọ́¡TÅïܽÇ₫Í#<¨-üß>¤¥âSÀèƯf»M“÷ÓØ·z\nĐv'>Hdđ_û;8̣s7ŒÎè–Ç~1µ½XÓáÈ8<àIṇ́!S7›¬zH÷[^é]#Æ&í¶Éh[Ă­W„öwêÈ|Ăæ•aÚÍ#ÎøL“Ư—{èî÷Éx¢.̃“ñÔMC”KÄü,±w®3DK–Iăo aG×·t¶ÎUg…’»µ£¬£\¿Ó\å€wªëÑöØ»å1¤s5uœp4Îщ"²8º¾a*‘)½;éÎ₫ª‘\‰ªđrx®f³ÆåaÔ²o–B\€6ÊDƒ̉Zøí ’%̉¡['Áùf¼Y$̉ ₫Ơ¢‰­q§€ăÎn*ØôÇă|{a$FyÁ¦¾¨#yNjY-ÔƼZrijđ`Ø!5bBđú&] {^&f69‹QŒ̃Ë—T… ÀƠƠ[÷¾[vî±±'c`ùi¨û‹—±­ÁVL gE0è¿`ÏĂ×d÷°"¨¶0ŒqÄÎÈø(3ă*¿ƒWÎ8̣dt–ÂÅ™¬= ¤°)h@Ç–ù ·5Œ 9ë£*ê~jt²l¹7u#8lk }³ưä—ƠNŸœ¾œñ̃2•\?¢̀ä™Ị́1Å{„3²gíA†øB‚çù‚€¿ô.²Q¬ ÿG?92Cr]áZü¼H:¡wDI!™ô·J;îáM2Hä/qq65†O 6À×î‡)£\Ü ¨âY‹é³#ư@M€“cŒØp‚úN‹yeúœfEï¼¾2 ̃₫ọr—´ZÄ:/÷lơj[Ï|Ă6X‚vœà¸Îâ¸2ä,©ÓÀèx[øe¿(æÅ€›đÔđ>*Ă»Yd₫ m8\舶„f8ÙœlëZ¯p7Èeæ] ´bßW%?̉ÙɼhpW†d4A`(°;́ ¡±` 4æ:Gă)º‰À?ƯŒx×»JdÔï¢gFb“›v'³¢äsó]órÇ–¡ BŸY¸@¸ƒs$2Ø…Èà>>üJÆfâÎ,"Đa†í,ø¯QvÑ@Çûưœ–©íêf:¬Ú^ÖRPd`^ÖoêFÛ–áÄè'o¨¢QRÁjdz«¤¡ >“aƯLÆÆœÂ:âpÅ/‚:8@¡ÖØQ¨Àk1X—¸9¾Ϫ¿X 5N÷ÜŸ0p¾g…LÓ̀½ƠÓ¸W‡hjĐ,‘ú³È!CÆ€jOæÛŸ\7ƯÆ“èŒhjXd8ï¢q¼Ù>lVơ,“”à‰ïø›‘ư{\¦¢¨,ÄLö ÂmwË#,rtåøñuö>÷ˆiÅ^™¦Lă"ë_˜Xø+”ioyiÎ6ˆveWĐa-©Äâ@Ăóí{=ëEI4Ḳ́'HÛ:₫>Ÿ­DIÈóu`Ç+Ù“̀ Lxd̀<̣çL©Mƒ×&ÚúaIs ^ñü₫˜®\ K{u‡îơv=ØF_W®¬B` ÁÙ;Ṇ̃ĐB³jÖp‹­¤¥¨÷mtÆ–l“ÂJb?\Æ‘yăǼÜCûéê(hù¤g#₫ c̉ê ^1uưu²Ób¯À5ú8̣Œ‰¨•>Yƒ–£°ËA»a³e‘1±²ĐúvÍ´ºƒRYˆ`„FM1ÿµ¢Á@Ä0%hó‰Àđer!²4Ó¶9`X§Đí2‹÷ÙR±ûæ–…›TÆHçÍE––÷+¢Ÿ¨“ZV¾?PơJ̉r!»!Í]P_ €Á°œçúâÀBèüÅ”¨¥^çc™Øay‘Vÿ·@0טrJMƒ¼̣u 0sà~ˆưrÎiÖơƯƼ'ÉÜH¹•7ÜÍáÙÜé#ø_&!ɉƠ~ií°ïƯg%&RC}$ëÍóñªƒA¹âx˜&×Hï̀@ÍøÑ̃WÛÄaëØG1ó..x!´5º–ˆ^±¹7_éä»”' ÊQÚ™µ“ŒoÖâEóoœI*m'm»a¼2üóa '^5ä%h²Ñê»ÇÜYH)d¤’*$%óă@¾¯’/+Ük#lt¦y¥8IơƯÚ¹£(_®|¾¥s5jç«Q+ẃkSù>•$ơOiœ́ÙJàWÄơÎXBm.ùä ±~å¸í- íA¨²Ô§sä—Nµ/sµ—¨Áḳ£DœƠ¼ß Sóvó×̃FÈ̉åû8Í1°qưt:s‡êÈ à_ĐË ù¨%NH.é̀(æ¬̣fpMƱTH:Xä\7 ¾È’c-VlX¢Æ"œoG;0\§™đZ°n.ÎzÆs°ä V82¤—/ëvû­u±1R6#-Üca‡¢Éâ“ó«Q=5ZFâg?IÍŒ',¤]9áưz Ư(¿ôÇBôZnăèUüw †Ûe$>J‰/˜ÿùH¶Â“’“ ƶùÉÖäz1À3lù̀ ¬|X,R.ƒñr~˜\¯ £j®jæ®jÁ¥äÂ₫̃ù@‡-#è³XÆ[éƯ 4g€ÎYÏfẂIùˆRÎO¡Y°»8ĐxFañæäÍdzô¤™&OëY£Ä ¥t¸ª¤Ẹ̀¸ÈP±3đâàÅ•Qî1_qe¹1åï\I‘ªØÜ¤…'-ùE£œ+•ÎÛV\Üoy¹‰Åp<_RQëS¥¢[Øøî ÑûSÓÖđ«ưŒhkTVÙ^NC µ‚wd́đ̣Ôpüm{'Jn’y ³#B:³”‚üơgĐkñA¼?‰´¼q̀Ey/m~øI½s¦ºHcMŒ^¶Ù66öđFÈqÏ[…Œ|˜æ\XÂü̉•îähG/Ä‘·Äb·÷9.‡%øÁ̉ ù—ƯƠ‹sLM̀Tµ§yü³ˆ]œƠøè‡ ÙtVcç9RQyÚ0DŒª')D«|E9(£åç|…&ÅZñ³¯ÊW´De‹ß'(ŸÓ©|QZP¹'±Pa;èË•JmßÖ\rD•—ó  FæÉ%CÁUẨk}ÊcUǯ?óĂ9/Ö ©¿SlÊ8ÓÀzé/’]Å₫jM®¢[ÅÅ+¨1HT ¦ƒR œŸ¥±Gñ›R>œ(¿·Qƒ"âm^HK£Ùj™dANMTGA*¾[́RĐªÔƠ¯mV.ưœ9,5˜«Â¤̃±¯kA‹Àµ‹ß̀uÀB‹ óRCèo"ø+¬ÿÁsA endstream endobj 506 0 obj << /Length 3232 /Filter /FlateDecode >> stream xÚZKsÛF¾ûW¨r T%)ÄÜ›’(¶dY%1ë¤6{APD…¸hIûë÷ëÇ $»\%N÷4zfº{ú5öÏføçŸ¥ÁY…WY˜»w3ƶÏg2x|ÿÎWºK^:”?.̃ưđKŸù³«ùlîŸ-Ö.«Åếß̃ơ~~d^Y¯ª×óË0 ½ëÈïûûßhyï˺ló­`ËmUÈø®*ʺ+ÁÀŸ§3/Îÿ³øç»›…ƯPÄWq~ăî ơW0¯œ#¹Å‘Û‰|oŸ÷e}Ăôϼ­ÙMVü₫é‡Ñªê¶ÚUũ7í¹ï½}§4kưU«Fd£ŸÖ mz%©‹ía¥¼_ª~sN8û⻢!é¦Âáâ^™ íøó9QµùsyA2„<.ưđÊ}9à¾m6Ơ²’of¯Vʸ|-Û¢êjÖºT+ˆJ?)(˜–­º\)qmØÑ×áÜ«›ụ́˜Ÿ!UĂw×´. fôÔ3¯­7¬…nt9I¿ÉI‚~́å̀ÀO¼N-°¨₫œùQ‘o·oBñÜæ¢Nú̃J‡zU¶2́7|:°PC¼:¿ŒẦûă< ½æ S»œX(ÇƠ,Ä¡bÇÂo‚Ë…†’êL[êª/„kÚ¿b;ÁoD„…&4Ƨ‹đQN? l³íu#„íAă€BƠâ¬ÏåÎÚ/!Ù¬„L¿ÚTíj‹•F¤äN‡µ™,å£å¡«ê²ÓiRaqú¶Zúª~:J׬y©úƒsÁÂ"?°˜'̃Ë7±0°ËÿbQ”bÛ¼éáœDBÂàßRé9 眓Àẽ•:ĂÖë~U¾ö#¶l˜ĂvÚ k̀‹¾ú\YAfbÍô;6’ £E”°0`FL¶S¯¯R‰̉¹+í§F‹ºZh ¾S¶l&˜ôщᔯÏ]V`D[^æ{mYĐ*«ÏF9 If₫İø Z·ÍNˆßøj`väzæß#PŒœ́›àFđà¡ü9‹g9₫øS§bß… —º,È‹œè‘™½[M›fåD<9h“̃¯Bl†ĂÉ"cr6¡Ri—tà7¦€ưăÑnvùJư5_˦+'ŒR>%A@“™øÜ8b₫Kƒ{H7o+ö–×B‹-†e†ß‘̀«̀@ÚixR×+HÆ® ̀f·¯¶9±êĂgB_*Â>çM„‘ 2ÑHb\@:׉ÀC½e7EăAÄÔz†+A4f.HM\‡ Q_–ÏáĐEc‹l,râHâÿtWClZ)o¨C؇v;A&đ‡¼-ˆx#`0›¥Wv…ä 1KV¸oàÈƠĐu`Áe¾‰rÀܹ·¥Û PÊpis <ÜùÁÜÚ\¿-_)_QæđÜU½]̉º^·ßV¥ú  ]„Z¢‹X³đ™ÁN–³*×´g 9d-`«zƯVăxÇ&ˆ‚6ß1˜Û §$Dµ”lAærqT1<0́r¹UYDZB×LWd³á(́ó%FÛ©›xb ä_D}È{¯üHu8—oüYH‚[{߈¶Ÿm[j¬I—Bï#ªû^€_(ciËrỚ„³ËXă–ܾŸJ&§7`É4üŒƆĐpˆ$ ]x"Äà‹—zÙ”ª" –&¶à‹q²tÓbÏ’QåÏØœ£,Ö5ŒvÄ1ÑÔ×|B›¯ªl‚¹æÊ4pE0É)˜’ëVz.âˆú&Äœ¨ă—ó;"„¹:ålOO€¸ßoXY/̃Ä1œdÓX-A8«(̣Ú Úx’r¶DdG:uä 9D#‚ºF~é*Ó—½Âüp·~S ÚÑG‡mŸ×esè¶o£mµ5lêƠ³zđS‹·Ùờf×¾ăwü™F`g¬̃xj6$¤.蛥]øÂäïe­L;ưṚaåe]è¢&Ç`ÀÉèEă_6µ!¿GÆU] cî†ÿ„cdR|ưØ%bº|ÍáùJNff’ê§™³ƒT¯ƒ0aWŸrHÚu’à¤YI‡@–jIJh¶Û²0;\ÛÈ)Ül5?œ8#ü`ykÜY?‰+Ó¨ƯgvȯMJY¢NÚcY¥ƒåkưöR¨apG’ÅĂLSo•X"¦ºrâ8fOΗGd¥§¦hÍ;LSuú ç-©IÆ‚OƠ4 '¦ Ô`ºi6Ê-ÏR9ªÛrƯJΤÚoƠ–œd¥FŒ47!gYz2wxhYTaC½;ˆ%lüÆ»ELĐ,mHlG-¤k¡Md›okÓœF–¹M;¸¾Ă‚܇d AWˆú(Íf´ƠƠÛ—ĂƠ~±“ö”Ëûç­8¢Y Æ´0¨´ S±Æ–Éqâ¹²kË¡EËàØJ6›!/ ™^Fâô‡0ɬT2j I.ëÛAxĐy¾ø¥¼íÍE͆¢•kiáÆ…·¤Û™v₫2\̃+úÈ©@æ!Z%ưÑWC› º:µ¶ Â$I\úis̀7Í1 Ä€ql€ĐÖ0eï.Æw'‰7múëlE*?dlHâ+ʶw„‰ÊÔK¹POª¤mÏZäâJjS¹́—XW Ê÷ …„‘=áà­ØS2Á\wJ ṭÛDEă#ơˆ%Ô{¡÷/ ƠrÙ”“$ÔÆó|‹¿cs ¢TÓnsVF&̃·»RÛ¸Ñ¸ơzÂÙD„€=)­ÛĐ-CÜ´Øca¢._dà8N0́A#íÖÑ€M…ă˜+ÖT7M³mê!U;ű†è—JŸY;¦OÛ¿Ă¼I"o’¦Tù~ê}¢üjàèÉ}Ưª­´ßj—̃hÓw¢µùÄerÖ%®-ÆÊ^Ur‘l;@°%:Ûq5Î]˜Uk rL®Ü‘¨•;E›"^¯R7®ÔƠ„nrăa"<|Œ"@”̀ÙåĐijö× –®¸¡˜‹xTLY€HüŸ8qͨÉÛÆ¡‚‰i(‚T“ Á»é\x'&'%â|ªă„l“í̉‰…Ù’15Úd -Ö`ns¿Dmv>Ø,”䉡8< ÷Id'߀6“ä´±y¡u¿ đådyÆñl†̀½¿8®~ƯäC #Í^®6×̣»FzΙËhÊ¥7Án¦E FÅ9`v,¸¾·ÑtmÄ^Ơ2›}AêÇgö¥'°KCÚ@…HĂ“ƠcÉk?´5Ư,Ó˜èéè%À¡±®‘ç•Ê­áSÛœ$¹¨Ă|SEạ̈ăX…µÜôH†B)f35®•ƒ™¦Ö™̉xÈ^ĂY4®[·ÏE ¹9ÖU©UÁWƠGMŨ+rtpiS8:¡ö̉ êi£ôª ¬f&Z·ë£WëL{êLäy&×'–\_u¤xƠG"¯¿Â‡üFzúF´>ô‡V§EvîÓ Ư„¢°Ë)¹jö”ECHÄØI2cƯV9…´‰¸ƒ;œ+‹†}ß)Â2EƯăR9/X™¦úøÍ‹¢Ü£„*tI‹—WùS/7j´»ÜtN¶ạ̈*̃¶ú_yÚmâ%âmLđ¸#~bykÛ®6–5ªR åN=Í;¯6±ï¾©0kNSĂ8p¢4¨‡‡¦ØéÈ„evR©K‹}Û5VycÂJ å"Y 9(đׯ&næZ‘jăDîÍz´`5iEf½º ư*Bø b0n´FªUy§“f¬4%hGÿ!€¤bßÈezÓlW¥’r›/á^Ryé–Ö‚sz‰ä‚q‡ HÖxFîBr"A›0!fb.ăß4¹cÍÍÆ#ß6G†Ù“ñO”.󌜒¥Ô»Û‹_ooäÑóö‰~cï₫£ÀŸÎ}4ú®¯ïêâúñQ|*<<2úưăơ}?]|‘$̃Íï‹›û…’ß<~¸]LÚÁâægĐD‘÷#-¡bx¸»ưéúÇ»Áß]ó¦>]ÉôÍï´̣O7 ™₫ôëͽ̀|¤ƒ íí“~ü´ ×|ṂĐ…bïö^¿|Ô-Ñ£ù?ọƒ‹ endstream endobj 511 0 obj << /Length 2820 /Filter /FlateDecode >> stream xÚµY[oêH~?¿"'#%¾p;óDÀI¼C€±!Ùhgh‚µÆF¶ 'ÿ~êÖÆŸƯY­V‘âêêêêªêª¯ËƺjĂŸuƠ³¯z}Ḉ;½«Ơî[›¸ùûÁĂ7Kän@đ¦&y·øv{ßé\YmsĐXW‹M]Ơb}ơc¸ß·ń¾¡̉uü£uă81üÎχé ×xP©Ê£„¹óĂ[¯˜Ä+• Xƒ^Û°Ö?ûæ-*ƒ:vḈ¸Î_´^KÿÙ?ºf»ă²₫ô j÷ŒÅ£ÇÄh6 ü‡Çg“±×²Œ äñp:¾LÏ`‘óVß5†A«ï ßÙyĐ‚ø̀đß³?ö.6’Ùô¼¸±ÓêXlÖC0|©¾müa9îơf?ü…™/₫âq¶\0÷¥eY6́ §‹WfÍîYn8Æo₫t|Í<Ï«‘₫û<đÂĐóüªÛ"zO|Vwz¯Ñd9†¨Éø¬b:bâ?ù ̉ƒÅLäØkTÀêx€¦[b:G­ÓEă"̣äQ¸F Q̃ùưµ»m<&îưÅ’Å7|Xçç4ZN†2=_óYè™<"k‘đÀ®Àk²'đĂßZ7n, ù¹˜É³uc¨¿/‡l&I¢™H̀½@Œ{NG"‡Fëy­«„sg|Ù ¿á¤^gK±?„́˜Œ/|Au=­N3tz̀Ø»÷F ÿÙ»æ1¨”đ…ạ́É;ÓhA©„ f5ŸÙp2ájŸz#8û+³B8O<üg$Ù̀À›ÓÙú©ĐFF³ @»fS“öÔ0-6ë¶8dë¦ ¦Lâ]\Feœ¥¬#Û°I½ÅPÈI\b>1XÛWe₫ƯíCRă³gxÏ̀ZN'”`ȼߗc¹{eîp>̃M<æO†äè Ï¢KÈbØO¯^ÈV°uC$_APeSơc\í¾Åơ¬há@+¸æÁ Ñ‹ÉJ^ ÉzEÈ́ËăŒơ?ÍÆđäßsµ'<@qΦÏ̃«LpÅ÷,ï1 ¨€ Æ dßÍPđÑö%î<~N| çהǨÙẈ´ăÔj¸c Ÿ8Ô^xÍÜ ÂxÇø̃Ô †‘ ç`†7̣+, đ™đÚ À”è@BÈ ÄtÚ_,aæ0Dî×`8GâŸrO¸Æ2‚¯€) ¾`–m°h¡áèRàziwÚµ€  A:Τ#§‚ồÙÆd†uà²ÅIJ$ s)áAêlœo8Í;pûPZSÈ`ÚFà1ÿh°ù¤h Fép̣₫T/§Ê„'eI}ƯâÑÆMc P_LnÛO,v ¯º¼üÉ2đDàg$ÜÖe¸- à%ä₫ɘ H§)ÊG̉F5ÚdÜIkçgQ±XRLù˜B¸–£Gæ0 0ÍƠÚ®º—uæî«¬à*µàPX-X6¦úôC¬ĐqĂùQê:rƒ!æÎ1GÀ;̀U¹¯ ×EP t(;zµi€yq̃ê Îû)Ê–*ßçª ïCµBfÁ\«ĂÏ(]ó4̃?P`÷:F¹Åö´×5Öq±J¢x§rÈ6̀?¢QGl ₫ûäÚE“ÚeT_àe”@hôeD³û …>pN±ä*JÓ¬d[ßc“ư’ŒZô´à_+QïØÛ=XưGÛr `bu¬¬²C^LÛ(IÄ™ư>ùdnÍ.GhơQo‰k;̀›¬Ñ*É JTś~Ä»¨T¸wüHåùVdÉ¡Tl,›Ä)g :”$[Xű|Vqu¾ "Å«,M9Íx|ŒË-Sœ<@̀ó́=v¨A×8¤‰*FPÜưYNÁL–ó3*Ăn¯÷tÅt÷«™.ăn¥1ÄƠ›¬²}]1)p´É®6™±lEvÈ…̃T¶đÊRTL·÷}ûÊrMÇíÚøº…ơÛ…ÿÓ¶å}ËĂØ̀$€ç€É¡ƒ t́c·êH9–9H¤³–ca® h™ÉZÎ-̉¸UøbIdkà˜§ç¯ȆåÑT‰.ñ»`WÎßñ´¦e÷O(̣‰q̀"~KDà@Áq:•¾jé̃ϯ›²“d\{ 7Gư8dkÂJñ­pf+Z4¹á$\§mĐ³&¾‹₫U“‹Eû&Wå‹lS2BPyˆÜqó6,${åÏT„VˆHä €¼̀ă7B2Nà+,²Ê(}×KÿÖˆ- ĂhVº¦ÓƠữ§^Ë1ÖôtÁ»X'ieb W*y:ñ"Úp:€¤^Ú`®®ÜÑÊayå¢r­!5ÔI“ƒ^̣•îWgN¶]VH:ë+'–¢ùp]ª‹ÄT?VÉ¡₫”óMXù«T®-²®§­«[Tl³C"R[ˆuT¿cIGÙän¢"öÀ9Ù‡ßh4¦æñû–̀ù……’8Ug69 Á_ϲX÷1¢Tuܪ\í rHJæÆ̉âl²Cºîö®úæ Ûu»́¾Ù''º=q‚¾™‰uHá¾ø„Bs¶BH~Ađ:s̉h'säüxËcµaºafÂ9̉ÅNṣ\gª“«f2½mº]y¡ÊöWY„ï,#l||ív²mXO ?U”_Z¬‰å{߈àß¶¥¢ ºjÑ?„ÉH…"Ơê;?ב Bâ†êÁ€X̃fbï.[ÇÈÊS·ƒáăÓ à¼U~qX%_wuO«9ú,K„₫,‹ưYéê³,Ù£=Fb«ä¤ß~fVµÏ}P¢!|̀Pꆯ™¡ _̉|¨œKÎO<ûd¹&Vpyf•¤Ưó$MMå„ûS */Œ¨@ư¿HÓ©JœâôÂøm¶¯Jë²q"Çñ&2pOC½‹§ ¶)âƠw`”¡G$^ä[đ¯Z5$úAöQể¬x·Obmô‘đ´ü¬âÿ5¢đ%–¾ÂV_`ëGQ}€¥¾j’i’iĂ úèJă꣫'olª!aÜ₫ké»9Ơ’NÀ5¼)ÆIÑx¼¯ºRơÅ@Gi4̀ƠJ4£€₫çÿ\k_#%̃üúđ´æ‹ôÓaóek¸$[ ¥.N±{€ÿ̃•íùÀrèç³sf{ÿ,›~W9çÔ`Ñëoj è–3è¼Ü…¼Ù–å₫ûííñx4ßÓƒ™åï· »^Ü^éZ–éö­33₫«–₫÷F]ê$£̀¦&®Ñ(¬5säÈäâ^K¿§ˆÍY¾«¾;@W"ß¶º…;µ=¾(̉-­¤wøÄnƒ{~•߯VØûá—"VeaûÉ?›Ơzˆ}$?¾IÛ°ƒ¼nlEéMŕĄ³x!wI?ÏsxyÄ)ư^ç€qg­³·̃ª“LÉ+`ö‡’y? r™­Ú[Óú®d5̣¡áI™‹j=_–ăTÍÑçQ³ôÔĂAXØ¿5\Ç¥/̉±ùÚ8=³Ûéë¾âÿÜ`Eü KBp endstream endobj 518 0 obj << /Length 1322 /Filter /FlateDecode >> stream xÚ•VmoÛ8 ₫̃_́K v,[~Û>µÀV́P¬E/Å¡¸0×Qa¶eÈ ²üû‘¢â8/‡Û!@,R$Å‡â‹Ø$„›dÑ$Ëă ³IƠ\…–«WZ<ß_1'烠?’¼›_;$É„…Al2_MÍ“¿½Û®›úQî‰v!Nư8½Ûô½ÿö‚ îƯ‹Vè²&îÓæ½–­d%Ú^€Vd¡ñé?ó?®>χ’( ÿ¦÷{é31›äA‘¦°0 rÀ‘a Ä|-û)ª{V+]6DTª¿•fM«Û»?^æŸ^‰₫öHß¿nŸŸo¿Í_?¹T aJY;3f× Z}ï§̀[«­3 t€áC¬yÊNưÚ—Z8½Zm©Å ‘e» ÅNmG;É­¨‰ó@ÑW‹…́–ïăv¤9r<Ø´ á€TB’v¸o#UÛ:G6Àª®/Ă‚=Í,È"¸Ÿ¥®Lrνơ2l‡‰–yʬ…‘¦n²°÷HÅ̃wg8f< ²<dÖ*¹‡é·½äF$¹¾&»6ºxÜÅâ8ˆY|n¿úMûu6ơb ñ–(Ca/:HÏNË̉8FWjÓ“Z …ñưˆÇAÊh°Ä%ÔP‰.ă Ntň¤+Æ`êg,÷Ñ^„ñƯ蓌s¸ô ´åjåº'ưÑMÀf#Wpk™gˆ|§&AÄB¾…,Z´$Áf™‹-KG¯à¯X?`²U˜ôx@áå:ki•!¾{œèFÚ‘m¥´›$̉§]T«@ Ï´áz¶ Ăƒd=¯§ÎO •¿b~gÅØ:Pëyh';2Kúô›w I¶‚¶kù®m]p,V́‡.ÛMIµlua(÷̉ÎkkØ·QøÀ4Á妦] }èBYÔ²ưA1J#è–E£Ø¾€“†î„{T,)!€ ;w¹ÀX)é4í8Ûuiheû¤lÄIË‚E; …IS×ăqÇ [˜K@=@¯±QJ̣Q–%£,ƒám¤€ëo†ZàYZ’ˆC’d£AÀ ½³ÓØ0ó¸îu†g-J²Á[ Œe\iœL’”iRüïæ±×÷G.4Óc.5W´iFGÙm¥[ËZơª[ïfÛơ·ÊóëUWkÓÔg1IàñÏú„çÅt½´?¿ĐiN: ư &ÖIh endstream endobj 605 0 obj << /Length 3654 /Filter /FlateDecode >> stream xÚíÍs»Àïü{´;}ÍGn.†üñú™pí–ĐpIZ₫rö́O¯ŒYˆ²hËV,Î.Fè¢Rz”wv±øû‰4§ÿ<û˳_ÏFIFÂh•¨[ènäBÔ…F[ƯöcȪ(íOVíïÛ‹î?VóĐPJW̉6\–…®@®ª U mŸíä¢)ÚªêŹFt—íĐjơát)Û“ëƯ­KKU”Öâ¾áŸO—¢Ă_ṛ“øñÿ=ơöX‘.jmU­ ј ÄÂRBöĐLCéÁç—D@O ö¾’>ơ¡)m¡Œ˜Âc‹­Oi¬EaT»¨”*Z)Í¿Dq®Ñêf}~ºTZ¼¿Y}́́?åÉ»¯§²9év_×Ư·CJ[Qèº~\˜r¼ˆ¦ĐÀB>/^Ï‹k3ôs,/Ä”^öy1u]T•ëa_¤đr¾¹¾é—(*ÑÎ=×Ăơ\¦’…0u>‰DK"¶‰÷\Ô”ca¸5F@Çæè?¿₫| ƒă÷ç¶ÿ¹ ŒJB™´Ä"|@îƒ>¿;LĂóK" ÓTI)ÁökÔ–"-Mº,dYMiÚ­?~ê đÔM3§\?|€ɹ;$/€‰ÆT$bK HÍ$ÙR9vƯê64êU0oĐ3<Ç<À wƒûóG»ñy~°#æÇ:oG SS­ÁœKCăs®—)9×Ewùr}è»Ê¢©ƠŒ_Ö wºÖ…>&Í"X̣°M·–C’À^L1ôgºR…ÆÑˆz½û$Jy4¼_¢œăó‰̣x¢hty¢ˆ))DE[¢Œë«‘¨¿6ƠÉj&[ÈÿçœưØÄ ¡×³3."€Í¸&¡%˱%…§ˆfË“¶ä>N/ú̀ưËö_ëíÇC´ªº(Ÿ^Æ¡180ŸŒñy £̃,xµ– “ Vă=/»”³rcZTsw#Å95/€g…F. ±%…–ˆf‹‹h S7û¸¼Zo6‡¤h(Lé™”»ăăœœÀăC#Á‡Ø’‚OD³Å§lª”ølºÛs;}êvJ‚T—E O=8.œ÷̣¹đx.hˆ„`¹ ¶¤pÑ \¨J$Éu7Ư60}R…ªçîä¸Ú4º:""€…hO¡8ˆ¨- Å4[ˆª¨ 2´ynkÓ¡5(+Öb®ëÜkÆă|ŸƠø<Ï /¿ÜA I!jª6XPT¶ 4n ü5¥ Øm/^v—Ạ́ªfđîµü£”€*m“_₫!Ø̣¶éăÖ°èSRØÛS„O¶V₫ơ¯’6@½²9Ơ—íùíúz;́<ù£»́vƯö<0™«Û^ÀăG’ÁG ‘Uîqø,>ئ÷1;RSđÙWƶÏ5Ú^§ô]»ÛØÀÙVó.”{8¥”…RGT•ˆvèÄ6?;©-)F4C:+Đ®±²•ÆÖV_¬Ü\/PoÔ°@̣ÔS|®«r₫̀謁¾«¢AcWm©)) D[PJÈ‹ßÿ¼¸̃̃Ü®¶}/(?–E5¯Ê¦̀ôĐ¯ù]‹Àw-4xB³Ä[Rˆ‰hb´Ó8 îóvuƠƯØ®Y?ê¥ †ôU6DKÁ$ <Ô– b-6¦j„ ¶>*›¹Ç¸ŸơQçô|Æçy˜H\ù$1$¥©Ú`² º‹ Ïü–’,ÿf7>öS¬Mw*N†]ư›á7—ư ~{½]mÖ·ö¿¾öúĂY˜æ±,‘0‰‹€0¤ 3³I!XR&c{jJ)1ÅH ́ÿ*UCIa&^pøµœ§đ±‰†̉¹4Ÿ/€ç…Æç…˜’ÂKD1̣RA)G›}^°w Ü(›'{pçÉè¶́É8ÀNÆ'±9<Đ3BAlI"¢¡0°ÉO-PüƠqV°ç”¹h•œœ ,Îù°x<,4fXˆ-)°D4#,°›^V”•›à-TJÍ£Í=%0ƒÇóÇ£ñy~8"Aeó\bG J¼V$IU₫r=@éÍúC¿¨Û…çÛóMBwŸn£óáñxzh kbJ ?Žˆ¶öÉLxn‡+9¯†fîÇçëüAÍ à5ĐÈ FlI!)¢I‚=aăơ0@̉ûíf}¥¿@Gd`NÖΗµD;çÍüNÇ à;2~̀"¦¤ QŒ¨”nDôk ïoºƯY‹âç₫̃êđÜ»œÏ«ÆsfçƠüîÅ à»:~µ“Ú’ÂLD³cF·Ă60d&¶ÓYÏ«ă÷3 C§g#E°HM"{¸×!¡¶$ ÓŒHÁ-ưu©÷‘úámP̣ ] Î…ù€x< 4N@ˆ-)€D4# ö>|!ö‰Ư ƠÀ0ƠÎ5 +Λù¬x<+4dVˆ-)¬D4#+p¹Í>+́¥Pz~ ÇƯStr>B^d!bK B͈́́kI]0ưb¨ÖTO~}½—φÀ³ACaƒØ’ÂFD3²§×=̀Nc8y1w.¹)ót>G^Ï '¿_Ú’ÂQD3r÷ïÔú£›à è<å¾{G4¸8ŸŸñyE¾ÆG I‡W‹́@ÙHh’âpÔUr.îY+F_çSäđÑ€̣ÅjK HÍHR 7dƒ¯¿ƒ{ 6;ÛîŒÂâäÂ)¾^]§áp´°y¤ơ@¦"Œ>Ë®lEx>½!¦¤±§8xXTƠ,›»*Đ›”Ă¢o86”}IÁÜƯÏʹ²óuvD‹¶‰cGMIÀ.¦ØơCÊ&̃zäÉ.A|Ă» ‚‡Ø‡[ Úà-²hÛ)Ç„s[>^Ï ›!SSR˜ˆ(F&lm&H Wàµ2v¥l4Oâ~^Á{ùdŒÏó`±;%ˆ)XđZ‘ ›ĂÓ°èûŒåđ—;˹[ørº”Iôïsúi†+&ÅÏŸl>:q2?+¦¶¤7¢£kSÖJgD68t6_½ wfCu«Öàâ7Ê}üüo­Àm©ÙÍÔ””ØFclmöYËŒØBíßÚö%́VL·/àF>¸¦ög.–îăæÇ̉ àcI}Ê÷ÁÄ””XF»XÊ~U·±|½»₫_ÓĐF[a_Í₫ÿq̣‡‰9º%;æDó‰ïÙăÔ”„˜Çc̀aªW”gÄ6ĂBÈw«Ưw÷}&—B‡8¨D!ơC}‡¹Đ¹O—:/€u!ûu¥¦¤„.¢C×3×­Ế³¡[öKízÛ¹rĐd“X0„ÍưlTe² ü@ÙYÀfA¯ñU9jKJ¸"1\voK)rÂƠ_̣său8Ă…‹LÛŸtj̀EÚù"?̉^iêđĂCÇH[R"ÑŒ‘6°1¼l2"íŒÖ«›p¨íF¾Ÿ-Ô\Œ̣ćđ1¦®æ×j¨-)1̃Ó,©Jh]ăVđ·Ñ’ªcp{ν†jª­˜•ï'G·wksÄ|‹à}×&|ïăÈ1%…»ˆb́[àl~S@]¬o>‡ß¢ĐÎg‘ấ5ú?./€‡‹™‡‹˜’WD±ƒK´0Ï®„k½½¼Â¥æ;¯.ô6\D ×$È,\Ô”¸b.(̃Wu…pÁH8 'ëB·ó±ÜËù?./€‡‹Ù°pSRà(F¸*¸X¢Q®UèâYE°ù¨eöô £́¼’À£DCÊ£DLIA)¢Q‚SºE’¾íÖÁ„n ­ç÷ßkƠ9>ªñy)ÛEÊÛ‘B¯‚{<åˆ vNpá(ç ×r/\C?çäđÑ`̣SR(FˆàÍ!ª4ˆnÎmiéSwµ oç30q^œKóyñx^hÜx^ˆ))¼́)Ö§àÍđ>*·ø.eËß;X PKØ*Ú ƠÈơ°u4—ªç*́WG 5>΂5´ˆoéóF$@Å«t]Pï02ñøn»‡‰] ‘bà”9OJÈ©w³‰ñϳÈĐ²̀; ‰huÔØósøNík·¶8×÷×ó rï  D6`₫y0kv±ă°ÿÂ,̉ endstream endobj 437 0 obj << /Type /ObjStm /N 100 /First 882 /Length 1842 /Filter /FlateDecode >> stream xÚÍZßo7 ~÷_¡Ç~‘”†¢Àº¢Ă€ ÚØVô¡kƯ¦XI¶ÿư>™øœ‹QÛwöœî¤ûH~¤(‰ç’£ ®äæ"₫J‰.á¯äêRÅó’]nÙ5v¥n“£\peÇ]'œqK®†4+¥¹–€₫Ü*®\Ă³ơaDƒ=±¡A ‚£  ơåŒUtapi2+Ä.r*èŸ$ÜBƒ¡¡Qƒ6đfÓש¸^EW ¬"`‹ªT8¹”d0åÔf6¤̀¬¤F—¨é¼Åv3Y´Ñqí +5Uè©đÁx«U4$º Sg´ä³*†Z È· $ç¬ vY¹+‚.F‘ê2C:ŒÍ¢Â…ĐÀ¿gäÊyV*đ.pW#Eå5¢â…ôRá“Đ_ñ4Aƒ¢TgÖÁR`DiIư¦~-JcƠMM/êmV/ÁĐ ­|/è'8̣  0 Đ#4ôqCAÅĐÀ¸(mFp=p©Nª*đ•FyF9 ¦cà©Ơ@ × (gW‹ê‹©PơN ¨\t0»*à™²¸ZEŸTW[Ó'˜1ÔÙ£G³ù³åÙ•{ôÈÍŸ!J+&às4áY±¦h²¶ÆYB/^w`6Ü<×AtƯÑ9»»yüx6ÿíbùöÅâʽróß>só—‹/Wîơ ]ªÊ˯ç t¼ù°˜Í„Z‹³«K }}6¾¸\~ºx»¸́RB÷è×Å»o,¿¸W:†ù„@!¾¶×öæ¾B0)OƯ+Í1~üù<4¼áÎ>̃(s'/vö́ï“ÔçnMÅÁÖ—ơ%´™ô ëûVnx¹g̣Fˆô¼ßçë`.dÈå‚äb‹ưÓ¥o₫–¹s(4œé¬(ßw ăªê·Ç‘x¬‚ß—9{FẫÁư¸‹?¶ÄæÁ>ÈPÜËTnû€̉N>¸5Œ«ÇæaÊFDê$錆S˜h,e¼e›Ă°ñAÚ~œmRÓO‡Ó̉ÄĂÙMu,M»Íî[ĂJJ>`7M[öSdDÎF;9¶:́½Ú b‚øá!e,´Sü܆ŒSÅÏ6&‰Ÿ6äLÆrVwălsX.Ù×c§¦IV@IÎ$́Å™äÛœI܉³Ă†‘dSưf}.B‡°9ÿá́l ÄWƯy^Uº%¹ëŸÍŸ,/̃-.V˜áµ ~ qˆơ‚#)WE‡Y©zÆ“[wq/>ư}Ơáụ̈ñ́ uä½póߟÿ¼ú÷àäêêüûùüưå{¿¼ø0ÿN9é{e·%[xtúƯ8±Ư¸îPƠ8ôPï5Œ4̣`ch`LÍc)‡s°Ă”]e¬ơ>-hĂMK‹#-hé^-&­¶_̉jm`ߣ‹˜VGY ÅÉû´€‡”±Đ}ZăĐ‚vˆë¥O+¼û.}Ig,Ă1&¯U齿ü˜¢Ç7‰}V¾ÏŸ?ûgŸºƠïôăÛÅÙåậö2¨ÅèÑë[o‚ú0Å<ÎuàˆÈ#a °VÑ»k û;¦4a6ö!¾¢T^Bó„Ú(§î~RḮ  ÈơS'^HëùPƠwéîUçüäăẹ́ry~̣u₫ùäëC(đđôĂù©?¹ú÷tO ¥ûªáäDê)„u÷ÇV® l9,°{<ÁvĂ`‡Ă! fÛ𓩦ßvVW ̣tälW±kµëª¾B«̣k÷Mgu5¼lx6©ÉÎd'5ư³º}Ê bxÅđáY±ŸáĂ³Â7Ă+†gƠX"Ă#Ă³#‘á‘á‘áYyÈđÈđ¬DlxlxVZ!6<6<«‘‰ O Ïx$†'†gĂ³³‰á‰á‰áÙ6œªáUĂ«†g;[ª†W ¯í©^3¼fx¶+»;émLÈ­9°/pëj¤Ú|†;‹V*Œ»™È?-_.fâÙ6öÙ3˜¿™§nALÓˆÔÔÚ}7‘Ÿ»́u+–wéæêç&_,r¸Ûʘ&’™«ï~ p-³0tHwˤ‰¨M «ÔZd&B=fü  áKÏ™8ôz̃ầ6‘H^zÎD}Uz‘+_⫌׽øHªPa‹/ĂD2±‘Ú“YÄ ñ‘e¯ùÿFffè+3bĂ'=wbÇ…_ÛWf@á+¬çf‰›Í-ù N#37ñø=ÉZf@-˜̣Ư2óD2+²ûz=É-¡ü,GJ{«Ù‰AÆÚi0nqgFdˆ5³©fŸ·̀ΉˆM e½j¦¤¹₫¨¼â§V¨Ơ®§fÂy‰¾µj₫›nṢ endstream endobj 615 0 obj << /Length 966 /Filter /FlateDecode >> stream xÚí™MSÛ0†ïù:& ë[ê­…¦SN-dÚĂ!“˜Â41mp†̣ﻲåD₫1.=áaˆ-í®µO^­ÖÅđC¢Hi†5ShµÄùƠƯTüsñiBܸF̃È‹ÉÉ\DblbCĐâÆ7µX£«éçtü™]/ÎçKÆÁP~ƒJ{ụqq°.¨À‚³¡”£ñhÇŒKÇC°`Â’8¼pưÅz>™S¤±‘’Ûa1æŒ —Ũ_û́ưŒi–õ7œ nËGy7‹ˆ"ÅZùD¿÷†&ỘMuŒ $NÅ đÑy¾±€{86đ‹Đ<ñƠ+>åüÈ3à'¶î$OaÍX f‚Ub ³Wîô ßi€:M<}›i9]î<1xBnF^…§rƠóạ̈TI-¡!üXzđT÷ܪe’)̀•S©‹n-s*¼KÎ’›£ØŒØ½Ê„F₫9V\ I ³Ô `±˜yZX¬:ɳ¨ƒ(z¡ôA±Ă±•6P>³¯t¹M‚»%XJ=bÖ_ÁÜâW°£°‚ù ïˆ~,}°éđ Ø,”ÚU`sv·mAFa)èˆLđb@oÊơ¬7 ̃T’hBàø¡ô§Ë±ÇVùÂç&XLܘă9cdçY¹qk;Xmóƒbă§/\-yô!¦ê¶Z+1Đ!Ūç¾ËöZ J%†pÑ=$Ùé­ƯÉöéÏÓåjFơô6iB&˜'o²ÆúLBJ˜—=åüÈ3Đ ªî$_́%x¡ôé%t8f1ÔĐIˆ –ô ÖËư&›[5ºßm—-ơÔ톽½Í,D‡[Àát „éđ³¦Ă ¥̉L9Đ1¿ÛlZÎ]¶:1îPÿ2!@W™€Áty‚tU²¬Ctù¡ô «Ëqͦ‡Âëá)]5Ñ‚S¿“ÿ¯Đ> àR1œ³£0g~¾Ăœy¡ôá¬æ¸µn’ÂVFîp¸èS7-́˜m*8Öfl´²E$´\4Ô–zyC¼œylƠœ%9ÂåÅ̉®Ï¥ˆÙ’œ¹’<³Ä8׿öµƠµÊ‡R¿Ú¹ºÑnĂc3-Ñc>t‹(V̉î¤t9ùÚ⓪¼ Zq&ÙjƯÖUؾÅÑ|¶Đ/r«:Ô£0¨~ê:@ơbéjÍs« £°À}öä¸Üí–©=8föÓSËëxkdäÚKOˆưuư‹‚9b®«_ñfBs endstream endobj 631 0 obj << /Length1 1597 /Length2 8627 /Length3 0 /Length 9672 /Filter /FlateDecode >> stream xÚ¶T\Ù.‚;‡wwwînM 7 ÜƯ%8„@ Á%h°à\‚»»…GfæÎ̀½ÿ¿Ö{«×:}¾ª¯jïªưƠ^‡–RM“UẨÑ,ëècå`cH)Kr°ØÙ¹ØØÙ9Ñhiµ 0(ø/3­ØÅâè ø/‚” Øöd“6‡=ñ”nP€ƒWƒOÀÉÎ.đ¢£‹ @ÚÜb Pf(::€]Ñh¥¼\ Ö6°§e₫ó `18øX₫H؃] s€²9̀lÿ´"È ĐtAÀ0¯ÿJÁ lƒ9 læö®l.Ö¢Œ,̀ v»¸ƒ-¿ ¨˜Ûƒÿ¬Œ  eqưÓ®éhó0w Ṕàúáæ` v<-ĐTP¨:₫$+ưI`üƠÇßé₫₫âđG°9ähïdîàq°XA `€ª¬̀Æ0w°üM4‡º:>Å›»›C æO„?vn•P˜?øWy® ˆ̀•Íư]"đw§.Ë8XJ9ÚÛƒ`®h¿÷' qƒÚîüódí=|₫VK«ßEXº9µ În`é¿(O&´lÖ`€‡—v€=A6Àßéµ¼œÀ8ÿ0?Uàçăäè°z*́±?ư¡ù¸»ƒ07°ŸÏ¿ÿĐ88– `¶†8 ư“ưÉ ¶ú?¾ Ä`È₫¤=ûïßßoÆỌ²tt€zưCÿă|r* ềVü·OR̉ÑàĂÊË `åäap°?-Ï÷ôâ÷ßiỒ!mă_± V?wûÔ¦ÿ́Øư/0ü5Œ€ÿÎ¥âø¤Z0€á‘±ó°ƒÿÏRÿ#äÿOῳüßD₫¿’uƒBÿp3üáÿÿ¸Íí!P¯¿O¢uƒ= €²ăÓ8ü/UüçĐJ:B-ÿ×§3 kèßM„¸ÊB<Á–jÈæO­üi×₫=cPˆXÍṆ̃ûR°r°³ÿïi°@vO‡ë“ ÿpŸææ¿—”q9Z₫0N^€¹‹‹¹ÚÓ?!€ÇÓ$Z‚=ÿ0Èæà{ <ç°rtAû}¼| ÔoÓŸˆ”₫ñ±€²ÿ 'ŸÊ?HTưñs€#§œæÿ '&èoÄó”ä}*÷?–'9€àÁ'ôø¤U ă¿ 'èô/Ⱥ₫ ̣€°Á§Tîÿ@ΧT^Àÿj!ÈÍÅåéùCâOưư₫ăƒ=Á ´Ù)GPíç –ë* 2Öa‘ Ú Ư4FVŸY—V·[,ädÆOYË.—Éư8 k2 âs>{5È¡M‰êÍw¾÷¦ñcÍh3£„=#…{_¾‘£¾dƠßô}pöƠ °ƒo„kS¤}ḯÆ¥–wíÑ-çùåÛ‡ùÁ© ơÍO¼¯Ñï?Œ³FkG”L̉æYdÿ ¦B‚±’£0½8öļ¸œx‘;̣H¡ÏŒæ·ÍUäcđ“3ææ‡÷âG-N×vbrø‹ƒct>’Û)DÓ>¥ÅQË"Ó9|á±}sAƯ ?^ëP½Q#v *cÉôWjĂ£iÏơeº@u@#*:z/(>Á´¥rV‰•Ôư¥¦Ù/!oo¨É5ôà,™[;^µïj·1±od%F5Ï0êèp’' ´ü;¤‹„sr¬nIïøfáè…Æ`‚¹xª̉¶f=ơœ(?˪Í<‹'¯é«ïße)¹îá|äô ÉÂ07…Û‚6YJ6rÑ“#lÀ¯›uF.½:1~Ă'<=æ̉€+p³hR¦Óp˜ÂÁ«UY ,‚¾¸7Xµ×î =øÚàNüë2Rn×H0à©©!†ºœ‰ăÂʉq¥:_<ö&zƯM×Ñ}ñ |‹Ù̀ŸV°`xÍ65¹f¯Ujd2}î›eFGöNºpYv +A\%y¯̀è†+²î§°Bj•] Ûơ³[2–đƯœ¡Ÿ–Óú~”T+KåÎØôăà°2₫ç¹Gn^=èà&w/91ï|Oµ±í<¿5ơhG‡OéZÛ·YІ 3&d-¹.7¤kÊ;ÊÙ‰é ÄyD̉V—$M¬Xôöú”ÙºÔF¿jSw²JA>(W‚óMøúĦ9?¢ƒ{iK)úW*Ń# MÚª)Iîµ¼›¬>ÜHè"ƒºmwoÀˆ1+ôHz¶C$4{7ñí‰'ï‡1‹N¾äLU¹‡ï-³Û!ߨ„=7₫H’çf™bÙœ[ywß¼Ÿ­½¦©¸ œhÀPuxºâcœ̀9°6×mtªÎ.5´mâ®ôLÑè3RNSlz~+Yê;cØ1-<0µpêZúeuÔZe§j>÷¯"®ôî,7~l×ÔͲ·;¸́Ͻ³z7ú«Dwxá{aa₫Mv‡2­…½.fFW3*cî®Ûr{?D £Ó£&h¬ḍ6Nß²^%ûi 4Dt$ṛ́Â%Œ8*¡8R_ßN»S#ä…M¼ºT#²"œP$`ïf¦Í Ø” 7đ?³gY³1Íô½<£¡Ăz}NÑ!F®kơEw¡rœ̃-<6¾@Ơ*̉²htƒ8’3ßkÉ—ëfă|‡¥Q5Èë+d¬¶m­/—zm:x¹îb–¶Dd]̀ч̉a§.Ư•¶ Í¿rȶGḌ"täÀkH‘ûU(6'í n½ĐĂ#¹ûæ÷=Ç­×å(æTV<-yY7âØÎmƠGN ¡>a”1!œDr1M´S–Ă÷3 f½I{w¸“)½4̣е ³Ö0?PÇqÀ¬}w݃Réc-ă;FŸ#‡ÇưÎÂç6xæ¸Ù8&rüï¶P=++uquHoæT—-æ8Ä•0Ô3’Npx¥}JPe×·«ªûWhoœç@'VÖà†ˆb¤‘ŸƠ8Ï'à‘…×jóÁó¶ÓÔ}ó4;±M5¼:µ½?áKĆ´̣á0O¡=Ù4ÿé«­Ụ̀ë1œ÷ :—éq’ÍF w á–|êd¼ÆV‘{°úKû̉Êzºaá Ÿ́ï₫ÄLGVŸÁ ­Ơ~¯Ë\=áRÇY§çë í¯R>Öäm¹Đ¯.Äï%¨]×0CSĺv®¸Íbx^#nơS}×Ív©YœĐÔfJ„¿°ód$ö䓼Œº‚>6puk4oÜä²v¼đÚÛ.i—l~Ç‚3ÚêG’”:O a[¤6Æ7ĐåCóssÖNŒ²èV¿k[=¢œ™0ÉŸ©Ôø)UË+Êr¾‚Åäâ˳Ăw[½bCgÊ-•¯I¶ y´#û́Sjê1‰‚3ÉăîÉÉ{¾eMo1÷¶3$­;Në’rHa!¹Ư[RIw8ûyØ(€É:jÔ{Xy4S?—/üBLG~vx]̀m$^ûxv‘9q|ø®© #¤;M?tê­j{ÿà¡£… ¡+§d—d½} ̃[A!ƒôw wq„ CöơŸ¤‡ư$yktÇæÉÀ™g6Ö[—ú+®åÙ‹¢’ •ĐÛk€>ˆâƯé·øư]÷F̉[i;ở’]Đ•l´§;ăÙÄêG”©UM®lă›a.Êê½Y$3Ă@_æÛÀ7̉/µ´[ŒĂ/ṭ®R¬!̉¢?‘¨§ Óˆ—>ºæ¤e°>øÍ†}UOC²Á4Z턾yV ẽ¡iÑH¬œª̀ñ·#© Å[}³̃?7ơ©pưU`FÑû« 'nñ\埨ù[M;O¶¾WYJä„ÙtUMvÏ·«˜áYcị́đ»0úŒMиt ¡;­)+Ê@fỜ 2Qu>ô”O^Ư¦º±A8"ÏOo›S bçסÔơjŸª(*©eM¼×“æĐ!E Œ~/U °~í½êà -ÔC´àố² y®µ¯‚“¬¿8,ùî÷×Üưèô,¡éB¯É«}D¹Ø<±wí—+ ø™ăĂŒzÆq*[ï]÷«$vC¹䕬̣G,Ỷ˜vJæ€-Q.Â$ª÷¨ÚJ®+[ục¡ 9³qÓP…¶x¹œù›*j[úâBmµ.‚«^O“+)6ê+^m§½]3™—¦^_ơơ‘ +ÛÊ’nŒ¢~/Àû—\88·IbúÜB\l”€ˆ9iKX„ÿ”Ï?÷a¾ßvÆhë8¶o1Siÿ́˜R®œđcoQÁXÔ#50“tN.Ás¼@9¾¨Æ“xÁ”wHú=„Ăaä¨i]́F¸¥ày]ÏUß*u:Wô×GÁ2¹B‚ư”Îàv…Gâ;̉ƯPÊ©đS9!¦WîÍvâd L˜•Û=¨£¢zü½M%yäXà@ç.D”*VÑ¿˜¥x“›P@Wˆ!øh”åË{¾‘¨˜2;ÉÅ~1(³ÑđdzdøN±̉ô{r0±ơ¬¯öc¹h? æP£ àBK4>X’ÖGÓæ2xóKMo'CLègrí>—>ͯÂ6 …v(F…˜Ưe mgx@ôÆ̉Ơîlơm‹Ü>Jáûgz"„pæEơ³âרèïXđ~~+çb-5>]*¦s´¼‡₫4«2³Ê‘+˜pbÂ(D,}!O£#"Vh† ccf\i “–”¼uÎPĂynîß\ëúÚ¼đ[âÑͧØơo=|^í<¸Q Bªq ̣¸ /ë‘´â;áoI6´xJmáq̉±ÙQa aÏnñN39ăT^íóøÆˆZÏz$™)\%k9ic¯œÍYBéw9àŒ5"Ë'ƯÎ÷×Ñ%öE“‘Lñ\Îx—]Sƒ‹„ú x|]µ—¾#ÛÏW7ôæ€\¤ó)Ú¦8dP¿3́}¾]‡7Í(¼àŸ“8"G¥£n›ª§="%¿¹ï»•î+O2g̣HĐ.{H Ö3Ä$}ÛP¿B£S÷yĐÉĐ@>¼LYiØ”Óú´Œaö.ôƯf«Â¤Ó¢¦evƠ£OTô±Ê‰ÀË8T† »¯$Px‡fg«â¤ß)¸x˜æPj+%îĐXÔù")¡¬Lö́Ùâ»›»Â†¡-áß@Hñ躧óÏbd’+Yå¨Ư·cØi¬$áÉ98oœÇ\HÎëz®]áË7VjFH7ÆÖkÛŒBV9k¨‚Đ2¿¨¸6¥ÛÂƠ³¦ơ8‰1¿O”:«j;£4 0RCüº~µđé1¿ơ.’è,'nhÔ÷¨°_× _Ͳ.@|  ›Œ̉† ¾ÂL¼éĂC‚¿¢ø®²\“•@ƒ½¯¬_Ó.» œÂü%ÎøŒâJ9Œ|¬!èP¶EĂ>‰œê7A=LÅ*£Â:÷¶m–ôƠÊ•¡&´è²¼ 9z£ÄøÎ["d7Qاm7ëäê’óâ¼đ»×€¦'RvD4k«øịƯ$Ç¡ơ[mûʇ†kuôƠT\iŒgú¢³@ÉGzÊ 8®ÅôÙù–› /üBËfµ=f¢y~? F›‹z^‘zđm\9ç°|̉?lpIlîeA߸(ó=&!̣áÛî¤ÖÊM°³MÍ owÜûB(}ÎØƠƠq©=]B†¼˜nKr³ç/­ö'CnQ´̣E ¼×đ‡«-iđ@KÆøÿ%d‚·c`eà×áà‡—‰æ–Ú·̃ 9Zđ-ß¼¯o £w¾?èÔpû§́J̉ÅÖ"G‘Û0î§)KáṃºÙ 5́ƠÉÔ0¹ei‚rŒ¦ùeîßGRù cN.˜ëGuIÛnÆ₫o¼XKª+r8™n;º¦­_èSdÎÄ=²¸d=/£©YµÊ>‘éÙF“ffäŒ₫HmK“4'—߯¹â;沉SÇ «¸' ƒ×—̃1lĐ_p'siÜÉĐÔSn”YjH₫  ̀êD ç†{âK9…é)ê…)^ÜMl…*Ĩ¼‰a=¤d/¿ÄœB ¢R¼¸lA:Ỷ“ê‡s@i,º×á/ºVè{M%4njFe3±yqñđŒđë§Ơ82],7Yƒ<~GÏÆ"Ê0=•LjăÉåZ†|,(ÏßĂÈ®ÛØ÷Á)§„JF™™Ơ?ñúoX±èJûX¶6«BÑ?fñ2u1†!Àcp¤©âVMîDD&/ÜØú´ûR\©c×£æß^¾º2tîXw̃?Ă%ÈJÍ̃U?́«éU"¸G¡fùvÜR@ÄÂT4؈²r@ÑN̉$»’D¥3[èvb¡RXê/ÅZ÷IP¿kijƯ‹ZÙ`Ë©¹3wf-­Oh¯ÎAbå”ơLÄm†ÑË:5Ă·¥ÂC¿„Ë£ù~Éj5#Ï`̉?äO*Ñ%¦Ë¦7œsóx±%»µ›£}OOF<Ï&+˰fq˜O¥¡V‘¦7ÂpÚ! ̀1FC„O~_èü5€2ôYT,¢2\ÂŒ¿m%:f»̃́“,së-Zˆ·)e‚₫Ñ”đ XƠ ÛPH"¬iØ=Qr¥VÜ@$´`{‚o»§Ö~W‰(t×g-+8 #Œîô‹ëK”©¦Ó븙÷ù¯†~aøcŒ¬Æ…|$}Íäë¡Ó!Æ–2/dÚĶ$zĐ¿¬=¿ÄbÊ“dVÔ(Đâ₫¡+ÎÍđÜ₫#·át -tgªó¼V/³wï7h4ísXœÍ’’ö>¿Yl!¿‹¿ẓA®Êq=‚̀Rä{å¯-X ÈÑñ¡̃'ú^ç΢A¬ûq=‹I6/g[¬Lâä*C€_9 rVÎFU-y;{¹ï¨œ»Ä»Âø§tƠ€JJÉa²­¿Bsâ-NMäº Â—ehßÑ“Ë˰f£v~A¸KØƠñû2cUYPW d6¶QÖ!gRP-ŸE`ÑD¦r¤sâÀYw±üyƒuX±WơzÖ*²E¾‡…«%a¿‰¿¨7‚¯Í7åê“yO‚ŸUzº9pKp¹‚©#3ÏvägáS;₫,«íf|‘ ÷ƈϬ–è(42:Î…ÇO.Ôê[ƯóqG5»ó́¶¾¸ăưË]ÎSDg»wƒ#ă1c̃"‘¼§Qaơ„|3ó†âäá•W¿„ ~ /–3“§MÊ-g¤́²Æœ–¨Ü K‰9“]^{NNY^Í'{΅IÇî+Î ̉Û".˘; DÀSRE:¢Ñb1h“Ñ€³tỢ^Ç1ă=©?ồ×ç̃ơ˜ ¾1/¡(ºÈï¶©‰FùJâ†đ ưd˜7îb :«QfĐŨÄÑFô¸;Y2/ôÄKvºeuĂwÛTÉÛcº¥ŸÊYxáKrb|v`—hÄC‚{)zSoÛVk¥ơñ«ÿ³øç³´&H×o*w*¥¬ư„ {Û%·©ÇÏê5¦ƯNÔ6uỊ̂Ăçư™0R!"nÈ!¯oÇưPáù`!´…+d}>ÖˆC"ö̃óN(úBt{ïùFjµĐ£Ô‘‘HÑ,£Đ!<Ưî|¯>ˆ9Vo¨^ƒr "#2¦[m±¯l-XÈ*̉^½kƸ$'ß̃jʉ“.ÙC,- ỡ¸,²æd«3Fö "!~=óŸNÚ’R£FR ÅFÏ ₫´aslˆú&—P°ÏûN}ˆŸñ8F¯̣ Ơ t“B%Δ¢Y¯•á­¤L±{mµz*¾n[úøŒƠđ¾ëñ>F.wQ]ŒW± G.±ßW̉ Ơï³ó•yàSFñ•ƒ§oüêkX—¥ew¿~6bÎó@ÉEį¡§í'Dµ“C‹ Äu ƒç?kl^"rEêÏ¿f³$Ö HûUĐĐ5 ƒ%%ÙK˜0¶UƯ/pó‡đΠ̃₫ÓV1ß $9̃Ou:Ç•”Of¨O²®#7Âö0WøÖtü¸qnøtÓï›ø?7ó’—êfë,ú­ÎóGÚ¿à(†0 ¹¥̉®ó¶„ư=#Ü÷¾Í.đbçi“đk'È#-¯Rœ·b@nL è­ u»¥Ư`"«—€­R)N±ó £ˆzgSÊLù™‰·umæEVÁẉ’:ó7ô ÔƠÈ­OÜE¹­ó9¯ĐpRÂû›l²$ÙÀev V T/ÆkEh'‰ÔÈ8Å<`Å¨Đ…?ˈ² Y!·`œ >ÀƯÈv‚—/¢²Ø r›eă[ư¶{»«PtiT@뛼đ,C£H˜"~¡g¹H/â3nÏ·ơàÚeër’q̃²Bsz¶!n)¼ç<¶_{dôRu~øÄ¸I7e_¶ÇK‰ª|+0à;~n0ÓØ5=¸ªœ̃Ÿÿ£Qª9ÿe³đuITÑx$WϪ“àW¹‰ÔŒ±\iñÉYÙũ«Ê/ô :=!C± ¬­$'~ø RY–F°r‹º Fu¨ÍƠ¬~¾&ˆ;…@Bfµó.e®‡>ÎḶ;×5Đì½ơă-”R₫sÛêÊ­p>–Ûl¢?PËV~ö-> r0ë¤_Ok†sO:h´˜Ä̉‡¯ƠÛ¼µ¬ƒ±×äæi6QëÉzQ¢†prM܆‹µÎ]J´e­tĐäöT·Ÿ§r-˜̉y«GØb¡”‰ €¯Á·a§Ơ?Û†•ˆ̀FMÓI7bT©°çưØë2÷5-uçXûĤèưœñ`˜á,Ç·ơîsÆtÊNÏGïc–`»8WíŒÑ_!µƠ"loW¹¥U„qa˜äxâu”?óXF1ḿă¼’ñó́ơb!zđEPĐrâ4 ÊAnơơ ôî,«Ø‰†©\NœÁ̃@röwÇûu ̀|ü¥Í°I´U9Ÿ5®í8¦4Î6&•µ(ͲyŸ²o»ö$Ơ¯™ËûûWѺD<ÎK©ó¬Ó˜T¥Ññ ¤PZ|̣püŸuækQ|k¦9®Ú¾ ‘6‰¾êMfîU\„¯©rKvbăˆTøÅ$)f퉿iûèÏ׬·|₫ưĂĂ/¡îë ´†®"³~mÿÍœP«ÅĂbQÎđ®n¯ë8)‚“RßPàZ‘ÿæDƠKUNô•3A²d·*K:dïx¡A¦ Ç iwàö4NǪŒ*6V7±tăëø}à ̣í+ÿ4(hŸC—yxÙ5ۘ ½¬F•Ÿ´Ÿæ+w¯»0£̉Qª’æ§âØEª I†oÔ(ßûơÊP¯¹&s9Y`£­m32‡wlǻÈ₫fÔQ5›-2ỷƒPDÀ°P± § st]­¼Cvˆ„2‘„/<̣Yû/V)́ÄÊoÈ̃6|fö„om—&x‹æL«8đzÇ›Of÷R{TFÅ%äq¥ǽÚßëï¼²|ˆÛeư)¨©Ù›9P̣ÇÜO³"Í©ùüÁCGD'3÷) ’ø‚ùœÄZDT±iCjL ÇE#Øư“ä1¦—¬Hr‘søáà́ "ow|‹-.₫,û\ä‡iz/EY©Ó¶»zä»Û B»©)d)S€̀Äñ‰·F÷?ÔpÆÛ^ÿœêÁ÷·blôöäPÿJ̀Vb¨m!ß}Ù#Ç»‚µĐy¸ÿ)n¼à'µêø·ÈA†‰=£âز¦†ĂB>TU•GĂjëD~}Üch7‰¢±ưM?aè’ByæÉ¹̃ ĐÎ¥Ó *†âU¥€)b0Û}¹c÷’ÊÈ4ô{é]½ö½»C¼è‹µQ|Q~ăߢ̃ÀvX p› T¾œḥ`ÓOQ`£6aC" ơÆ9Âl[oºu‡o}µ„:ø‘>¯d¶VˆḶ­;—«e¡ [/íP¹ONĂDä«|½&Ö}5M7Om"p™ÙúZ]Ëx‚́‹#öQÎ ô“­…XÂ’/‡ß4…ëºIŸ̀V̀ÏÙñËân +ǹ´‘Œ×JÆ¢ƒ¢bĂóñ&<ƒbˬ7M–M‡?ÇC©ĐÛ́"ûêÛÅ 8+ûy¹ñƯưóƠ®XÚç¡j₫́¨ºÖ#ïÜ<§G· E˜”¯¡” ¬ùYŒùȯ%ễăñ3ÔY]lQ »£p t½âV1ÆÏ}˜‘vŸ5¸y2¢%+ơTcc3đª‰+Æ(®èDÜ|ÎåŸHyñé™yÜÉƠe®ö€K%,ç̣ṕ˜XV罄\°}0ÂW\>¹„'чÆD–gơ^BÑJkÔ2˜ç˜< Å 6í|$·J¥Èlù«Û!»°%8Ư‹‡fơ®`ƪú+ˆuYæ}X€‚êTHj†ŒÊ÷ÜÍG@î̃áœÜ7æËX‘Q. ¨Á®A‚…ă% Ï×4öe¦ëf¯É́·mÉ‚"W 5ßÏÇçD0R»Á<Ü4w3ë|„oö“Ⱥîk¨üuS,8pI—ƱÆRv’óÚ£œWDm5®mà¹*íXqºkVÔ%¦IJ²¾—‹%'ế‹ù‚[o ưç<ߢèÚx¢ >WWÇVE\Wilj ơ¼\nÆ̉œH:{&¿*íU-BcÏpíe•GÛ ^h A÷È$“1Œe#k¯eܤKỐ”Ï“¨¿ß¢) E{đå1ß‹0P[ûú”›¼Ÿ‰=éxCMëÓ*wkbú¾¹Ñ‘Ô|̀<¶çh¨oz©ÛifÛ0ëñi–Áå/Êäl^åö‡₫3. •gRÅ)‘é›lñ•1ëbÑÈÓăjƯÉELu5QG©Xd½æù°ăWxùdứü _˜zÜúªb0Ú…(ăvåâḮe³‡¼‘f§Đù²Ü 2.«>3ÎÔÔªư)«9ÍEÆÀ‰“Ä¥Ë;æ…vÄƯ²³€t¯ô­ÙTàs…©₫¡m–‚œQ’ư×ohÇîè6c— OèăơK¤8«WÚvUÊK„b9¤5û¾Ơ7ïïXqW&\ ~̣ÂÎø¯êùYù>"̉£ïÊt»e5¼À¡’(GÆhú~x÷ïÔh¦¶Đ2RÆíU=Å.Ị̂JÅ:ñÂÚ÷Ç¥À¤7ă]á8ÿ%Ôƒ endstream endobj 633 0 obj << /Length1 2273 /Length2 17065 /Length3 0 /Length 18398 /Filter /FlateDecode >> stream xÚŒúPêÖ ޏÜ nÅƯƯƯàîÅƯƯ)î.Å‹»++Źܹ}¤û|ÿ?sïd†äY₫¬w­7BA¢¨Â djol&nra`fdâˆÈ k2³˜˜X™˜Xà)(T­\lÍ₫#‡§P7sr¶²ñüĂBÄÉ̀Èå]&jạ̈n(gH»Ú˜Ỳ<̀œJ,́́oæ÷u45óø{@F½Ë» àœ/ÀÜ̃ ₫¯å`…₫ư q€Â'(̣q€¢7(ö_ÄÉÿÀ ÄÄJ₫A¬ ÔÄJÿAïÙeÿ ÷́rĐ{vù?è=»Â×{vÅ?è=Ỵ̈ôOåzϧú½sWûƒ̃³«ÿAïÙ5₫ ÷|ZÿEÜï:£?è½2ă?èỬä¿è¯₫¾wǼ¿đưÀ€ÿ¦?ïÅ›ÿïææÿ€)­₫¸³₫Ư₫Äc₫K`ûGÿ—¹½«Ó?¢¿Xü¾wẶ¿í½––ï7₫‹w™Ơ?à;q›Àwæ¶ÿ€ïÔí₫Qû;ơ?¡Øß]Aïưư;9û?ÙßíÿGư^½Ăơ{«̃o û4ó/ºÿ€ïl₫Á•ù½tç?éÿBfnÿàÆ₫nîü~Ç₫qxOñç$̃o* ‹¥“Ù?Në‹»ư?̃)¹₫¾wĂíđû?îƯûÉX̃Ă{₫a÷îêeæô¯Øÿ³̃&®NNïor_Àï»ÿü÷;ª™™‡™ ü꒽ɧ놮û:!|w†½)¾y=tïU§n×Gd˜Ú́ -§[¡”±¯¨ë»bÔ7‚kÄ/̃ÇíM0áIJO>Ï ʳ{đ+3XĂÓÅÇBC„p ª‚û>/>ê6ÚÁ{¥)̣]¹ ÑïƯ%<‡*¿O„-í)í×rÈ ,zmT©²8÷á’ăjă~¸A›˜¥ô>L•Æ^ö./“‹*5'Ô_jåïF1rd«'é]å­Ÿ₫1sd(R‰²;g¢´C!ï₫ƒ "Äö²£êkÈi¥Ùll¦5t?r\æé3‹JaṆñP°1ÀD•x}Hgm¹‘Qqjd!^[¸ÅuÙ"!ÏTÓlÅ\‘i­°i¢Ï¬Tå̀Y¨¤¾{„JÍ—i32QÑsæœ/¬IE}‘Œ3W½̉ŒXË5 „¼éª¸rc'¤Íü!N8Ô¸ỤA#˜¹©ˆ;ÁdYü­ÚÖư·–…cÍtéj¯îµo¿w៛Èằ́è₫Đg)¡VŸÓ=—ßß'Èï₫ÚÆújAHà̉ÖƠ¹¿B.L±ơ®¡'ÖÓ\ųüÇR¯ñöÇÉCnWB‡Øá[ÅÑø:yW§%Y>WËØÅ ¹QÑ©Ơ‚~Å…(ư2_œÖ6b¨¾¾øŸ åS^j´“߉X«ünw%Kܱƒ½ö”x Ç`:‰‘—~L2&ÏbxtTb¹á¤UâQg¡ñjó~æXÉd—ù¾Ù>OçơüQ¢»€ œ¦ÏßI«*é3Ïr-ƘI!8–0RE§”úbà Ổ^¾Æ[{–²Rs6÷ ”¶v¡ ¶}Hx}|àX”®]˜.“.,b–äÊdJW Âà›́ÚÆäilVu ø‡Oà!ÔߨÖö‰ÓúÍ냑%&iÁ¢é#/¸å\àÁß•‡©uQÊC:¦Đ !Wçz3ŸÉ.Đ“HfH ׯ¸£•|œÚ—¾ÙëñztÇ^f¡8ê0:ßàđ ízh·vû¶ÙJ1ÈW“ƠEµjSûk24ÖdRkÏ ÛZ üT]ïJ.–™1ªH üŒ²(9Ùƒ ¢Öçz‡`èù:èÆ+ƠűMöY‡XëÆqG¸l†,O  N¡m;1„@°ñ[F™{ÍA­·̣}#H ½<e:ä“y¦<3V&˜KÖ/"Or,? 'Øjdă®xp~6>nW÷Lúm¿ä£-Ë•oG¢“˜sđ+₫ªơ…/®¸­æ‡ZÙOGOiI‡ÙƒeKê"ạ̈2ƒPƒ¥“Æ9…zÀµùˆ‹ÈËO/éW£ÿe\¿Öï#Ú¦ $7vªD†AƯôB8tË}W¼]¦Ơ₫ĂT3˜S}JÅÉơ¿ö—³‰MéØI®Emp»Ăxh2;3QÅëỤ̀̀ü„äîR7>K±>MêaÏø0ùûtjn¼²lSö%̃ÂMM¶J¨Nvt’¸ DM‘,è:1"éÛØ/=­¨º+ z8©DM5YÏ«¶´m øcÿI¿³gƒ i¸‘ )^öß%Pªˆ^ÎeM§¾®²†©r+•=¤œ¹2=óÎî:/†mpy*¢¼//ă‹}̣Ư iˆ¾2†°¬î§È§àbÂetèYư2Sç6œrD±;·ç•ß"“J¾ª"µL˜ÔĂ|a9I¦|öƠ•kú¨Â-¹r¡Óµ˜ăd~-Q¦ÿ¬ËÎB¶»ê†©ª5ƯDƒy€%óS¥DŸ ÉÔQ-‡§ùDÏEYÄi„4lJ₫¶‘‚ ïÔ@ \ñœîơïÄ)ƒ½ªbkS’ñ¦Yå› Ơí2åï´Ç3ûµ¦å°‚gÂ`†"¨˜(ûfçSuKæEÊÑ+ƒ,K¬¨9¾åeŒ\§f2wçûxJC-»"c®À‚²Q¸³  –_hR‹¯eh2{ëṿÏ‹¾tET₫̉î­jc‹ÅßAµƯ y:¸É=ÄLóĐûäZßçJ‡aÛdzó“­ù¨Í«ÂDÖ9< ë^UZ‡ªÊm ï9t?Z@#R₫>J“¶©NÊêüLÖüÊ\|X&€P6‘l:5a`4I’¿´#üËEïÆ+H·; ªj3Y˜áÄV||xŒ%÷Xµ–µ,îî?znÆN«wéߤƯ§8Iä0 »¼ÜRêT+0ªo2†2%›DÅđ~ÚóceÔú«„o‰*8îUæZA¨lTŸ"n.‰*Ÿ!« 2`3`]ü¾Ç]NA5¾VÔY:}\ ¿£é±?Øî)°[u³§ơ¥F7¡F̃yk.öéÅ¿‡B8xÍ2ụ́;9Á2ư+₫¼ưp¼+û#™´5RÉœéZä”|@Û–)aÔrµIN*ézê–óN‘¬ÙËjfE©øwŒ¶ùJ àÖcâÖyåMđ̀g^Æ,c5ơ›rtv2­!íĂ#æô¤ë@V¿¢ÁÚOO·©œ…@Î₫j¾q{†e€ÏûÛ TiáAĐ>ø‡ÓÑWË> eqîº<Ơ%DïxêBÊô ̣­ĐxñkË^¼»·›8¹7뾘̣<Äüxqlơ·µ‰Q·Ö hCíci3åቖ1”{ÿî¬/`Ñùă¼Zw: Ñ´–êë‘MˆØcXŒùíKÁ\¿È{ÉHÍ`gøĐm›o‡¤ÆEç#Ô U5!*ºă‹5s—ƯL“Ëw†¬ñ¾”¿EZkBuj:x‘sÂ[ù%VÛt’³(ûLzHrBkC—E®&™0ư ‘^€­o׃3ơ7~ï›ÉƠg¾ˆ]²Qô§„±”1×́(ăÂ6`̉–Doă:@RñN·B×ĐøÇî"ù­_ͤ@<°ï;–7Ë]X ơ×ñ*g c>{Å.pË®² £±„ÛˆG}—’Đă#³Å~Ùq•cºM _jØI4@›¹+,¦¶kCRç¼&ó§¸Ñ‡7Á¹"«£÷ƒ9O²Ó̀7ˆ¯ăça¨Îß¶ü²t?˜=D̃ÏëQǯÁó́]±t ̀¢¯¯{‡æïíJä-å 6đ ØV=9ís®öHt̀©6ï¼–₫ØU°̃s\2!ÎkØ~Ë pv£÷‰áê ZÂW…œÈÈñî‡=âr‹+Ơ¹{êKmg ˜ø¯ôM‡&"Œö¤A_)ÚÍ&la‘i~OLƒ1p¨.¶4´g”zc±ƒ|u½æ–9ơ‹cú`̉p{q&Săx#¼Ü·‰¼Ms6 ư‰*›DjïƒIuxØŒæ×M=3éÖc¼”q“ÀÈú¼ç ˱;g:´©BÿÏĂÍÎY¹Ă* Ø9‡„ôF.åVàơ¿g'œ^Û).ÅYqŸ-PḲJ6£( å|W¾—²æ‰ÚŒZÆèæ9¹̣oư₫tgƠ.„oĐs‰ o/n0›abs#ŸµuO 2,|t[Æ\¤aÉLù‘ø“œ́‰ăaÖûơöùËÁNM‹®¸ÛÚ‰!Bo€í<…”EÓêi¨5‡_ Âæ:ib¢¾­HĂ¹'JÇ:Á+1Í ¨EcQ<[†!‡áYí?†±pàw¥íØ}Z±Fl%UH^'2®Eë\9¤÷TyJsMl•ª¶ g·¨>–°¦đ”PsÓEcfơÚIÁ!­6œ¯c^§ªÉ¹dÄ 5 Ç „UƒŒ ¿³ä<ç’+d›₫EçuÈͳ;ÑøĂúƠÎÉí&Kñ:– ‰?1Ö8Àă²s×ளt\v m0ÁóKXeRpƯơ4;ʬ² ĐÛüXIä·ïÓo}°£Ë·~+»NG$µØ:_̣făo:£Í‹́[Ozåæéô©èÓ‘Ï8 €ß5¼-W&ÇÎÇ€‘³™¿&¬U|ç^O¥Ă½fĂ>/¶üüücÉ®|³ÑÏ+KÖÛQHLyÎ’œ&ÇK^EZvĂ“ÀZ?w0y$‘°<~˜€ˆfNuÆoFFûƒæ£"T\´´"–5¿÷å@ɦ[ÿ₫)l0TMw¸&û>Ÿåù¹ #yÔ•† f¨%7hæu 7ƒ6FÎ@ÉÛ¬c’׫fùë—~ëÂ6ẬnŒƠă·½âöp—ñKÏËưƽ›ß”ç̃WîJ:tÚŸ¥ ÛàéÚ"œïÚè·¬å@bæRˆvåÊ„µjƠMZȵ\_3ïåC±Ë‹̃rdP?óàë  “TaË Hc~>? Zb¼µéóæUư&°G4.Ü¥0Qn ûê"¤ ̃½̀,àÆÀàúL¼.âj ó+“¹‘˜̣ŒʬX^Ÿ²̀UÊçæ!„îm‰©¢™<̃[æ¢úËW5÷R±å'™‹Ëc>ñ¸̃aâ|”ỶP& °»/7Ú̃̃A1כČ!8ˆ§\ă#T-ÚpMư“F¦H~₫ñÆ»‡2 _Ợ½Â.Áo £¾Éç„̃̉Kf̀άà lù[ª˜́…ơAÑm…ógư0>x…̃1́ç#ôÈCek`¢k˜t:ÅÍ …FbG øU§7 ×%ÿTZåB ªÜG!ÇƠ/zâß6#›ç¬å)ÚDƆp,êmT¡kư©•T‚jú-jrRF 1•Ê!iÑhèvƯ@ä#68ó’)2̣ó·g#11äu6̉̃R^_cU¾Pœœ+6@©›Hªê2÷ƼÂ)h·>#Ÿ´vjzmûĽW*é1o³÷K¸áÑ©èùƒm ´ë ±"q0D¢êÎè‘9p×|.ƠptXF*¼ïÛ&öö½¯  >¿·mN—NơMúºXƠnh|6e“ #“ËMUI<ªùÅÍâÂg t¬í,(SÎ}O“7Ág ©÷¾ íbÓ‡…¬óÏøLÇfÁ2›äC]É‚Óo?©0±Ø»ë…ß™nƠ‘µÆô_u2=*ƒŒ¢j… ¶¦o;Èb·öQ=³ó–qÄùỉ́§÷(“IüRtÑû,ºiÔÓD·Ä°CèºơƯëÚø'v]Pz₫ñ'­ÙÓ̉ùÏuy-W³¸°`—£xj”–“ñ+ =WÛ S,ơúk8÷ñàÈ^µ§Ï+ùü¹©///æƯ*o¤«üOŒ†·xÂđ/£ÇÂ)DÏ£¦gñÍ7±íb¾`ơÙ§¡¡ûfh‡y¶¶Jè/ĐVöå!‰â¼ñx¬ ÏÚ^7vä)°6• ơƯ§p6‚£¼³(Ū£y mø(‘Gø¿3 „Ëë[¥|JRàóüײjÍe*¬l̉n¤œL#‚P«6Ïû‡=ưH ö¾5âJ›säĐE$ë§!JçăüÍTC‚£¦Á“Æø Œ&”ŒDIÙàḉë"ƒ*j)iJ(Uúj :å1æ'F?đ8Q™Eđñuû í̉™OEîÆW]ÇXÁ$Ï!_5€v)_¿ơ㧉mw1»œcaˆ`»éÁ³FÉ-^ĐésÜ­LßYæơ4©øKm˪¶•b=²x1X¢ĂT.Ô26BFè׸9}ê₫Áy]¿Óáßq¤đ3»¹Ưµkæ˜5Ï‘N¡ü::$cùæ8Kă)̉)5=…FÖØ60SN_dz-`21tÀè'V$1tÑ /pÿ»&6̀˜ûƒí.T8²Æ :¹EÅÍe?årH_]È®̣Đh¢æ\¯¶AO>tcé¼%IƒÛÁb@ÏN6Ỵ̈¥ªé¬d6à—a‘~§UH¤C¸D ßƯƒ¥?+ó¯ñó”Ê>Ȥ>ơ¿íû̀ÿ.s%tÄÑ®&’,›óÂuÅŒ?¦¸^}ÓV‡Đ[* * &×̀§H•‹2Ófâ$VÓ6*Çú‡¸wbIáX~öÑ:=óUÍ%)fn¡‘YVdDă—ð;Mẉ€́Âù½S÷ĐâMqqâj€†êа©Cˆ ßÜ…É^ägÈz̀̀ï°ujt\mưdj¯:5̣+ƒrEo»VZgôµnCç0@p¤—’LœËjNŸ;«…7)<Ä}ÆŒ®€¡̀¶µ[¸À4;Ë ưœÿ§pL<‹Ă"Rl¬+ëe£áÚô†µi3g›àW6&hôj ”ëjĂåeûÜ"´ÙYưE³ÈŒa Á3«Fµ#̉»0JWRÎ:¶×7RAÄ^ÏÓ›ƒ«U ÚX»̣bZØ®ĐBÏĐÑÛ.iz‹H„Z<@6÷´«W9¨°tÈƯ;Ú<Otnù̀pˆ^ñ,röéEFv ĐÆSF÷Íư[ÿ…ƠÎZ‘dûrÏŸDÙχ› ͨ‹Ô£A!··ÑÙ"Æ,›Í¦fR˜“ëÖ¢₫MêúÔp`|-Ùó́Án,^Ô<8†“¨₫z”V³ăÔ•ÔÄƧÚÀ7É^ ¥Î>-pÔ₫»A¢¢ï‘vŒ{ÀJǹh»ô*ưvăn±ĐP™fS®bÊé ç·¶Mñë¥/Hz ̀-x¯!p½V¶2Aư+£<æ|êG,›™Ÿ„R%ózÄÂâ )bw÷Eá­‰q¡ÿN"KT°gYiF̃²ó€Ÿ°¶ô £È»¶¥uDx³Cˆ®˜_eƸ¼ÜÓƯÿ,¼’çdöä̉[8©eúXáuô«b‰=†ÜFîÄVv˜¬è-3=ÚÀªđK•#ª4<UNôn DIÄPévQg»>K2¡›Pدëå$Ëá®¶.¢ÄV ­@«=Ü•K)đa5*Ù ÔZåNÇ{¡•6`¨E=¿ûyb†É8O¦_²Ẻ|Luw-&))áƒà½ø6•qñœ~À°Ù'ÙÄï72¯—Oè ·¬1HËó\èkN¢.ÀSú|“Úà́4Àê3¾sŸ¹!lr3¸ËB€_(ñ–\ÊY¡¡¾·Óȱ^R"~û‰8`ׯ‡æjV¦3á¯<ÚÛ6Æ@×µ­(°x9.)n9(Àßïw*ÔƠÏ0ÛØơÈa8c+Ktï̃x?OœT–‚ú̉û6öCâÎe¸wV“ß²›i!X‹.ñבäM*̀Ẩº\èA%d´ÉIiÖ×Dfa£“ÜÛŸ-M÷ùE%»Ă*Uë± ô>àË|,Wµk^vöÚ°%NÛ¡È]q‹ ^<>ÄS„Œmµt8Ŕ·p¸ôâ§C^çºS••†18Ú‘Å¿£‘ÑîR(´)¿˜‚>2ƯTÛu₫"­:íÆL³l6UÖßàß́í^ÓHgsäNk̀G‡—QMÀ-R̀^á'ÄCåâ[\G g¬÷6FdTx@µ&­½ă ¥V´ÆO®4:ƠăùI­P‹µ…¸YoV¯c`̉Cñ,jŸI÷³₫ ß¹5 ê'£˜—™¾.K*í‘¥> ‰h;¹¢4%B3Ê\éˆCæ!Så|[éỐ ¯ªmलúƶ¹|E(W̉Q‡ÖS}‡¯œ°*ørăü3fÅR»dF™À₫2|&P/±Umèq*™§H̉2Üú¾©¯s0›;ö âñ!ºGvŒˆ^Gs[Â{Ä´˜ñ>{á^†dû2{ø̃¿ Ñ&u₫×3¸Đ­‹CƠM2lN©m¼B‹ê‡€´ßY‡––©QRÙß.yÚ•»½ kÖ` äŸÂeçĂrEû ³Tah‘8×vNá½c&ùJé1 RƯËÈŒ4$X„́— OÛn45-½iÁ¯Êi×Ï»‹‡L{ûª§ÆªñÑ‚¸¥µ0¥HdTÖÓ øÆÀ Lä±zÖ‰­ ++uKê ¼vAáá;• ¯Đ =`N>ÏǶ¸ó°à1 u¿¦Óµ©`ƒ ½ê84;ÉÙC`Ư‡kè#™µăï˱‘;N¨+ºÀ~·)K(²|k‰?̣²₫Ávܨ>ÁÅʤ 7Iç >‹l9¾âbmy,uúá8×?Ô,wrȬ€,$¸ôĂYµ™"½đ•€Æ̀SŒØd3ü—¹]ÅÅTzÊÛoH́] <¦këçÔÇbœIĐX= ¸ëàSÁ‰RvD~T2_rơƒÁ®£›é9 å‡îoÓ 4¥¼é,Ï|%!)’ă&¡¤76 ăˆ‰Rß×€x †£ë•ç'g ÛqoâÔ×ơñÄÉÜ%jªˆÏœáîÇ×N¸W@TƯƯ=ûö-ü0ÉXÑJ+!mkøÁèë¸éÛo„™ÈĂׯmK€uz₫»ÍÙư¯-VYH«èWÚíí·I«ĂkÖ¿CXÉ£G?&bkÏ;Í{L[HÙơSMÛàb ÀŒû´ ;„&pIg‡åNØ84I0]7q¢²ƯưÚ[‹çvÎÓ¾\ ̀ôU¹ˆéDz528 åƒ^å•ö‡]¶&J¸É̉hƒ,î`ú\¶8 ́؇=À[ÅFPĐÚlƯƠ›6bR·‘Njn™¾y'GÇYMµ^ÛÓúU˜«3ñăÓâY-‡÷·̀̀²¦In³Ơt¹̣°W¿+@%BÇ›ø/±ówrPàc̣Kz½¶ª¡ QC|:GƯ}OÜ÷sB’<°¯TÆ0óïáö…Ñ×Öû†‰z(à¢áH^1r©ăjˆ­WÎ6ºeh §u|.tưA¥Áw±ßÖ̃¤?súÓ±aƠi[D¤:[V³]eƒư®ÉSZ·><;‹–NÏvxÿ8";0å8²fŒ$Ûz+D½̉ Ú¬a£A×r| ¢ço™°¬â¥@<䜘BMƠ²Üà‰}`M©.ưɆ¿~2-‰mz₫”]à™?eăă® ¼yú:₫v,Æ4₫$=Êd…­»CøÑu¥ƒË9î«Ü+i²#IY¢»œ#‹ÆĂxlºÊ›%QdÑÆă5[¶êغE´.̃QZ%Ö€é Œ’Đ¯j©†vOµQÏ‚F§}öRº́pw€ËŸ=Niü@¯ßÔLKyƒ½î~ëäÏoß_¾g*Üvp_…›+L“+ ù!rÂ-éל̣xÊ zgÅÚe;­E3E×¢I¦•3”vtÄz¶WvĂmá̃•˳‡†‡<6°yŸ¢”>b’Ë̀£{6.côyoµX²7Yâ×#v´;‡[#̣±o6(%Œñ—{·5#‚¸‚„§Ø¯˜m'Mÿ°N¶—O„ l,› î–ư‘:»ǹá¼}Ưäeœprß!ƯMZ~ß#yâ§pù~Œ¨æ¼4µ«6¹…2´éJ¹₫c9ÖÛ¹£U[4™₫öéÀ–døôñÍ,…ñHÈc­°æn¾˜àפǜ|h‡ äØI„2öĐ· ưnkÆ7B;ĂGG—Ư₫²d8­z?²†—Vê1!†f úd"đ!.$qĐA„ΆÜă×K³:½ÆŒ¯_Đ·˜ùp.¢ÁơqOƠCàlKƠÎy•PơÄF/H}®̀₫₫G•W»Ra†Xæ&«[YASsl•˜ơ¤ùü…Ù3A×tñ8Á̀øi Áë·fÈ.dñØÚ‡n"‘HED¼ ›EÅ|ađ·ưÓñuô]Zê6ó’3‰KZWqqnMùó•”̃ôíÉ̉%V25Ø;HA –/Ă«…"!'ÈưQXtM¿@|D\‹$ñxÆ»“KMx×qfEßæÊ§Ó †¶9 K¶c:¢ÜnÅƠg.!Ç‘8ÜÓ tưÜ®h"ÖƠ÷â„y:Ùg/m!Â(̣@ơítŒB{Üß[O÷“xC‹“ü{DGÖôwÖ`VVL1¨¯e¨úÜÔâÍØ\äfnă qÖ ‚Å?a£mÆŸE§ÍØl̃|‘ÁkØØÏI«H€øÙ́̀Ø¿\?ËéÁ[¾ÔSóF¨aw̉½ĐH¸JØyzö©|ó Ô´•¼HX®Ö@ˆ™qEÖ×M¬;¯Ùx:~OÉ…kÀW ›ÁBû(X…Zưd1Ḿ䬹ẴW…̣ û¥ü7 O1̃m6d.ŒÖĐåfèë˘h°d¬q§­1ñ‚XEè'u°™a8Íf2™`1|½£:kH¶‹8˜D5+ºtOßíRÊOË{UÔ¡R-Bz»¬C̉ÉĂüî0¨)¥ÑđCHăt'ùÏëßçÆÑÓ@¿±Ơ}Đă  Go}­1eHѹÈCîÎ̃r\?¸VäL ~Ø¢~[Tå߀÷¤Lư¶ô{ƒr¥ Vƒ¥®À,ơîU™·ßˆ#8³̣ÛpmŰĐÙÖS̀}Á̉F RT©5èäλ©:ÏGñèM”ºW0£0Åê2*UOøíè`©ç{̣₫í´ávhđufa¦Æ~ ±¾ƒz¼Î®• Ơ–»oE(©3ˆô‘v†h4„"_t ¢Ă”ú¦Q$ổ\|% ́JyÖgÆ~ÆpWç^xŹWƒ·s,¿³i+oO¶æQ °¦×4ÅbÍ|²#Ñåo·»Tnré”&hÉsÀ¢5¯Àl”‡(ïˆVS˜ÏîÂ)˜pđ‚ûĐhơÛ&QÀê%K–s¼Ä9=Áµd¨ú§ –ª\M‹°æ/ñïiF5͉=!ỴƒlIºhk+'A`ù¯}ø ¹kŪ7ßTʽs_)ù.â`YNiê8bæ¿>«ÌÉù=Ô Æ¾DªQeº(ѱøóŸi¸ë1W™‚‹_Z¦v²ÁƒĐO÷Đ¯_?¼TÏÜḲ7i’20Øø¶0ĂÑ^ôôDréh_r.Ï7Ơ ‰‡Â”9»<¾¶Đ5¼¹-w:­ỵrX@đäW¥ƒ£Ø,P®tmJă¿áKÏS₫ơ{Ï›¥˜5ñZ‚Û{Ùæ¯É……‚äVE×¢º¤Æ!h*³“ȈŒºÉ/V¤Ú”H,Ë3pù»Éeó |Έ D`+âYa!Ơè8èçÊu·‰?>®d)ÍÄÉ@ª^ôÜ»Rƒg¯Í‚ƯcvÚÚ‚5»%®I‘Ÿ&³çIÊ\]ø‘º.¨#8¼Ú8C}ü^ dÅyK—¸iÈŸv‹| Z6Ààן¡î9†ëM…æYÉ4!BvÀ\P¢6—·<JEâiJ¥½¼ahZï{ÆXĂj3}ëäÔàư¥¥Öl£0‡Öoúú„R¸"âơü}Q.²R½ï¨5mg­##=œH >ÓÑ·¿¨—ïơæ8uשQdƯùnơñàiG¼ TŸk±`x*–¡»Vbæ¨Ï¶¨¬4“`b X” à́lFƠ#RC>Tx?œüđ±xôƯïÚ’>mº%ɤRȹŒŒ§+)l“…ͺNư.¨]ƠËƯ5)ë9„W0>}l!¤{½nßÀ ¬–î$ăd́œfׯ½¦˜÷¸¢´Êe¾ù¨ï¡jH  §µÆ¼Â>n¸“Óœ·V²ÊüµsEl3j’GTp‰ùâÔG×'´‰i´IbB ¹L̃â ê–Â!ˆ…ÓƯ‰fYV‘{}¨O PÍĐ³ÊÙ£â¬ĐQy¤\7c”]̃X]è»ôߣԡœCü‘óí)L'¸«¢gѦÑÇó÷ós–̣P Ù¸ô û*WÀ•˜±t–øá7X Oß§¦Í9ñr£‚º¬ên$±(ŒÙLbŒƠ¾,ÿxWVˆÎĂÖª±q±`»ÇNçÇ'ÈNcൺPwhíÑ £x₫C„£„ ùÏÀP~Ük\U₫ ,÷½„6¹Jl_E TƯªç_—%y5¢“ÎW¨2Ŕ¦Á̃”ª¿$û-ÀÎ,O¬S8i uÓa¨È#€xj̀uJŒÔăX́Ÿöü¿#ñXÑŒ:,odI1ûQåf?ëElụ́Ă¡¾ƠœSæíX5ØM-/¼&¦ñIuBjSDt­’x¢Yà’‡»™=”º5KYa)|.k ‘E3‚Á–MÚƒÓËéƠE.ùæüF1SƠü|¾/z13á‘öy—Ù\¾\7 ¤ÍN„Âïº₫íî1‹‹’/jÛ¶è"yx̀&‹̃¯Od¼w¥—SYÅÅz>^lƒ‚Ê´ØÂÍ€D: SÙ÷̀!m0ăù8´ÆÆV0Ê_Œ÷y†‹ThÖ+Ù¤ï;–U‘Ômuu˜â´>₫Èϋȩx 5ØIú[ —›Cɇq™£̉/}WØAruM?ù®É‹`é ¶¥tđÅe Ó¶ÂNÀ ”.#óæQØâHƒåº—rx—v´Ü°ÀơŸ*¥ƯvÎÚ±.§Y]…ß21iCVë,£"¸‡̉›î%ø©÷Èq2ÀÏî˜ơ?4<ưDºñ4ơ÷ Ó&¥Q¥¸²wÆ;đ4fË=ä¯w«`¶‚±EÜNè*„(z‘ÈûK‡¤aZƒAÈ#!Sn êxÚø:4ñØÛs,dn¹Œ<ûơ3ĐíK¯¶>4\!}L¡3>7+2ª*’É6zfCíÏͶ.Â0z4eróđ;êx®4Ḯ±c\ñđ®ÅsGËlxHùeϱumÚ1ÎTHçÍ1ÉE,‡ia¬%̀£VèüH²¸-ú½ÈV&Úư¸¨Ẹ́7iûÍ7²X/ïLv₫U®đEÖWm2±XÚ¸åZ7»‚\"‚L¦4ÊeÆ=́_=2 'XÊt®§§[ & …’AÙÇ3&äS4“ uWƠ®”üŃT=ÖÆÇ¡Ç/ÈŒÀ˜vó²ˆ9¸E\Â[éu¯ê†XôÊNhLÖđÏ.åS! äđ§¨È&û!ÓÔj3¹&íMù*pđº̉+ñ˳<æ8£"­€‡¦INßÎÖçójZr₫pWƯ½Œy‡äZáû±„EÇI„ḶbZº™FW ×{Đ—äñ“/ß6?đJƯ)€”È{¯̃æáBp?µZ俤_£a€‘́*dêí\w.‡ ‚µ¤ Œ£(/ü¢LÁéà®C½owLÖž——°Ó§ăáØÆ—0‡W pÚ¾´ °æ̣ˆhúÅ‹"LÛƒ²=ÚaƒQÿ+?«Fa¸Cec²[UvXd¦è€kµ\đQ‘ȃüº‡Të9Ê‘Ÿh×ùq $9=“Ëc -ü'yÓ:¡ Ơˆ08©ªÑÇ-sºÓüµ©D¸o)ậfË=¦óÎO=§GàBdmáW6û¡YÄ û„€H¼‰^åG<§LU3ö…ªVDJö[埋O<åÓ-¤@m…“Èu~¼äü3D²»:¿¤7‘ơa Å®ü&Só™'ë_Ë¿‡ùƠû/<éæv«sÏƯ¯ú±ˆy‡̀gÄ?a ï¿̃2‘•×OÁç̀)€ù%T]I‰©̃á?:ŬȥBzV#ôÀ•éÀiU"±¨g†‘²µmê>ˆU­æÂóFiÈÙ̃²½ ™"iëđüC2øX(4Ẹ̀I(¸ \!Wê¬DnÓXú%´;C;Ÿú-—i„Œ‘-Î6L¡Œ“s uµ.–;ù"‘˜ô'ˆŒa:–›Ø9̣Y«[Ëà~@$&đ(ö7Ỏwư⢳‚\o³ª'ơX*~Ö`²ÄƯSkUGADfÎ\u\jé¨/*a$}) 6Ưq̃)e.ưÉWŸÎaĂu5Ô2hỳ$Ü¢̀H,öéZk |fÖº4*ƒŒgX÷åX/LÇǹđîz`QḤC>·}‹©óHçH¹ƯÏdáh(ч]ÊàLºóÓ …̀Lí¨@ IRm¤RÙ/¾iÖ©ăÔ->'vÊwˆù¬>ṣS~_%ÉH,‰êgôÅ’¼ïÊ o%ƒ¶ § ¦'E–í¹ØêÀ8)O¼GvdžÖÎà̃ŬŒÛµ[VP®Oëh)Y ²HwK˜Sú<¿Ê“8 ˆ̣ª[%6]̃Á#S/Ÿ§øºÜB)Ÿcw‰ÎoẠ̀̃ßpđ-ưû×$á©^Ëæeƒ¥Ê₫Úxg”ị́sö¯\Ú4Ôjz‡Qpr#ûE‹!Ưa˜¨¸¥?(KÍâBÀeŸ?·$Píáè:̉©Q¬æægŨ(½±e©ŸQ¨?ÖZY[¦ˆÈÓº92U¡8”¼†MƯ¯wF̉2¬'’í ó¥i3ă~ ¾)jÁ€ºéö `Ûèăcˆa?÷Ôibcy¤ÖPˆ¢8?–1e§Øeô¢…¿”dë’ˆ̣/sWvƒY¯K$d ½¥î$tă¸÷ư¶̣™ÁÍ¥@È'’C8¤a?́.í$¦₫WƯúK“-s@ŒÂHÅñ½nù„ü!Ѷ$R†3ÖfÁœç3/? =Ç#›̃ đÅW”ÄVư>_Ööæç7‡²Ÿ¯_œ̉Nœi ơDsf ,(Ÿ"×i—Đ›Q#èÛo™Ô›đØídj¹cêy}BÛ#fi·ºz„Ó˜{¾Ø\uE·̉m>zÁ[lỌÜ|¦Ơø0ÆZv'¼kb’Zœ̃µ₫¥`Ø¢¨E$xÛb„Ư2j¨Å‡?5§Ÿ]|a«\ yÁ•ê¸<®iscë8´ä^ûæˆyă×oÔÀ·F«[Ÿ̃Ä¥àSN3Y—¶₫~F¦:3É»Øz‡LâÑâ-vº=†–\7₫2•×ùlâŸD2¶Êă¥uÎÎ_Đ.Q‰)l“qËî%) ~¨d$…®ÛÆ'·æMÖV|xÓ°Jx¤œLGŸ•¦ơíç^F÷ ½²=r1|ÿ°*(®cßp55ÀJúlïZO_q-%₫Â4­{ ŸÓ.Ể‰Đ•\*è9k°Q¾óĂ—Ñ)ûTÙƒ•çÈV«Àùï”ü¾1­%¤ÁGÁ fÚEƒ^xa*VÛj±Oyˆ…ºX¬•n9bpµ&Mÿ¸3«[R“·:°êYÑFOᄂfj₫eSWØ/ Y}Åwg,~54^D;µY¢ỷ1æËâMôyŸˆn¶¸6éUfăHY>¨ÿÉ{­Ëk2H/½cÚY`Đ`\æX­7¤Ăpr߬2Ó•¯CÅ”,ïïƠĐÙ½d₫ DËê$£èYVƠ»¡₫}éÈ{ü›VR æ¸n_P^TLj́î l+p‚Àü–ôÊ¢—xvÆ2ùÀ m—´zA†}MÖ¦ñg_´Ë°J/¿ÊLµºÉ̃gf„¶̣ú®#P)ƠáÜĐ³;І:›¤ơô­Å ™m™Đ«¶m̉AƠECdƠÈRÙ¤SØÆ9®µ¯ùœ³áWz™¡„ơôGÇØÏ”™p×ÙÍe³®³+ÉÂÖÜacß°|“ï4e5f¸Ú˜>ªåëxÑ øéΫ*ú^r¼°W¢öX½¾o¾©J§¸Đ9̀ưG`¹₫ô4Â4Ù₫o`|—’rS+o44ä~6‚\L¶̣ZùĐ G ƠekÚ!?ơ¤½1jCÄ©í”gÏ‘¾íq­Å oçM…ï˽¿¿ôÍ‚ íÇF̣(C ßVÆ̣!8MOôtpú‰‚›ˆø Ø ë1Esª((–!CJ‹é²Ä”|…r´DHZ:™4ÖÎ á_CF'îăo^¶mëPdñ¡1Tâ¥us~÷°½tÈ–¬ÇŸö7’~^ˆ&PùâdX¿†Xdz¾r7I×EöÅM̃¼;å â w„C6ô–“ñ¥¸Y߿פơ˜Đô͢הą.ä§`09Ad₫û~é%¡¡Â×c‹BñWNJ@t6…ä†X†“è*2ơ}.Y¬s¡ÂŒ6ÚÅ èG̣–ưóŒ üÔ-u!¢Üµ— ¶Ï! Đ'ßyßËÙßeY)̣ƒ ,2ƈ²B.G%”y³WŸÛ̀‰ë¬;ªÄ ‰!s6ṃ;fíàŒ̣PơééÈ”skp{ÄâFèư<ª| ŒQè×t¯¾Kˆ0@çL₫rX> ¡˜¿ízƠånßq/û©áè2âM/'ó­¶Ăú⣰hmu ₫¯́<¦µ ¸Ízdă[·o1¾ÖDø»oĽ@eâ¢J’Ñ&ÀÔ®†ˆ©ăó/KAh$̀‘æb›¼zC²ơ5%KÎqKˆñ_—á~¶0DP5å₫ùä7eëÓIx—)Ăn’%TƠûí7óñ–†Tü5×µ}údÔM^P2ƒ{ôÎ}´iñg""¤$[rơ± ßçz[ÀÍit6 ù­íÜ3{7/³Î¥đªq³? ’ZÍ́0} sai­ ÿ;Äù₫¡•#ͼñü5é¼¾”?… Ù*đf¿}¸¬mßư4Û>ˤàH~t7~u²ă‚ÔƯºfç̀ ÷HkuSQïOOly<ÇÜ₫Ô¹Ÿî-Ûøl½ ₫w̃›KÈho+™T`­Ÿ·&ñ̃P±₫<))ˆå]˜{Êr/2ÓªRö̉))ª,‚­Œj+S ju[zR‚0_§QvÏ>ĂÇ÷‘ˆ±q~/ƒc÷Èơë?XhÎ ªyƯ‡~‰çqlI Y8Ñ­`(ù4䬜3l"$ÀU=Û§P(/!†æÈ¯æˆÜ½ß†_«Ág̀ÿFFÆÛ`¡åêN“·ó›I¼~0Ïhºf¯‘ ?¬aiN•Ö§[ßBèƯ¼ƒ¶)̃—ävUHj6²–Rçc0vµ¿Ö])ŒsXÁ,®ËxÈ|~"É€o)h÷3—,KgaOº¬uÿ˜HöT\(ùØ)¯¥×i•+ZÏt–û»¼UO _¶®<¿t*M”_„à{´E¯ºÇÔÿ5ơAœûU}G©tÄÆ₫̉Fûy¶ó°ÊÈ$µOÆü}¥j¬F‚Q< ¥ü ú%¹¼ô¹̃7Pmv%—Ö\–eO¸Kb…5q>&m(Äh¸Æ EŒ^:ÙÎ ¨„7£÷ư_“ä¥Ï_̀„{SäÎĂMX1iÄ9­|Ï Ưs³Ê0̀ÄvÁo@QÂ0=æ¥Ư˜Ê—,T²̣ ¸‹ºÜ]èbm>±K£W¬QØëÛ£ÿI:Ø$y Q è[Ẽvª#|\5T»ÖŒ5¯è\ß1tIL³ŸyW½ jÎä?Î5ïÇïÛOVxGT“óhX CµôVd–’…—aøĂê£ k¶*Cñ—’ 2WL’Úg9×!ú ăxaäfïx«&«ÄR4³¾ÆQOÎ<ƒE«“úă|³Đ5LJ̣R‰ÁX,º÷{î–€e¶»ÈíỴƒî¯sX4$ư´9̉D!đ¶¦~W<“M?¯ˆBU6£ÿ–ó‚`z'½•{Û«ƒơˆŒ½é "Mº÷¤ƒQß`ø›×j/Áđ™^”<_=lÉô2đqÍÙÂÁtµqE©]ÅàCÚ¿‚Ȉ28›qlêÀøûJvøèD~æ7úûƒ!¸[ư’ä²³2-VƠkû¥Îp©çèà«QçƒtèVTCØ+=C>‘âp›Đ½6Œo•¦R-¸̣5(â¡o$ »)qaLç'Ÿnú8êˆ{WóöCÉá&ßÛ뿾0+Gu¦́™ûÙ§JV¬à¦9övàê'©ä‰$9ºd6ʆRÆ­º°Jñń(F¨ ;‘6¬¨èE“vĐ¨Æœ÷1DŒ¢E+Qm ;¶/í{QÚ̉øê=&p6µ´^³ñ'ë$?đÖb₫¬ƒWƯPâ–éW6̀¢Í ª͉ ƒ±°1ĂS¹¦]—%T(-&.À5.̣Åÿï±É̃?Ȇ¢¡î ꢣ§Ü~‚Gĉï¤Íˆ+Nüñz¬°°¨Î'åBd‰©ÆVŒ7ôv7́ä̀¸zo¯÷’̉F¿$­a+gS§­‡ÿ¬¹¥ÀwĐ@SWö!§P¯9óí§S?C•H¤„¤e„ Qè¢ü¶ÓéK¸ .™X¸ûÆg¿_Ï î ©¼+·x>‡óôß@« ưÆë{O4™vÅ₫839Ê>ru1™€&éx}©¢oøÁF[ΫlàÚ‚Hº±WƠBur»ßnShI·…6ñ¾j´`§SYT§q AĂ(ÅΔi.”á₫”“A5vđKÿ öP'Nè==Ù̉ˆ$™Yv3VÚR²®O>"ë¹ rR+af¬4¦#đ8ÄwÙ³fôKÛaxM»º Đzư Ă›üñ–0"À-âÄ×d Í¿Ânûv·ú™ é§¹6Ióx0üÏæ£„,>[Í÷½ËØx!Ⱥµ‚Á©}/éYp…’í§`§·k?6.•0‚ÍÀƯy¡q§ÚS´0âYHàÙ!x‘]؇XIR<ÿÉ ö&W{̀iEẹ́Úp’lÙ̃ endstream endobj 635 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚwT“ë²6‚´ RD¤JD`ÓIh"½÷^U@I€P’„ ½)½7é*½ƒ(U@”ªt"EEéEàuŸsöùÿµî]Y+ygæ™öÎ3ßúÂ}ĂĐDH †²ƒ«£8!°0H¨¢§§A 1aHÀÍmÀ¹ÀÿÖ¸Íá,…”₫„ Átª¨‡BµƯ]€`1 XR|K‚@·ÿ¢0̉@UˆÔj£p,€[…öÆ q„<¼P> øöí[‚¿ÜJ®p  Aơ 8G¸+!#â4AApœ÷?BđÊ:âphiOOOaˆ+V…qçz"p@c8ñ€Ă€ç-ơ!®đ?­ ¸¦́oƒ Êç ÁÀ…  Gb .îH$dhé Đpäo°îo€ đÏåÁÂà…ûă}üå BQ®h̉tÚ#\à@u]aœNAÂÎ,àñ€ \ vÀ¯̉!@u%# „ĐáŸ₫°P Ă c.ç=œ‡!\³¦‚ru…#qXÀy}ª J¸wo‘?ĂuF¢<‘>Kö$̀₫¼ ˜;ZÄ ‰ps‡k©₫ÁT€ëà8 Hê–˜”î„{AEΘz£á¿Œàs5¡?4 ´'´÷CØĂ ?,ÄÄaÜá~>ÿiø§ƒ0´ƒ; €G'¨áö¿eÂü1/ %ˆ@?0t₫ù×ÉÀ0 éâưoø¯‹¨˜ikê« üiù_Fee”ĐGHL($*‚AâRÀ[„ƒß?ăBêø_-¤= x́¼^ÂEư]³Çđ₫Ù>à?ƒé£Ô…yÿÍt+JøÿŸù₫ËåÿGóó(ÿ+Óÿ»"uw—_ṽ߀ÿÇqE¸xÿA¨ë#¬° Èÿ†ZÀﮆpwưo«BX%¤̉B`qaøo=«đ‚Ă 8¨ăoÚüÖ›/œ  7Daç‚ô_6–A ,›¿M,aåp¿y.Ă KơÏ:ÔṔ|ûD%$ â Ÿ I}À„5…Á½~±("ŒDá.@BÏ~@{p>h ) 0́\øGl¨;CH₫‹„ÄË¿Ö÷‚Că(¨L°SupËA¥«§Đ̣ ,éfêÁQ¡Á‚û¸.µa›…x“¬̀Igê`ơûNmúÊnÙ³¶}–j8j½Å÷„8ÔW8́bÇÏö.Œ&ǿ³qÓ4=±HV¾.]Œé"2d¢m§T€9t™pÓø₫UƯñ1Á“‡¡Dư–vH‹~k{eI¦.#Ûmó/ŸŒqMv½¦Ë;Lå|r}´m‘¢ŸÎ©#Ûzˆ÷¬ ïéë¦ëd¨íñpù;W(NM¦—MUœ¼Â|:ị̈Ïœbtz;+°®çs|ÉƠú[K[Ö7xÛo9Ú&ÚGƒ¿àÙéĐÓ Ê©˜Üü•HØTvIC|Â>Ö¼# ¡ùz¶́»³vXˆ÷ähÇĐüOw-ËwƯÁ¼‚zñr§¥K_üê¸_Æx؇7ÿU™L·¤&À˜É·îg”×Íå’5½Ç2j!j)•êØb*_4};¸9à˜µ"µǗ²HƯç̣»{>xñÓ¼íÖVeI·(d }4~¾fÚ7½àÉÑ&XäM-4­*Zï麰ç[áµ`­Ûă*ô+Ă·¸J|ÿ@÷(% äÈ~º̃Ă$ÜÁY6µØ¾{½”8FT¢Ÿûüh'ñm7ª…H àQ}´?Ù Nêеx̉g†Wè‡Û${̣º¨ˆå'Ï~È7§h‹»*NŒÅêÇ›øz}Ẓ›—èoÓ-„ Ü—ßé%.(̉8ú ]™â}DưÁ¨7h-₫qt‹̉üNSNßHëè×K-%r·Ÿ~ÎÜØs`eÙΔ»̀aÙjĂqfw†²¹ú]™Í¼`î¨ûa?yư–'ÇWfâ¥ú¬Œ×ó­5Ô=u¬A_pb÷&Lt«É3ZÿEÙˆ¦ü®ªßîw©¬¸®»I—[¾ÖVî•9”\&kÛµ6ej?ƒøÚ¶:ÆÛ=à{åy7hjÉrJü^}‡è–÷àJª#³ICHé?zô©Đđºưø} äxÜĐÅê"7_Û^EoÏ·±ÛÄÀ+jø‰ñ¾ÉqIá†Û|z̉2”CMÍaÅ̃=~́œ+x?Ú.>ư;¾¿‰BƠ"n£L¶¸~…”~ú¸{đ¼)04I7ræ‹E]µh•©zœù<‚¤ƠK¾Ï₫ƒfÍ‘%‡µ©Ú̃+§tẵHcª¥%Æu`z*팋Ô₫Ît<ºz''#Kó†ù₫t ¬₫F}€ Lécgúr Å,ôÓ×Ü2ŸƯá đöv@߬ۋ}EóGûßêæä¯L.Ơæ~́E}3öLY„]Ï€7mD¶(#WÙÙ^11zm¼́œ†[™¼“Ồy+`Ë 8ƒk1W’ḤÚ`ô8"p!°€€ ™gú¡¢ÖPdaO|ûLn“ư-&í…‡÷T…ă}₫W:U¾V;ïFx^©cÑÛÈä¯ëŒôđ~Vx»èZe§$¤¥–î2üîZº_,‰äSQ? Đ7óJÆÁÑäS"Å’í₫ư -gåøđîS—ọñ³wÖe?ĩ©́¾èåAỵ̈_À’ºWg†Ă ̃:¼³ª‘±N¦¦ç̣SAcg–3Ơ’>óxÙ™øaÚÎ\Íô™“†­Ăp˜Ñ³ªjJ̃¢Ï2ư•FÔfÁ*h»Ơ·2*D·ák<ê–¼Q€¼Ÿ!‡±‡E ƒL1¢È¯©-Í6;å!ätĂö³ï‰KrJÜA3ûq1Î"ñå<»—̃ —Ö}¤ ¬Ó½k~ï™Ưñ;Ù– ÷'FyµQçê€êwºÚuc[ëôÄ™¥Tîe,ơÂ\L5Ùz‘ç̃p³îØ¥‹Ó™‘¨1A_k`…uÚ̉ +¾)pF¿œ'‰%Qc̀ ¬X*,r›X¦gHëÂú;u|"WQk€ÙGb—ö’^nó¹́”̃€jO¿ª‡"5üÜGSvIÎ ?ïVy£¼̃×;•Kñʯ6y™Jbå]LJ¼¦Đœm¾úP»ùú!™G/«3$$×’?=`ŸZ@Ỵ̈Á^‹Æ̉YXQl„»åÇÓrÚ·gåơ¼¤mVB÷nD3_Ï̃Đîḥ±aŒöbëØ$ọ̈˜2Ùéú‰ÈJ8ÓaÚ—3̣̀38½Å(ñ3ü&«t̉Á<3F]C…¸º¾kú*å+&z{cˆÍ1êIù¤ËtƯïöĂ—/-ÿăÿàtÓ¢#Ku]j5kkÄw+ûFƒzä\ß@dă)ËÚ¤n‚ŒÍ̀(Y[‹«¾9¹ăn/ïG&FWc·Ơ+ûùÚ–Lñ₫öă´$·“ŸKÖ|ºf>Êñ÷R½ØxÊf"Hª~¬DAµ=®4Ú5çíÂûpQ÷BÓ;Ü‹\’M³Xúo_V)Û™Ÿ»*ó3Ç2ÜRk".´0pLMS©¹†^aº Ñ$»ÎIa…/8yM+2Z¹@Á¨*•a+s^©­‡ÙmF ª”»mwđ„ܹ²¡•ŸÑ=zó̉jª₫ơĂ7gŸá([ø…f ́ZáË»Ṇ̃Lû1•Á«dUOÇ›,H÷Đ¡£ÛÎdyAƒ½J¹´¼ÖzK̀èh(iö¦cï– $U¹̀¼{ï-ǶSr/¡ÈŒç:}Øư: êw6‰D?~©ôرƒ¥ ynKªư6áÔ9ª¥i@CÍq”gUájP0ÿÊ|9«mRÖ¢âí¨©(+EƯˆiµ1ê ¾­â/₫Wûf2¡BjC,Ë! ¨¦vŸfÚ$–*Ú~¾Ml•₫EÇËM¬£p₫ ®˜½,c-ö½ïÅîpP₫€ÜZœbEs¢đ¦èưyLM¡t/»¦|)|ủp`¦fT¦bÿcχ'Á~®™kB?êô”ñX[¬_lvôÄI¶Q‘Á&Û"Bœ’½¨̃Lc¯öúyË·¨YG+ [» {ëRé \¼³[½÷ÍÄ®T¸¥×în.n«r>?óh‹jÜu:¥#QHÍ9îWbiX‘.ÁJ·Z÷°Êh–‡¼¬Vpi«­†2Đ/îïÜ€SäO­ áÀ>°ˆôÄÙɆ&%LŸ8‹,û̀‘­ %¢2s¯?~ÛM²ø¥PJƒ›.=Ø̣f£»Aï‡ôḤ̉ä5Ô$`ƒUâÆ³ǿfPRä§IÅÉơ₫Kª”#7¥d.=x²U{¶½Ès½RÎAå{^\màŒÂáêÆ<¹LŒuB ÆŸđO3¡"B÷“ªc{URåé- ‡GM©‡oX¥i•ånsí’ÿèÙ`âÊàoŒÛ=êuÄĐ́̃¢ä€—ʬö_¶è.ùïkœ‚ÔR)‰ fÁKơ…1^ˆÊHógn—â+'–Ñ£?;è_đô¶·ÊœÆº¹~;UÈ₫X¨S´'ă³»kÚ$₫6´=çơăbư¼ÍQÚy²VçùNؼ×+-G5¹ âđBëxk Đ4¾Ưºù›ÖĂă¯¢3̀å7© Ă.¦®wYRV¦Æâ¡î'̃MfÆÎó$±„7’º¾ÖçoÛBƒ}[îæ¿́â]ĂÏ­»úx¼|Ô¡ăÏø‘¥%RM«`‰§²‘Á9Î ed­‹³sדª—n¦1_:˜ùZÍrDÉ ‡·<ûƾ›wú=¨:¥É)ÊC*„¤̉Ùô¯Œ°[Ü»!ç®¶m´–˜BÁ»¡*+SăTÙÙ×p47¡µ|(e`Ï«Ÿ;VªuƠHx«ỏ íưÙüC/:³xkLåÑ}åÜ…¨ƠJ¹ĹṃC¦‹[¯¨ơL[>œ5Kg5TĂ₫E¡x ÑÿAu?&uë2ĂU:[C“39™3µĂÖŒ íˆ|Œ—(%—å‡h¯q´X+ÑÆ§»fOJƯ‚Hëø‰ms1À§ûJTe fRƯ=]¨X~4öÛ!µZá‹s±"̉H`{@Æ8.™!êư.´‚1x¢̃ïú‹Uµ:æ¦A7ŸK±,Dg'¡Ơ¤[=û²²‡Ơ ôT 9¥rZ»kÅÚ=¶ßß$̃á3öÚœ_‹%éô¢”t,¹IѬªÉ¼3ê%†Öù¿jbÔ.¼´Ú¸X(ív‘±»×Ñ[g¦öT]FöîYÎûŸ₫¾[Ïæ(Gé®́˜`ÚN8*6•:íÖ[ẓk—\J¹]đ; tˆ?ös‚ª¡¾¸UừÖ‚ÚÍÆÈáư$Îơç›39;ñ&¹G¾ÚT|g;VYÉü‡=̀Teùú“7­ 2N ¾%½ø_úivMă}Ư«R¢†tS®U-½½ï(¢t)Fq=vßʆ¶›9r¶’,Ư¤Ä¤q8ê+ƒRÎ}×y«d²v‡I™9M‹9Lá×eä¨3.jL=x€—¢½e‚Aó„VsE8ï.½U\¤¨+J‚è„¿N¾Æp³¯î{œºcWñézƠ%œn˜ÔP(¥/Ü÷ƯÈz«Áu¾9·÷Ë´êI8Êdƒâ|9¯êÂæ.̉¨IêE6+]rg ´')Ă·—C•ü˜XQ-xß§”ó²‰~ơÜŒôÅăö¹'’aNÊ“‹R ! ÁŸ—UI_ÄűY>ÚñVMœh#wµ(²¹o9Köơä£Ó²§)ë@@ ¾ńK!aí,S4§X¯’"Ï·â˯ŒŸF‘…·'£Döă†X¨¼¨’¶wùoƠoj¾³90’Ưa{` ‚L/ÔL9I¤Àî`’5UÁœ-Đ·–Ư¼‡e{®/xQÉíez„_ü©ñÁ¯̣nÓ7<4mt§â‚ø‡«ùøo©nẓ¢…CÔÓ §˜A9‘*6°º©Ÿơ±'sÅ&ÜlxE•ê+T Ơ¥½¼Skz‘.ç̃¿—8óŒU÷ˆ%ôÖha™†À½ö₫å誹ȶu¹F ~@Ó[Ï¥ü„Å̃LïnsIz-Åqµ£ºëe££öqCÑ«\¶<^§˜3»e~F9_\4« t8Dßriج¬}‹•5oö$*í'î?áàçx¬Î´•"T̉1UsH÷’ê-œ~^+%¡U{pÜÇÓÁđđ#YwqÁÁƯ&aPíŒĐØâ¤‰­Ê%¢‡·Üà¦éŒÅ²v…Th4®ºav¸gja`Ê6ü]\ØÀ‹Ë+̃ë3ƯGw™sKû¤t4l¾jn£vđEAßú̉=d-[StjZÚ~›^ôüüëfZÚêøP3¹¾¥›À#mq7²³%-¸èđ¬ N&F¬CA­x,6fơÍD_ZêI>ă_׿(̀fù–Fí¸‡'QÑ ©«̣‘’Ô‹=₫|©”ñ€çO{îxJ¼á́_đuN+á…3s‰0Íj?oƠ jœO¸̃³û*› ¤·‹ºéˆ2]ăîÜZ¾ dœË+_È?xD9\̣¥WT"ܱeu³ÙWKXÂư•­‘a₫₫øC>ÛOSŒŒzê×x’ï‹'H0%ƠÜ/ ~È 7W g§Đà·Uxk¬®WB=ßp:6à°øhƯn?9GŒ$9%j•èÓÀJ â¾êtnĐ[ê¼Ư(k•Ûë¹:ÿbï“\»a±1Œ=R»Zß­Ơ´)y x¬eú+,ætĐ;c"́[ÂÍd4¢iå̀ê˜mÍäÂ35÷D½cFºé5­AÁ×Í̃Hª̉%DQtD!Ü|Ää ¦Å =¯„“̃NƯ”#¶×0z₫#é°qЦ¨ơ-/̃/ÍâhªrC©~6á‹́ÙØ~;ÙƯG5ÖºF¡ M₫ƒz¯IåáÂB“¨g#WOU˜Ë™i.&?épé£Ứ²̣g6¸ÊåÑJV-L›t£8ơ<\Ï]…p„_ú¬ªÄ¬̣ó•ăsË‚&,yºxÂÚÏVFº —Gơ°·Í¼/ »Ö9X¸Ñă’hî%¶kớ̉·®…̀Î?R+‹’3y‰ô¾†đô5Ö;ºªÂ)Ëày‹¨û0\æA®ïă³Á=)d½˜-”*ÓD/ŒRd›L×}T1è¯Î6‚₫ăSÊĨ"w¯¯ËÉV$Aí²–v–¬3ô/äQQ‹…§¼‹âº |æ½ • §åŸ\£û8̉¢AöÁ+}÷h³¤Å®ôPnƠ¹ç[²|2}u^c(hÅà>¡Hư\ÄI-u¯fïf[`¸9–Ç£x«úăUCαwÅ6z5tz0#K̃ÅiÖ²¹–Ñ÷x̀¯ơ0¸×H’“ä3·ú…æÑ8M¤xmL}³ù±Gv endstream endobj 637 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚuTÓưû6("LAB¥a”̉0º¤$¤[’±ml£AºD@º;%¤„$DAB:Dº‘₫3ßó~ï{Îû³}?÷}Ươ¹¯ë;NV=C~E(Ú¦FáøAB̉ÀûÚÚê a ˆ€0€“Ó‰³‡ưmp>„a°H4Jú!îc``̃¦ ÆáÚhPĂÙ‚Ä¥ẢBB@a!!©¿hŒ4Ṕ‚„µ€h à¼vtÇ á¾Îß@.7$%%Á÷+¨èĂ !`PŒCÀđ!`{ !‚„áÜÿ•‚KĂ9J ººº €°h \›èÄ!€0, ăƒ Ô;À₫Œ&à!ØßC´-ÎŒñ{$†ÂâCœQPˆ¯4T×ê:ÂP¿ÁZ¿|À?— €₫“îOôÏDHÔ¯`0‚vp£Ü‘(8Điêªj àÜp|@0 ú¶Ç¢ññ`0̉lƒüj TUÔ‚ñ₫™ Á qX,̉₫猂?Óà¯Y½vp€¡pXÀÏ₫”‘ïî‚–û…vEy₫}²E¢ ¶?Ç€:; £NÎ0uå?¼ đ ĂÅ„$%D$Å0' ̀ ‚üYÀÈƯöË úiÆÏàíéˆvÚâÇ€y#maø€'́â0Î0oÏÿíø÷ ¡Hhƒ#Q€²ăÍ0Ûßgü₫1H7 ¹~  ĐÏÏ,ñ ƒ¢QöîÿÀ­XPMOQÇÈ”÷ÏÈÿq*)¡Ư€ü" ¿°˜$$,”À?xÿ;ù§¡bƠQ¶h|Äï~ñơwÏ.HÀơG!ÜÀ'ÓAă© rưĂt !1!₫ ôÿÍ÷_!ÿ7ỵ̈̀ÿdúw¤êloÿËÏơđøÁH{÷?í›x,"Ö ™˜ù™-₫̀*;­jàÛ\?̉3Hs4~e¶gÁ₫Zkÿ®4v/DiÑÏÓ†ávI¯ fü&Y°ếwT<®¡kGơj DY·Œ¼½¤æ icäàx¬ Gë_í + €Æ¦êmư1đ–Çg‹êjà 0•ư“®DÜxQÁé™t_‰Ä¬TÜƠ¸ø8¹­(/A«ZùØ(iFÚ5’,]è÷¥µ= 'Åu%÷å/ Ë&5 ƒưd¶³ ·®UyôăŸ6÷·÷F¯O–l 2:T µ-_̣£®ÏÈë¤ë¡ÍÜ›Ô 7¿Ç"ªBªƠPpgít<¼xGBüÖ¹½óe®RïI¦GĐ•n¾l“³x%lÎ_ḷ¨q© Ơ‡_ëYoơ›Öz.±ZÁ½Ê\f@₫n"1”åïb+;²4I—jæ!#Ó] .¥te& Ú<°°…€Ù2?Ä‹B¬\éI¤Tj°À#•Æëư$ă>å— 7 4U[¿Ü\Ư¦RO”iƒÍŒ%ÈæZz‰¿ZT9uçª+è^®Br«4)O†=•_ôñ?Ÿ¤•LfÔ¢æ›]ôªc¿#U˜F ˜ƯÙfˆ™è}‹d€ó?ắ÷–ôñfµ|ª/s/s¬ƠU{@RØcsË+aÆU:¹•hû;®’¼®‰\•,iX ŒĐŔR’l%ªux1dûä"í%q‘Mê’†ư|á“KYfØfÊ$£eí“7ºQÉk.a+;zËÊ ñêTLù‰ư;„ÆÓă’ß®Q±đV·z<à́Dô,2¶NÙ|¸ÉNóƠès=¼:l4ö`Pxo-W™©übÂ.—;œhøæi÷+»>ú ?ɅŶƠÎSp.—‚wn•C̉e`aßP³èÀJÉ^!M$´S£Í|{º¿Ø1‡§K‘ ‡‘ügă ƯÇwY2³\ Đ=ù¦ï̀€|…Ç0³Be›¬éư˜µ©€= £~BFǤY œ0GF·¤¾B̀ÑŸÇ̃ÖÅ–LUTÁ}N^4\aAT|ƠÈ́å~̀üÊ“4¥0í¨l©3ôĐ—ñN©é‘ Íníï¦]/a& ,Åå^/+“z`[,ï;©®ˆ–̃_`Dyé²…]søôp¥'µJùú„⻌“Uf²ƯÜĂÔ‚)©Æ±¿‰ü'»oíP•ñ^&!®–Ă`#̃qÙNOMUyI‘+PNqÅÉúÇa­hNî23µAÔÙg÷cß­Û]ë£'ơ>)Á̉§:¬MúñsÍ£c`ØD%³LuŒˆ%KàÚ:ƒZ$n₫‰₫Dđ ‰N³Ø=ó¡^Ç$céUßEƒ× ^q›ºí6Æ]Ÿ̃÷½æ¥üï9k-ï!ú ›>i²V´@‹ÂÛ’ ¿˜ôUŸ9](Wơ‰„ÄRÓ(o’|@"Δ¿‘ïèùí9KË̀¼kî7×¾́LƒË8Ơ>×đa<“Pb9^{̃ÔT³s®çé^Å  VWs[í1ÍM£‹MöƯÜØ½|‡¨:́Çä`Î @n]êz”(¤Î8¯"u¡ƯɃî:˜L7HkÛĐ1WÎ^V¡¥÷™aó’X ¼BÖ¼eÙØ3ňè¿Đ’Sº(âT:U‡§O™>y“²Èçi0Bê†Ú OEg½K×ÉTÍSÑ$ù<î« .á~‘ºuséè©%UcíñƒœÀƯ…1UѵÎú½âï_ˆ® tâ J,j‹ Û]Íđä⃒µ·ópÿ»ƒ7–j]¨@ªöb©pTÖEÍFN_çtà$ß`Đ ø̃gëa‚•ưI¹´̣Ö ÷ă7r×0—oˆÜ¸eÁaÑA›5̉ÓYyP£±Aä}) ~ĂiîªÂĂw6ésÏÔÑÜ|_+Ôç3„<’||/Zư.Ïô ‰!3ÆÉÁºt‡d#̀d=Î?ÜpKTXXă-¿¶́G5ªLº7vÊp©*rPéÙ©™˜èN«¶Yñ² ┪ůªjvONF)÷̉_çpù!*&|UÓûÍïa\à¢[QV oÏ„âEú\ñØÁxAœ‘ÎGrUvƒöúB=t+bÅ­ƒ…·ÁHÜv¢ÄDưfưhc_,!B©ï¢«ÍÿƠíß=»eê>Đd«j?ó…ñ¹nW˜É»\¢–ZéưñKk¨’"ˆ¬°gÊ%±w ơf[0Ûơ^ň®|µSu_? (Â51ÿzkEƒÏôW×÷ùêa|f ´m-‹8Rè JÚ´¥„ÍÆR3Ă¡üĂà́DØö€̣Éøb¥[.êÓØÊ–£E?h‹koA€Xc\²̣fVẠ̊¢Ë^đ,ÆæîZtm^q¥MY´‘{¬ç±¨|#—̣Ü̃ $ëÇø ƒâ*ˆœß­½SR3èa¹Ư20OûÆh£ă{n7°}ØñéѨç†ÙD$Áq$‹ŸôƯ)âÔ‚£²ñ;G/̣ï9 ŒǼRÚ»^Êóè́ ½ÿ*öá„}<¿9̃ë[f¿sL«Â^`-iw§mf—Ù,'<@̃àÑ{Ô ñô+́‘»ßVùvạ̊ÔFÉ,(Å*Cd¬gƯ),¨¥V¤cWÛö¶ 8>ọ̈Sö) ïGÆp`V¶O*ç>&%Oímotí g_ra:#¶2µÏ"Æ—̣ê 9æß7ø̣c¼¸K‚µT¿“Ü£Á»qaé÷ ^à<­kè%ˆu“mߤ5ĂzëŒCvè ƠMNŸ êa€úèá¿À ny@‘çÂêØ ±í>—=³{¸đ†râĂ›Á ¡­ i¸P·½èJ«6F[ëüÂZöºƠ«b&ÛWU=ÑÔ“§BÍ}k--_»=ä .úHÖF´ÉüŒ,`ZzWM<€Y¿wöܵuØDxè†Ù=@5̀3’6S”Sèqvd S“K…°¾éOèÅ3#|íè’VH^ñ–«.­kk]PêwG“Á̀@ëjêàˆ@I Ùï«Öü:Åörg½áù /®,ßOx˜ˆÖÊ×éÓM«́øx™ó1A@Đ»ó8Ơœ§3GvcÑ‹V;:4{‹ÀfÛ×yÄHœpúQ=ÈVÅ©ºÛ\ñmÄY„ peMÑĐ2Ø48#̣¸¢d6­°c-6R̀ơ˜*₫¾Çû‘RŸ%i§sƠ‰G«<,ÏLÁ/́jƒ̣Qê ñ–&Ơ°.ẰB?vFÖ5‰¼l± ¾ö>‰WKÁä'ÛbV[¬ù„Ó÷ëIK_ic‹aĂ9 ºÚ,Jh¥~±û$Æă×ëÚ3^Ă•ë¡ÈÜßhÖ§’}ĐáÖ¦¿»À¬¼·R§Y(ª÷3qüâ]LaƠ¢Ø0:äw²“‘R]@g —Dº‰Å­37AZ‡hx*ëlƯ?¿TÊÏ ́"Q\]”|!¢hΖ·‹kAø̉ĂßM$æÍ÷ºå€C$Qä>”ùÓAâ%ö~¯bv®sñ#¿>¦„bR_ººçùÅ7T̀¿xùEǾ§6 tk@Ôˆ½1:cèm$i¤9M”ưªU}íÖ-„ëù@Ù3·§̣?ØôÔnꦨx¹{¼Đ́WÊ8M ̉ßäHŒ4›ơ,ØØë ¾CY<V('®^—uÄ}±ªgw2™±¾Ml¦TÏí¯Ä>Æ8Ñÿ–=zÏêǦô]0ˆlûFÚ’ZR)…₫Ư-̣ég”ÈB(V½6‰nó₫e›-ă1¥ÜN₫›¸LØ{c#‚°lc₫ñ^®Ëö ŸoÓg„e¼Ơ®~ÄĐ™;Ødº<Ü©₫fép/#°œy=Î܇Kr₫ɤe¾#âc¤MZ€_̉)Gb‰NrZâxÅỶr@zNMÆ_“„LØơ€̉*»o\¾/i‘Pa T+L,¯ióªN—Uuz6‘~ ‚́,×›X_·*ÛYU÷-\&,ÚøX9u{Ơ‹ä˜Œ½YtÍađ)¶­L|“‰@!ÚÖv3Ă~¿4¦Y];Ó-²=×TLÖÚ¿ È­~)×&{%Äm}Ü„4d³¢Tsµ Œ®¼„´đ*̣®Ë¶‘A·’§ç[‚B=ǯ$£Ú AOÚÉNŒ›wew\r¾m_v?ÙÂ=̀ØđyyUà?3ỏ$çÏjâHî¬ÍIö 6°#Úd°4d–]+Ö$˜„Ù?R}O°¼óе`;åÍë  ñÔ“NïĐp)},ƒ́¸…ÊÁóÓUăG—ö߃N£i£¤ßN3ơêT–—­WŒ$è]5˜Yjçc¥¶ĂiójØ|ahZ—蟅«Â9 l핯ô¿̃H&n&Hó }ó âMx“ÀơHzỵ̈Rk•Ú^i>çp?³Œ¨₫qÿu ̉Æy*~=‹£ó/íưUØåÑ»ĂÊ2_‡öRÁ•ÎÅ˘a‚üǴ́¬¶MûijßF‹6/OnK̀?}" Q ô·§|NÇeiG4í”OÙ¾ẠS¡UxtI^¶5fhÙ"ªs7’à‚“—*=«|öfJ AȸJ(́/BOrg h ³©5ñàÊ5ÉŒ®j̃„áá‰ÙÂÚîµI>Óí…ëeơÍ,¾ôå̃<¼60å)_¡¯aÚ›.ŸK/èÅv=ßPÉŒ›Xơ1,4§Â¸2zß3>o«…¥©$@‡*~°ÖKù7}2¡SxœPé8êĂ½‘´Ä5÷”Émh1Œ>mÇ«ÛÜ–›_̀g̣ºyÁ$îYÄ_ªóo(öhJ/ÂÚöȼÀ=«Ê¢€đ S ^¥»Y(×N6oY~ßqZ¤ßZñâ+"·à× ;"]PnÅ)µÜÖlÈÆP“÷Ö’I‹6ÿd‹Æjg¹¥âǼ`×̀œYß’Ä9ÈeÊñ³!¥å­1‘˜«‹¥7  ªÙ “xóơA?öPÅüU¥+øÙ‰§ùD˜v́/Gù¬¼ˆ?ß°?ƒ_¤jƒ_́œ¨µ×u++<§3¹ Ï•-'æ›2ᡟE/µÊŒªTDơ‰‘3mc* Ÿ&|T²-Hyt(uư³1½‘ ”6ö×븽Ñ~L©nY!Oí$ÁqÄ×¹ÁZñÉöû}năôgyá˜dùƠôjÓÍDLK~â«dâKô$ߘ¬œƯƯ™P×̀ +˜sX¾̀IÓ·LÉæ®|₫Øöó9¯û*Óëº_øµ‘¡t’¸tV5æ<êIç™l vÚ­‹ç „^3Ç}<5ï˲ïÂ¦Ï  m! +*Ú|i#y4̀´Ü~›RP×y'щË$đ́Ù1 ƒ€”-O÷À„‹·Ô.:5ßÛº%lMá’'Ä¥Ç9E' —ÏúBJW%ej¾ä;™Í C/‚(__‚‘xỚîŸÈtEĐo­¦«i´ơm’j¿z(‰ÊR·½°r‰}2×̣“éêùÀ&md›‚Eè/½dĂÿĂQ <ÖĂª/=ä&|ˆÂ¾kï xpímTëưX²ORcṆ̃Ơ"Ô|°è$“øÜ§kåÚë{‹´/¹:âÍuÖÖ›»n]^{¦›Â ¥=ĂTd~@Ư $1Ë™jRÅ)\u›.·8¶Qëk —kÉóÆÎÜË'¥*ESÛƯ#È\®W› Á”Ï{îôb™ê¸ ‡‡.4+ &±›ï6wójóë> stream xÚtT”ïö.‚€ C "0”„twHˆ„0  13C HKJ*¢€t§t#©tç )¥̉ñăœóÿ{׺wÍZß|{ïgïwïw?ÏÇÁ¢«Ï+g ·‚(Ăa(^> @AKKM ñ‚$P”#䯛„Ă‚@Bá0‰ÿP@@@(ŒO„Âà´à0€º«#@@ đPB@TâÿÂEÔ ÅP‡Ă H¸³'jk‡Âó¯W˜ ..úàw:@Î ‚€‚A0€eqœ9ôá`(åù\’v(”³?¿»»;È ÉGØJs?¸CQv€Ç$á±ü  r‚ü™Œ„``E₫ñëĂmPî €q8BÁ“á ³† ˜ĂújǵXóààïƯø₫]îoö¯BPØïd wrÁ<¡0[€ ÔĐQÖäCy @0ë_@#ɹ  + àwç €²œ„đïxH0êŒḄ!¡¿FäÿUsËJ0k¸“†B’üêO€€1×îÉÿg³0¸;̀ë¯a…YÛüÂÚƠ™ßuq…¨)₫…`\$ÿñÙBP ˜¨˜0â€x€íø•7đt†ü ürc&đñr†;l0C@| 6̀‰ä ®¯ÿø§E" °†‚Q+ˆ-F̣Ÿê7ÄæY>ê0b¸'₫úưûÍC/k8̀Ñó?đßûå×ƠSÓ4Påù3ñ¿c̣̣p€¯ 8€WPD1/>ÿ,£ ‚₫møŸ\5˜ “ñ§]̀=ư«e·¿ àú«nÀ?‹iĂ1´…¸₫Ăr3 ŒyüsưwÊÿ⿪ü¿X₫ß )»::₫sưÿaÔÑó/ĂZWFZpŒ`ÿ }ù£Z-ˆ5ÔƠé¿£j(F r0[ ›y„ù€ÂüP¤2Ôb­ Eí₫pæßđ—Ö¡0ˆ. ươqÁdÿĂ ́€ù€ 1Äü!1jCư^ă/‚ÑÓ?ûP‚áÖ¿„'(̣B @$˜Ơc,€—F¡ÖßÔđóÁà(L 3³À ùµf1¿3f7pë_~’Ô»"˜ĂSsđ¿́ß ‡@< `’é 8øQ}EPăI™ƒ;ïÚ$₫^̉‰± ïPö3"T—̉ˆÅrœ~zÚŒF̣t§€̣3ûmy—“Œ…Éï^èJæ*Oá#^få [f«˜‰ë#́±x¯cFÖ :¬¬' ̣L]Xºw#n¶ËXÛvésPxß«è˜wç¤ÎSUnÔnn-ËKÓ¤e7ÚYyŒª·ê5XùAw/sÅ):p5̉,,Q;…UC²ù”$νôæRO_ïeçƯ¶u·€µ}ö—(J¥G½ŒÂ„¥FsïÈ/2?¸m§PyY©Ü’Ư¶î*\äN8©Đ>´Cn›³Üwé̀¨¥ë$ÚÉÑT‰{‘’Ơ';[ö=Öl¢(¶@í!0Ô"ăåçQJ?`uú2§/X^HC  ƯƠ¢…#fư"½ú¿.o₫ ÆywU\ •–Ô@¼¼4äeÚŸvAµSe|µ[)\ç°ư™„ÛÀäÈÊ'F3wbqd¤N¨F}ơÖ ‰5,đ‹(É#¥N­Ul¤û`vk,mÂÑŒúH¶0Z¼€Ư»_0+>«Ê¬üN÷Ñù–@P¯ÖÙ'ooü­RWH̉Ͳh˜EÈ'B³ yߘĐkÈÈ’œë¶²jçéưºr±©’§¯Đñ‘ÆƠ³ù¡¥8Láo–ä6e7:ö¨=)îÖh“ÉÈrh™Ô§'§Ó0, ˜ó7’Í”øaơqúªƯ¶Q.å:¦›2*ÎíH°—º®%³Aï yÚoïE₫Vd+xÜÇEåG ¨¸ØI£vẽ ̣„lyEªØiû±s蒥Ƴ¹8D'änLv>ø9¨»«QPFF}îåB×̣ÚIĐ =­ó°®`‡̃bÑ[‚ÇÏ×UÔ|“ˆÔ(?LJ”²P=T¾êÆÜtM À)ơÓ0£y ‘y7{­°Küjéën¶¾¢ÀyzC•‰På™ĂfEÓg NC ·)úøÖvFÏ•‡Q‹Í¾Ư…ï±[¥¹å è¨=M°—¦Ưë Ô›N­ưè9ÚvyÖ®"̃V´Î`̀–ư#Ä,Z&¹§¤8E‹±èà…á}Ó冷QO› -çóV¢E\Ûǯê½È®X÷’{®•¾8ͪû7›̃Mƒ©¥S·gíơtÍÇ¡d ›ä(å±5†Ôđûë&twmáxÍ ²°ÎXß'+đJÉ£C ëdîÔßÜYç;±Æ¹m@F̣¸Í!7 w÷ÊyơÄ)Fy~£‰‚½ ïd!ø½$gdÜ–NZäÁXPéWÜØB•ªºLÆ·œSăy»:¹Dvjøü‚ûq†Ơcœ/I/}”D›÷`wÖ±c±ç’™$ôà;=¬X7ăŒâ·Ï\]›8“È%A±t|ă á—>;Ñ5m Qûçéă??-z’̉ă+}äRê*¼^pzmxÖ̀³œÓ̉Æ!ấxEÄVƯmÊ2ÓR§̉Ö5hỤ̈ăZªØÏ`Éæ—]Óêï0×îæåC8àBïXK“¿œw§­„äSP=ÑÍ£’6ÊBÍR–çOƒLV’Y°EnkD ê¨ØëízÀù>ºă¹rLIsđT–KXêë±ù i|O¾XI•z€&lC¸̣Ú·¡gêX́œOÊ‚́̀gÆ'[CíêC¦s& w›?a¯µI“ܧ üÖï WßEMå:û§₫&‹›đ4½‘ª9R#;Æ~ĂWºI8aFéæï öüJ×*Öíסsån§–cijË?UKûC¾Jn®ë¸;Ç.§½âÊÑ­û ×̃ñwă‰ga·Ë•Yº„w.¬$¨†{enj‰û+„–É£gnMÈ– ·7Æ6\*=*¸A˜Íkç•yâ_×cƒKÓŸG|öÂú#pú*GpiKÚ/pûIB6˾&ơ‡±…­gÆ7q1Ÿœ ¾•‘̀—Ç~¸z\Á”| ;âœ$.™Äµ2TÄÓX›¶él¦+Tkû6K ʉËÀظI…#üP7m\âÛô<«x.|~I "yèù` Ûϼ8…ă éè¶+G9̃,KN)ç1’‚…&DŒf }₫Â~p1†ưî.Ń缒1ˆöñÅBíÎ =e¾lÛ÷lm±»–oÏ®^N¼xnơƯ <:.‘àëˆz”/¡– ô§Ụ̂V R±âµôö)îŒY0•çüøåÓưº„Z‘*•»Ë¯”íªy%ừˆ»ëÀÂïMüư3ƒ§lW+*)F ̃ë…c=†V™f=¨[0ö¨µuo)c|qe,X5.¸ÏÏL+ÏKAú˜WÏ–öxw¶Ăm—8 Ä5ôÁ₫ s7.Ñq,àZûƠ¸È 4¬@OUl»úă„!c²©ô'aIđ±́ÇÛ‚â8POe’D*3%­A;Á¶Öù·g¾œiM̃ºGI5''x̉Œxô#Ïư£àÄÈ}Ç-ó^ç?dQ#ëâ%x,x:îÄdJ,{¡4¤ ®ÆV#Jˆû9-uÍg$h7·ËĂ›,l°Y«÷—±ˆ’<Ún$gñ@óøWd|¢æå–ùW-\³P–:; b:8Wú­~ñœycOßL̃m›‘­Aúƒ™Éߢ­=>*“Ë'![0@OSº@yê¢ñêŒL¿g“J^u˜B¿tç|P_=BơM6Æ¡è:FO{%sưQ†…1Ôäưé±Ư‹1ÙU‰3׃¯ÔC]†¢%øñyTăR~SàµË©‹|¸Ø¨j̉ÓEwßœxĐAú"©™ƯFå¡ÁN˜ÖXÜJUÂÈ,)1•s¦9 ÷ñâö¬K( c™dBí‘ʺMo[»U÷ &6,?ÛPqákhpÙnăuÆWo¦6ø®’ï2¯m0‹z°‹¸0ˆE’t—(8ÚM‰fîĂK7́¦5ós­ˆY㨠|{Ăᵑ¬„P+®ĂÚÚ´ưĂÆ‚N¥uø &Ơ—·vÑ U²¶ííi–2ăÓÇ7¯×ßqd{sˆ/¤^å”W—ă ä¾²OÜ,jgaLX~)œ2e$`yĹ‹;oÅX/*ŦnZñT,°̣ö£¡_˜"F[íª|8W&4D¤ỊƠaê3€SÚz¯±¡.4Ínr2Çc‚x'̣̀oÙ¿Ür<ô:qµÉë+ă.h$»à8*†ÄT7©Øœ|+ÑR<_ ²00¸o±Ä®Ï?*-ÎzÄvSm̉½Èƒ¥1^àtS²tw"ßV?ôHíơÎÍ_Ï”à˜s _ &?£Yđ̉S¨µL¯ô Öë9Ú‡Í;µR™P)39Ÿ JH&¥íƠùăÄl7_y_Ó=tµÈK -R̀‘,•u~k¼́p‹S×ó¡hÿêƒRWk5ĂáÉÜçê!)÷F»¬ÂḿĐç_p—Ê©ä†m’‰TưµHăX]˜—¼o¢Q(`áÅíl?éèÍ~“ H/°ÇL©Y°Ôñ— á0ö¼Í“ÒöC«<ĂƠv•ªĐëx”R©ïđä"AF´RSÉé#€Zậ`íªưœ8ÔH”¹HíŸíÀ=~¡tQûƠï§băë!9““üÜBëå]­ç₫âÖäí ï È5É'm`ơêd|Ă[&Gè”×﬽̣ôn4lăÅÊ|¤̃ ¸ ¡DG̉•ï ”æS}¥å}öÎ kI¢Æ­W ß­ê¦́~$È"!ơđ̣NWÆ…1ë[5½¯Ûă Q^Sj¥›_kdóŸÑX̣¯Ê¡5ÔƠ²_ôÊÀ}à¸dÉ Dư4ÚÉM/jÖ²v́”®”b̃́bl¿đÇsy`/ËÁ©hWTüóà~W_~°0o"Ëè¥Kèă³®qxÀ‰́3©C—h5¯_k_ƠđÓëü+¡îÉæÁèÅsjöWĐ‚×È|~^FkdÓnBËÜx\Û|mö çä½gßoåWíLH®f(Qáô!XÛ̃ƯÍ2ørÖqjZØùAß§réŸMƠß~91"XZ)"»³'́¦¶’(Ir.̣¡P9 ̣î „’©†.‰6M?%•àG"[!ÏVÉ•¡²̉’“HNæow oR_@‘7|xÅj(AÙ”yZbEă ùÏ._:tϯc/œöëñr+/ªm÷̣œä»í6’ﬕ)Ä[rS₫hwXWKôÙré˜Ù*’¡wÍrµa˜̉Æ›ư(ÏÑ©„U‘S£YÊŸ‰Rág0«ƒÆPÁƒ¯e~ê¿€J¾GŸtb×7²êªóÄ ËXÅ1áäy÷ô¦æ&pMOÔŒµ6¨txăÉ„×tô·Í¶\ư¯È¥ư$’ÂóÚi48”N‰ ój»a7gUR‹§Ơ‡̃˜¢7ûqÇÕ̃ïƒ<Ëü×Ú,ÓíÄf̃Â(̃÷’rôc¸`ï”\£¡₫›6|iÂ8­6`Û>Ơr%XœU0$r|ù º]JƠe¡Íq–;̣MÉú6%ïëåÚ“ ¯äÊe¯´$ 5ïø'à“R~%ägùxiÇØÅTæ¨4đbñ̃´?ÏaGùƒÓ\á‰Dâ€GÊpV’¸È‰@Đ÷đƯ§—Ö̃x°ÂÚÍ¥ç´ï^O"¨øH$—ég@©K3²aO}DùăØLÆÄëï=„»|OÀÇû/5ÑĂ*wv×?JT…o›Dç~2Y"¥–̣Ơ N{Ps7˜́>̀¹ÚÓñJPÖ·7Ó‰t-BĂ`3‡/NA­¥Èưvâ§9Ơ=Œ?{₫ùÀKPºe|sL…À¼3ÙÄrwz(”ú\ ïÀ>¿'äË–ïƒá®ü’O+JĂœ ̉6 ÷„.û¥'vä°*ëԪ͓KoƯ¸=¢éürevy—ÛỞßđÉ>.$|N2ˆËr!"¾b×~J¶²ªG‚Ÿ̀ñJútÈcD]0È@³z₫°´ <7¹+†SŸÿ¾OúXă¼-³Û´Ó©ùëĂbuzåé¡[ªŸM•å]ÆIá&$O.NÑGQem㸻b>ÍLé7JV¯%ḳ¯‹qƠÚËTÑ.¨p|óÈ×¹J4¹ótfIÖ́ư-‰i|®ùúĐ›ô…̀ úJØ?Ó'ƒ€’`Uœ́˜+5¸Ü¥2(ö¡ï#O’±q»e—Í¥¼9iê7ÑÈ‘äøœ…®&C̃NÓÀĂ}ŸQÈ;c•j.g"¶V»£Îjöô¼-eÿUN¹µoùk@ê] o<È›‘ÁæÀ¹Yă¼́-x’ɾ‘zBh0[¤»¤XA€Ö7®ND_§½©£üBv5> ư|¹“‚{1ËH÷Ö$Ư)¦³”·Q₫øKœ– ßÍkơZ2Øâuơơëí6ƒ0Ü̉½§¨#Â?S̀Æh-ëÎÂ`±KŸY¼‚öÂÖÑTQ̣æ@…Ưƒ–z₫Œ>/·ÁTÉe¬´ù J6JùÇæu¹U¥êëR_̉])̉®b;Ă¹C×»µ[ÜGb†²Ëă…ܔӫ3ư]nGo9 T<«xrzç.Ø=o0º?ŒëÖ‹ -q¦nߦ€.>Ÿ¤w4hÊUñ¢ÇAÅF¬ê¹;¹Ç†Âậá KŸY§j̣Yóf5o¯±®"öAÈ÷ú¹™VΟ²%°–öÀ/FU%W$\7F¾s/W{œƯsܨ˜¿/ưi<¡BFk›øƯëú†ùÉÚ)q»bà£H¼øæº,Ÿt)ûGFƠc…P¢ûRˆË¨lN6J&ĐÓ¤;4@Ă¡ë\ÈJ́sŸ;V¢(û&jµkIz“YÙÑ©*<\Qsx §ë«œ+¬₫$FăV~ ™²feDÜ=́¸a½„ î§Œ<ú̉9ÍÅĐëÆÙDæÆÆV¶{«?îœѧ29đuæñ÷¤ñµ€j©j½'̓]¹QuûéäjLơ(:=|îÍ(rjE£ øEéT){Qrøè~QTøCƯ·Vá Ư?î Ï91˜&Èîè¬ß9wŸ£v/Yliz¿WÄØ‡&‰«ªn½µÂCxå†î€º‰‰ˆz¥si5H´¸Â.ïè-|è£üü.&Z|À̀̀Ⱥ?ơ<µàêVơp>¯$î°p›̀Ë–çÑ&N~ßøĐee«âđ/»­Ö‡­5_Ϙ›(®Ñß6t¼%Óœ₫ôµï »WUzûÛM¿qê:w¬¥4q¾¯̣FơfƯ_p"9—ƒ̉±ïRV‡h¿5–/霃–´I¹‰9UMu1ë°}̀êËJOTó^ˆ“#LO¹i KiPÓĐÜeÄÖxëñá‘ äÄ'ùÂ3:Ó§føơØj¡Ë­›^L!Å'÷×kwˆØ½‚6Ûßd̃-‘óe&ß­DjÛÁ´iäU¯³¨Rù¼­đ$R}.®CÙÏâ¦*V™±&Î#»¾à´'á²Ï»<¹zÄÀđé4—-`­Q¯5™OÊ‘ú$ªm};“YíV„côöíCö©–*+rd]F%©5).Ü€jwØ{¡Ê3̉Ñ+ß´§ï°úṔ®Më̉ùḍÖÿ¬́́í4Ôq)xyóâÓ~o ïlÇûÏ}»{í‹)Ó”Û‘?-¦ñ>jîê?Nbû”ơZ2 &(3Œ¬ç‚Ÿđz€+G²)Q•²Df󺈓Ù§PM?û=âépYñ£vËGW~ăỊ̂DblñoÉe«(QâgĐÁ"CVVÉ– ́K0]¤¬k+¶íṂ”|*_i)Úf4₫l¹á¢jP³F6ä–Zñ² Od9«bB]ŸÈb[ơfx§ü23JëtI3&c†ükIq.‹é=Úo·ôÇĂ“ÈÁ‘t3z\–7«~0ø‡-£¶s¬ü§̃˜iBí†üơƯfêñp.»¿ÉLM½À·Äaß+i}4<ô½HY¿u/LaŒùud`3U×%ùpÿư!*Ÿ‚̀­g5_ù[Œf»9äx„+rßÊ™®îp+èɦ*êN:Ư2…î÷OƯ¿014ÿ¹:Á endstream endobj 641 0 obj << /Length1 2696 /Length2 23804 /Length3 0 /Length 25312 /Filter /FlateDecode >> stream xÚŒ»P\ ´-k®A·àîîîî4î®Á%¸»»KÁw îNpn¯33w’¹ÿW½WTA¯­k[ªhȉUè„Líâöv.tLôŒÜ9e&F## =##39¹ª¥‹ đ1¹:ĐÉÙ̉̃û' ‘ H&j䲓³·H»Ú˜XĹÜLÜŒŒfFF®ÿ1´w∹Yäè̉öv@gr{O'Ks Pÿy  2¡0qqq¼ÿË d t²41²È¹XmAMŒl*ö&–@Ïÿ„ âµpqqàf`pww§7²u¦·w2ç§~p·t±(Nn@SÀ¯‚̣F¶À¿+£G ¨ZX:ÿ-W±7sq7r@K 3ÈĂƠÎè%¨HÉ€vË₫mđđOoLôLÿ†ûÇûW K»¿œLĹmŒ́<-í̀f–6@€‚¸,½‹‡Ë{€‘é/C#g{¿‘›‘¥‘1Èà/æFq!%€¨ÀÊs6q²tpq¦w¶´ùU"Ă¯0 .‹Ù™ØÛÚí\œ~ñµt€ÚîÉđ÷d­í́Ưí¼ÿf–v¦f¿0uu`P³³ttJ‰₫c!ü–™]lŒŒŒ\, #èabÁđ+¼ª§đ/%Ó/1¨_o{€¨ ¯¥ôÁÛÙÈ pqrúzÿ©ø/B`b˜Z¸Œæ–v¿£ƒÄ@³¿1høN–FĐî1}ưûJ´^¦öv6¿Íÿ/ƒ–„ˆ’†íßÿ«¶÷xÓ±2è˜ÙL¿–ŒôÂ÷¿a,ÿ¡ñ‡¯”™=€ëo¶ 6ưc·€êŸă ü7–¼=hkªßK®ËÈÆhúÆôÿ¼ê¹üÿmø¯(ÿ·%ÿß„Ä]ml₫RSư¥ÿÿ¨l-m<ÿ1-­« èä́Ag`÷¿M5€­ĐỔƠök¥\Œ@‡ dgnóo-Å-=€¦–.&oËßrµ_WfciT´w¶üơ¶ æé@§eb zëp­ä_* èr₫›R̀ÎÄ̃ô׉1³±ŒœœŒ<@C!6€7èM-1€̃Î̃ä•ç 0³wBø5Qv6ƒĐ/Ñ߈À üqD~#NƒèoÄ`ûq0Ä#&ƒÄoÄ `üX R¿+€Aú7q‘ù@\d#¹ßÄE₫7qQøq‚¸(₫F .J¿ˆ‹̣oâ¢̣¸¨₫F .j¿ˆ‹úoâ¢ñ¸h₫F .Zÿ".¥Ñ¿ˆ”ƯÈ´[–ÎÖ¿M@îÆ¿ˆ®±“‘‰5ô02sù-gùW₫÷Aư«å3ù±‚™ØÛ€–éßœ¬¿$¶¶¿YüÚ2Ó? (%đwP¥Àÿd`b…Ú9[ü₫/GWе₫*Î́7˜ưYAËߘí₫Ăû—óo5Ë/èö›Ó/Áos¶_æö®Nd˜ÿAù~³ee³đt°Úưa’ưÁ‡T¶Ơ47ë? ¨­– ê¹í¥‚úù;2ÈƠtºèA½°ÿMälÿ5¨‡ßjP0ĐÙî?ăgeúGúß᳂X;€ÖÉ₫q₫j•ăïơwtµwÛü'" ëoÅÿÚ(ö4ÿµçúGú_c¦_“ưc¿ëü» 'g ­åW’í— Đíi°‚8ƒwÿÖꡳ͟ ÇÄbơ;-è9ÂàbáücoA}sq·ÿĂĂơ¡ÛÄ̀ươy{üAá=ÿ€ &zư&ätú;Ỡ‹M\@#rùëi z£₫ü×ï>@ ĐaqÎ̃„'ØêSpû]Đ;wºƯq¾̣]4j:ïE§ׇ·°ÉÔµYëN7BÉCßPV¶Å¨®—ˆ½Z`ĂZ•Ú} â•§vÛ&±ú'„>÷ÀăÓ© îù<;ú¨XC¶€wJ“ç9ºr¾U,@¿sï•đøÜW±<:·«´WË.ƒøT1M­¥P:Koœư‡Æ…íÜyöúf-wâ•H:Á÷8¥Ø[{ƒ9æ₫»×j•*³s.®6ä5Úè…·đA4ö¼wYñJÿ‚G o1Q.̉ûÔ:úæ̀ZKåH»¦z·ÑůL;yÉ€`Êwưè;‰ơåMN$ ˜µm‘è.ơ,Ö@‚ƒ¯f«í7êƯfV©øK\ÓŸ_³HZG₫ÍỮ «CĂưt·¡©­wCMĂÛƯ¾¥}øæîL4b:+ËÜ™©Đ.c]@) ”÷KnÉœOĐF!¼̃ÂxL[EŒŒÚœĐ=à£ø§ly>1¾Ơç̣_7fQçmÜÑô‚^ƒØå_;SÏÏ‹p-XÄ ³B©̣3ź?æ¯ÅR*ñ|6ÎU0œoTcÑ‹–{É&l±-\ ³JIốÎ× EèzZƯs̉ŸªW«µÅ±*ïG̉4 …ôrƯ˜lƯTV ëcګߟW»‡ Ålªrçüª́ŸÛå¬.! Qr»ư½̃˜ôDUØØ¶)YC•ïa{¬«äÉư}…”(9eñ¢\Ÿ̀!o˜Ï¢̃‚hqn¿ ÖÇë&æO wT`o²PVcȳö–!I :†Ô/^đ„ß©¨̃zm€ờOmLm“yÛTë–²ö6xØ¢̉!mâ)ˆç·ư3®Öù¨¢"^̀"×ÔÜ…–đë3gûëǃ£P¤°,ŒüăÇ’€¢rʬ5ÙbZŒ×¹Ä«-¯lÁ¢Øf¾gƯOk×¼!•|º]Zàdë¢áj?à'÷Ø“s§=$̣•́*ßeDàîXÖ’Ï%åÏO!È2ƒa×ëäd ₫Ü.ö£&2 Ñ „39@„ÛæưN‰1ø)6åB]‘E,Ÿ8˜»•uăeRè­4r-=ôbï'éq0i— 0o˜8öz̉ơÉÉ®£ïs’ßß%^E2”¿Ÿ7w'gKu¿P 'ó©} °WâßOEDœ2üđ…7›‰±Ü.ư•·íĐö¬¡é~!kmÈâ|-/x½úĐ®±±®.S`×Pà#å Ñ`4Z'ù맇"/+Ów‚+>—‰;I°%d$öô–f_'W¦C–Ç 50hË ¬I—êOS3¾78„s/LÉu×Ïüu[[÷XXƯˆu2 n¥Z êÎ>×>aöï™Dâ1®T^ÊIßËåj1Vƺy³¯ă$Íé̃ơ œr‡2HXpùn!“²U§µdèWdp~ Qw¿Ç––ñ6 Ñ–Èé@ $đ\¦z!CÚìÀ8£ZĂ.¥HFfóxøPƠL—ˆ½¡Ó…s4 ¼ÀƒĂ•§`&7O2®ơ »•ÅMïjÿA®¹ÇkÍ5!=/l–&£¦©ïRåÔ+WçxÙº@o¡L– 5ÎÈÄí¦î¹y®K5…@ùv̀DïÏG;Ơ#÷Ľv²œ3&tkåÛ{Ư“ÜÕø“÷VwN aºo®m2ëÙWô¬j ¤,F]̣…mOÅa°¹™̃Â-¤˜Â•z²ßv-­đʂqdíØT.Ư)Êéfêjs$¼îʸ~àđ R&́P>·K=YÈ?4̀yï( ̃¦1Aʺ™|·Å„¶l,é¢$‘;₫aÛ+ؤñ=´§¨ÚvŘœq1 æÁ0ă¶7?q=‘Á́º'Û¦ƒ\QŒ9Ÿ›P]ˆZEX–a·ë” ½B$G¨pư6Û†§Æ{¤ ‘´uAÚN&., ,˜Ó[yÁ>µ»W›jÇ@ăÂXèÅOÆÇ^Ñ}n&Uuư?¾ÉsGîà•Ư¿2¯^¿ăÖÈ%‡NPé(Ÿ!Lü‚(é ‹'!iú¶ ²œÜü¤DŸöóª¤mƠk«×D”¸ ¢»ù|oĪĄ]7úPɵå¨^Ü\:Z HpÖ·>)p6É´{ëß []¸_Ä=‡/›ă…«ƒz^á„Q\Pä&/ú5RN‚ƒ‹LJỌ̈…"QhÁüƯ¦ »'x˜4|¬¸Bă%¯ üî‘âX‘BŒΰ[h¢ßÚ´MÅ~ăÖî|åâ8˜Æ̉änEWc€ à3ƒÁ̃rqÚ̃8ï›ç@¯—dñ÷\pOúK<–­U&!×ế7Bô:¬…* ̀ÆîI´&—̣¢Sy ¾èè§UÄ>’tbÂ;•<´ºEî¸hZ[ú«lb5c+‰˜hø¹+-)·›ç‡₫T„BolЧN™ W8]é¯\iO·I®øyÎßûy 5L‘#Ø·Ơ®çy@2¦9¢Î â¢i0‰{LœÎ¤®̀_lă£=Ô=¯—P§²IôH½>ख:¸]v#e„Ƨß,ô•Ñ; s}$Ă´kÖ©azèu©0$½-ă›´–›”©Ï›á)́ú1›h ₫@ƒ¸%Qγ±YlúRơíñ<¡åi¦=‚·¿$?y»=½̉¹«„‹·Q"ID̀0Dư°Àb£c¨—S)q\¼Ø^±£wk 5Ȭ"®ƒd…¥ưV‘këX;Ú™+ œ̉p»éØiIă[>©øxĐyæz ©‰HÆ,èM–>Æj3«;Z¹âÙ,³Æú'÷Ơ₫c.ă×Â]…’\ôá1q4½U†CÏ(¥zøđ¡$]¥äoïÄi*V,U±.¢ôå7¦…r†AE¡*䪟å[e8bkáh•Óçuœ3Ÿµ®ûĐO´¾íơ øo#o´Â~"Œ‹ƒ«‰_½DÏÈu}G–Œ¢üÔÈ®­$8,µ¸áB^¸ó’Ơ¥SFÍÑKñơ)ÏbÜ.ûM=î¡ǻ²Ñ·/ª=”N~³ëé vvÉ̉²ùXˆpT)‚ŸöóF&3ªå ¼eÄ×—Ïơ­3×¾Ùưø€ub([[¨·lT¤–̃̉çưæ¶u&»¾̉ºWÀø“)̀ƯÉVèơÔ9ă[ÿƠ¥ö:$Mz_ùí°óơ¹}&†± w¼ç"±ˆQ¤7¶ ½†Ÿö—ă3Â=Fl;Ä c‡sgÅ4S2º)Ư›ÚñÙL Y^‡N(´fdô7>-28è‡zS¾Đxy–¹m|öªË ưÉ,à6Ûñăªưz>¬Gܨ˜÷{‘-BÊr¹û"1,ÜÇ®8¼– §̃‡‹\ˆôê{{á¹ĂªDx¢”l7bÆûƒ¦ñ¤À7«ë§åbëF:áfw¬₫’!y˜>?`5x–%ç0P´ĐIX„²-^=íƯmJê’̀TêÀÜ1¥Œ§Ÿ˜°ÉßqU8đ3sH· ?_5:3@F|1§úYî©ô₫­ ¿NÍçX¢„s_s7‘2—;Eøƒ­g µe#n„ÛĐ¡Ơ·²HÙ^ea}ea#›Î#ÏyóZÙÜŸØäJk¡Ö÷N—1Î"`ÑcÚª‘ßù•=2X…lô-æû®&‰RhàûV́̀)i¶ÁH®—î#ºHU·Ăû ~§_Ô¿\°Ă¬tJA1øyl·đ é«ÂÓ¶‹<4,’]Jdª´Á–¾AȲ9FB㇬₫XhCºɓ2á°µsv`ï—î¢Úøf₫¤›N%‡øP¼Ê¿ê®Đ/Ù÷Å— Ñ<°*¸”oô[®¹w\ ¤ë­`xT~£b”æoÅ\Vr„ˆ)H²V¥l9ÏAáÉás|g·°ăàb#+”¨Ù `ĂKEpŒŸïuœ.؉œôbQ¡íÂ/Tdêù@‚PaCd©”N‘[N¶¡º˜i$ƒ#l)í2Ø:ȳÉp€k<#|¨{–ÖŒ"$Sª7´[fjY]£Ơ|;ûz÷{~–Á`¨¦ˆGR´’€ƯÏ‚KÁÍjí–Íäâʘ‹Ơ6>f̣ /Jé½óWaº^Í´¢Z¼ƠQ •µ¨Đ¢Û ü âôâiÄSÔ’(ÿ>ÉCȯU>…­†"ÈæŸ°º>E…‡p—ϘƯÔ4$*iV€²íŒé„è±’‚°Gÿir®¶6Â:µfɦ—‡"¥–”w)£îGm6µ#î•iØ4Đ$P°-e&¨"I‘Âû Ưp t³ăDÈÄ×ƯV¯¯`é»2ª"öôlßæ¾˜¡ÅÈ1!.ô8‡N 4{™û¸É`æË²’y4R2°M"Q‚Z½Oi&ç<;K¤©¡ö́ûtÓØÔ¬ƠÛ­è?;On56@,ùơ,RẠnh,†Èà₫K$ÏAاñK¿ø-éf·ü·ŸôVHÈa+—)E,Ø̉yƒUp ÚNFêº/«q²á3Œªüé0̉…üL"Bḿ5Àä¨.caœÀJI— ç'í´¼­– Y|l Üj [)¥ḷư6ê‰ẉ¯g¿ {'ÀˆƠ¦ñ;è#,X)XCf7fn;Ü=¼©ætơ\!sºLY½JvE0ó5q́¡eëöü@ü¼ª÷=ûáƯ]×ñ[µ÷Ơà_]̣¨÷,¹%/ó¾*„ô.SƠ ÄƠ¿¾8NÂ`ñW¹lổIp‡o^ôzå„dJjë’Ǫ¸-t"MzmëălŒG{’ûË«n5aáĂ©Ñ<Úh·ÅN¸Ă¢›a ¾%°Ü—\‰ 0›z¶nV¦?ʼ~v£ô°¥G£SÙ₫&Ú6ºhăùD„Ă‘ˆUđFëzNäsuŸía£₫—Z W6‰LØ»ÆE¦’Gd†¨YÄ—èÑ­s„ ÖơLƠvá¢ü¾0´{fæ\de}àz‚gr÷† úÓ-27ZÉ R„Níxáô×Q±œÂoîxƯĐÇF„ï̃ä{íY^Êc£ùZ ×í >F́úöùy ïi|†Mßµ sIc´£yëư¶ÖF@»Üë*2y-’¿yŸó„ÈNvb°đ̣LÆ`ØPF₫Í0¥àtµsȹB Ơm¤­__÷é#MæÜ³̉đf™¼±Yírû×µà{øèÅR5øv¯©+óæcF;1q® âySé¼=è«ÍU“4íƒæ7¯¬̀zßâXË$3Æ 2ç/3ô»'eöŸ²̉ÔN®>¼¹-NH˜äà?¦î/ºJ—´‹Ëh-«â 9ô Uæe`vy–ëøyï¼[âÿhÍ%¥ù3Á¬°«BPë«@Oцعû>¿G ×–oĂœÿY{‹¨…­ lôú6{sÎ̉>­‹đeÁåäåEk“Í0[üƒA¦Gwt¤ZO$¥fBă@X°„ ²Ú »¢.Qzđ₫Ê ÿ÷ºÁ#Äÿ÷.)F_¬™F]ïL¸3µ%¯₫‹!×ñ,3ÈÑÅ¢kÅơ²aj±¸pNäÀ'µâ¬wêssôˆLÇYî S+̉â–Ú̀p XÇÄâ¬vg{$ºÁH Øm’j¥É0ˆ½‡]€ö¥—³OH oa¯́÷ôˆbn³ï¶í¥ß„XÎbçÎU™{ùpăçt>›6-$>Igé®|Æ"¬Æ¿Ä29^ÂñºGöqùjÅ4ƠŸ)´ïôYÓ5Uó‚;*íöí½ ‘8üeCÈD²úZ\\BÚS¦RpƒÎʯZ·&7>Tà̉²€ í ùF=ü‰|Û° Wè]P÷gđè’¹̃¬Ï檇í«;úÆå}p0ËTŸhÈQî0UwÔ˜Q‰Û!ụ́ÄNƠ=Z^żšØN©‰¡‰ÉÅÏëe ÜÊ%CÓ»`&çUjÙÛú°i¡¿I¸}8z\çW8@º4àmZâà>Lfù`ùƒÈË)qLÍÛÎkÄ—]EïOÑ`û+àc£* ]IƠA©X^Y§4âVÁ¾èYC½‚̃´³Ox>ơ@H¯{_±fE¤‰‡Üeet.¤zO…¶Y£I§=€tôÆz\R˜Ôx†èƒÄ=¢OLá`:”|ê´x;f×ÏSû»{‹>ÑOp‘&I%»­]„Qÿ÷£o-t°D(à¿ôå‚Yæú¼¼\\Öƒ>’²̉E’Ö„oÖ†oÙ GœfI·%ˆ¤D‘áKZœŸ6~ºAYêIy©º-hƠ\Dgh£¥È©ÑI#4àƠ”¡ư™f´££±„9µî½¦_D È5ơă]¶vÛËO²EF wTªÀ¦Á¨øöe°·̉M×_e ́Ø̃wfçQ¬xÍdF[s‘noî£ËÇvV……ΣùZô¹Hß|DJVÈ€|é‚nƯn]KœCa«0i\•̣Ùøaư”ûV°ßö$BcÀ7xïnååä`l qí‡JØ’ÊîŒd—¸ưrºRMnà×¼ùpO&À®é°çMƒ‹ ÎÖ”%¦¯Æÿ€2]và`!Bw ¦2>ĐyÂå§ơµáJ̣ˆèF¶MÏHdh‡ûå3öç̀Œ ă =¶{”Rm¼¯è₫ôíú·qÑF+.dy’÷Uq'̃Ʋ³»G@÷XOa,¥ù5néô³bÖÄèEØéêÛ–½6Â6ß̉Tß`IxC0 |³Ø̣sÇwúÈ×ßư.H×>÷ôê»́y¡|ø̀û º´Z!£qξÈRZøtLƯ^~-ó9:UvñÙá6ß1äÔuXÿ¶₫X¯ª>₫Ó;«'AÓg‚¦Pnåó7oŒ¾²Xđ+ïƯwñz¦,hđ[6}vr>6w`M¯Bxâ'?BSßm01Í9n›˜!°Gw«°¢îmZ²*¤Xuo—IpÄm‰Î Cï?œƯÛ@¾#é ‡—áÛ{U£ó>okËïh@"%Wï‘ÂsÍܳGeÚăÆrĂ_+Iq;! ôÿ̀PâDGzL=…!÷½¼™Ëa½îrŒ ³¿H˜"sfÂxƠ`rô¶¯˜?¹_%Xd̀6>*ÊœùÍí–Mhå™ÿÚÊÀø©A!±©¤|-ÚàơV>‰m j£®w¡!«¢KTËäܺ(&AI!àa±ôva£’&F€µ̃ •e¾Ø™2&g㓉Ơ ×:gL}·¸K‡g|2̉ yJ`iœ-_{M6F{¸JxäRJEiU¢IóèóÊÄÚ̃ï›éJ u—ÎûPG~.S©ÊcÇ¡‚+qÓÆ%7ïŒM+Ăpùăt?ûËatGÑ=•thBâ9e©™J5¢n…&:œóQ×¹œK̉PÍœÜâ"wpÖ|Q3–I‚N)¯¾%×Äö m’wè?=ú‚û¡Ê¾hâ:V¡gÅûE#ͱ=Ă8O_Äê«è^İë™f=]3̃ê9³?Ơ>^O|áû%¤™û‘\̉=soa«¬>|ØÄ?©†:}º»% ‡Z̉‹ Pl,é•[ữ½ZS‹Ư–,ºU–.±ø²`,P) ¶"”đKf}ëä5ÎÊ£0qÎúØ7U*9Ú ¯|T.OF*–¶÷|iÖÂÆåÁBäƯÅ ZpeWÇí…â\OT¢©›ÇMmÈÁ0H©¨:œ‡>Xc.ún[} !Ô£V£:ú€¯ù½́Œe--vÆ!¤´P$û†6̣¸Ë¦"đ ,×éGgœBBŸ×7úÜe¯₫¢ä²Ú¹ˆmå"Z l1‚›̉´ü±‹Ơw=µÍ…¾£$ø`w°Å\b[D RJ?S÷ß½Åt ‰¦ưŒ|rfĂúĐ ëƒ³̃´̣KÓ>ȇªJ²{¢ËûLÄB¥–‡ơ#!~‘yURɺ~Ä'ßîˆÆT%/#„Ñ*Û³BJ"uɈ…E%i¦Ú†I}2úö•₫;BéÚ©-›nbi{¨Ư×#C´Ó#ä”i¯ |eäT¡>̣áWöU’§Ôy^ˆ–+æ!“vđ«̃VQxv®³«¦¿ÿJoEQ$N1Féßv'}̣–©THdk¨&f+Èè6¬R®!uÍD漆;ÔuưÜ,ýĂ©Ơ.ĂƠ‹´gÛ÷£=ùøn%?̉ígî¶––/̃3ó¢âa±ÛzBtf»o›J{(Äg£®ÆFƒV6ƯËæÄØgj”ßÖQhª¦Mn,%³ßCđă㻤Ñ*MLP欸¬†m´\¹&¸Ot7‰&̣5L”+9S´pĐU…ql-Q ‡Ưû‘jƕ푛>|eÔ†cïëÚp<â¾ïD]rí '©<@¢°n¼g£Î"‘mï°]"([L¦œ®FF75|›Y”§Æ¿â€¢¨‹l|#1€&`W!Û-½{‘øá ëy?±ơˆ‡—o#R1»Ê-G(½Đ×¼è0‘ˆ*HÂÆlƯ—°j5ö+«|fi]”ÏÁ¼ANTøÖ©=C*<&’®ÉvçjÉx4TRªÈ†ÿ¬ ='•Âö8á•W‰–Ëg°¹ÊgÆ¡ưQÿeÅ• đö‡‡¯E/Ơ¢@ƯŸÆhÛƠĂá )1‘QAÀơưÉ́ơͳ|7WI"#ăxsIzĂh—s”_â¼pÂÛÓ¿Øñy½wú"hư½ z{”¨ƠEG+­ÖäwPùíăÈ<¥êósèûµOcd“’•S{‡h\‡ÆƒbI đqÔđzßÔ“áé±åJÎú YvB?¸ê`ÅB}Đb³/¤²-kÓƯ~Wq9³„¶´ÉÊ¿s,©™æÈ·¨>{Lr ({*=Ô–LĂ]‚\/÷™âA©¦¡$UÖâ$Ÿf˜wṚƯă₫Úöée‹y—, %ÏD1B¹ç"s{»r×/Z±­t"̃:>i¥”?~¾„x‚²vMsơ*û#3±8UÖƠjđd»ăºÊLsx' àN°hyđĂ½(̃5££8á¢Gµl̃ñ¥„¥\ !#Û©®ûZW럃]‰Ûög2Úë–‹Ù0 µ‚…{œD½Æ(bhKËŒ©BY}@…¯öô¹h-À%¶”=̀¡…[gU¼éÛʈ(Y#£D‰‘Gđ±ü¼k:X‰µ´Uæ¹Ø:´Zà‹•¼+×p=x£hsJÎHëlÁ·.ˆrÆGIđ³=a íùF{i½7woï%ª–µDÁÅB\m<Á—̉púŸZ³_”÷‡̃gP»Ñú2¡ä&̣fâ ¡÷’1>@€w+́ØxĐưđ,ßÛú8øNs—Ê¿J}Ø~¹P(ËDđƒ…äTa-¡cî7gxêYÜ)Ús:5½Úº@ú©¢ ĐẠ̊¥7øø[ñV¯§,i’}å<Â~²úc;É<—1hïÈ~p¾qöaă¤PÎÆ„rê&̃3Ñ#Pñ*^`GF¦–đ%!|Nhn_ªÉUluXÚTiv:XøÁ¨ë¨‚¼ˆ=<}­'=ÛL"Á‹  S¥ṛva¥I+«±‡o=̣“u¹å…h™å8 œ–•=½m-µ\đ½ôÊM¥”Ö³e½Û₫³'y–ûNS*×åcºv¿(ïgùÏL›7‘¢rÏîîà@ÜÇWÎ"u‰©^(²NæSk»gmæ¼³cHĂ·öù®³M¡²o2,«”KÂKf̀MmSX̉˜ăú& đ és…z‹…Ç€?YđÁÆë“%gQSưÇ/gdÓ`Ø¿v/^¿ZüSAg¼)¶]<#VZŸD]F̣Óư“€âµªËơ`³!HHr  ™K@ )&ùtƒ-ùy°¬ơ¢wƠ¡úZÉ«…ÎH?’¥2˲cÔ¸3yTO3äŒu]w’#™î{‹]¥–.{:½gÊÊz/7Ă vîĂªP Üüú<œ—?_îk[w§qµ·˜†b^?…í«JAQ5ùûÓê@ÙLœ=ŸÆˆ.–ă<¹}qj–ƒœª÷£ ¹ËŒ¶áиb@ *q̉±52‘.ªÊEăCh́YAYĐ"W¥Vo ïzW0˜8M_y&ü`R«Ç–“q"AP·]Mh¦º%ñ¿”ÓH;…ÚÙ‡<›’Êư±ÛȨî’&tøÑwr}ÎUYăœïÖåèçd¯}Ư(c±œ™'÷E呪¼¾®]@ub2ƱhîYư,¼Ú)ít­ĂL¦ÓWxΧ˜ÜS¼/n/Obn¥&Áq¸ƒ(ÓëSÈ•ïQq̉¤Újñ (–ª"’½’ºhêU‡Î1…Y(ªy8 h ’`GTØÁ!<‰]±đ‹º́(ÂV\É„đÑnÎå³|eưÓư¦ÓÆm©b SUṽ×₫´+É¢XóüM]ùZ3i‘ç±Ê½[̉Úcøó<2 ưYÚDeC¬6 3‹’ ̉h'ín*Fq̣–j3Ćxÿ¤ƒÔ~oø̉¢ĂÔN–7;̀¶.Mc¦änx†Üb°uV D\ư‚s"œÜªüyÔÂѵÏGF=²†¼ ¼£¸Ê™G…½Öö!‰IB ÷‰[KïÖư“ûB¼‡çù¡«t-Ч\rßñăđåg±aœ-û€³8R†ßˆ¸ç´TƠĐÆwơCPS>ï¤ïI‚¥ È„+) âó½1¸)•vñU ŒqŸ¦’xÑͰ ïL!=sCl¶µÓ‹~ơyÁ¸¥Ưœ)ö¡¿âJ—áâwŒî±\́º(\Q–TwL^Ŕí¨ÏCW”ø8—ñåK9GDÀÂÓ,œË$¡IÅVB U½ÿè•hP:́'W¯~0©ÏL°çøßVI¦Ơ „Ë:üª‹‡̉NƯJ¶æ€:Tê€è':¬¢›‰Æ8ưÓç{~«<†ésáÏÎ7wfÍÎqâà»ñ0v‹ÇGƯ 8ặ\®$2 ÷̀-é0₫ë(‰¸3₫—NÏA°Î¹¨ău¦ØiF7L,₫(Á˜²#Lß8¨i3ưb}V)?ºñô@'é(‚SûAÄGÏ1Â.9Ûˆª€á)”h Àç—+®=MÀÈkö¢p¿kn#¦H™̣ăVBĂ÷ÖÀ­ShCgÜ»ø=¨]hU¼y úAÍŸ„R—G¦ïK#ôC¿¿¨\5¢ÆØbÖ¡Á»¿ç$©%¦¢®k:U áƠ]4mÔ±z]L<Î¥d³ñÀ‡®n¸æó”Wɲwâñ±t¾Å™–@›[¤ç̃)URJ;S¡L 55Hô ËØHˆ˜o*—ÖæŸ?”†áädåö÷Œ^ßø̀í¶èú¯vù.ĺ«êđús8æóT8.¶¨ôÙUFµèûLß³BsØƠz_ÄƯ˜́đpnæTqî„ù±Gu–Y>äƯ`ÛtŸ]«¼ë5°+.›®v:©L)]a!ùîŒV™ơXÏJd7ôlíJJRg_Xæ1ưèíjMâÁJ¦â4^Ëú¨¡ÙÀ‡%ÜÜ̉–ißæ₫Á;êº$JD=÷qzW$=̉ ËZA:‡0 ¾$G3 Ñbm×q¸‘ˆ­kqœ*3₫Z§t' ·a³²ë3:…ÁÍÆqGe3o˜ÇB[_ä̃$íåÏ(='ÑnL5Ùî@[M}S ˜WdkÖ¶F÷ÉÔ‚/.o Ø7测*1mqÎNxºü6==lx’¹äFŹ]ù¥áÔ§Ăkb”áÀ$ç₫lœØâÏ-•–C2ŸơîrfW˜ĐÑñ&̃§¶÷Ä>¡j#tM5lƠ… -D7×Z s17r{ç׈Ñ{₫:xÊDÆ+„¥œßï±hu|FbÔ/µÜC´:\]Ÿ-ùäIX:…NÏá v¢:̉_ûêë¾ăvÆ ¸\|Ó°ËÔÄrºƠf±:xđ€Ë̀ùÉÊ·_)Ç"x£=QaGrA¡ü ¨ú™¨ÿIí²_Ÿ‹é+o ¿æCó—üg”·F†©û÷'|8#CṇîÊU2­¢«éKz¼L>Œ[‚S˜{y í6„nO'vMgäÚ%ÈƠe‰†é0§—×¾„:Å)½h$/üï_ÖËä4EêĐăV¬×$fJƠ,™~Ö(}Âà‘Nw_ü&́¾́rVÿwAz¨¼M( ?Ûö ₫ <½É7#Væí¾ấ¤ưô ®Ư™®²Æê°á|mZ†‰¥´X ;=—³ƒêz~æÁö-˜Đ¨B.cñt§=?öÜFncÂ`ü‹±/mú¯ÚC+‰4‘ƒeTÄÀtl‡á°—ÄÖ˜DG)f 7~*̃lú‘"ÏV4̉gœÅP̃×iy[ÖV?‚́UÚ̃‹¥ƒ½ÿ>5lÏ»ÜDÛø¥ëĐ+Ÿ 7;8L­åªơ©«}èđ‚Ặ2cĐöbàÄN胟™Z!RøBZlàßsVơÂ`GYxäÎûĂ9¢±c–Jú ë6Ø r¤çK¨k…`q™¢ÏùçÛ̉–ÂĂ7ÛˆđéæëkDđ`fY mYO!§Ăt;{hwp₫@±4ƒ$'ÑB̉‘"&EPÜhp£D ¿Ihiv[¾œ̉A("„$àtâVƒ1ï—,'g©}2ß̃Ÿ’è.fË/<* Bù0¨ vµÛçÁ™%a=ø=4iÁëÂøñgĐ&¯_£̉”Œlsaú„́z´ x~ñ],**6Yơ±Q¼-œÖ“<[ˆ‹Ân¶‘…k¨'x.₫ A]µ›3l p©Y¬eâ%…¨«pÙUn_̣‚Œ̃f̣C-:ï-ÓÅđ}DµÎ»+7äf—’È)'QZ·₫Ë) ¬·£Vj¥=SIóJRJéôl,Đ~β¤é„ɘ¥>ø;Î¥ĐĐo1Đ‚•»:{+ˆ»¢ù.ÓÅïDef¹­l3Cjc†¦s ̃Ưç¸á€’3ªA“î:wt³ûF.¯@=VÏâ.êÈ÷ÇƯâÙMñ¡†ú½KÿØÓ¼‰<ÊkR@‘Rùlsn8 áÏ·¡rײC®³“•9̉ÿ;wåïä»Ï²\o±ÄYđá!lÊ`Ó¤ \é3|Ìx÷Ѭ¶÷Í›Tß/ˈT9ØL,D0̀³»T6œÓW³¨ea®ñBøđà[øC˜ù“å¡ĐôhZvYL’ÍP*m"§küꋈ9IR‹Úùn(7́œuÆ’oo¾7mỊ̈i[Zv<óÛáB²`Ÿ>E­´B¿tÈ|ÓÊ}„ËθM ;6•í§‰ApÂï¼—é¼áô°{ïoë‚èœ'•œœ£0°»©­ZXạ́¥“îk|§|ú, ÜÆaf⥗†aơ ³ù]ëzoC!±œ¦JÍ®2₫…öđĂåi=OS"Ul<”}ÆUbÙ¬¦$Ǥ„~ç•ĐX§tNKmóN©F×2Ñk×ĂÑ z%izYùR&6'XCMåP[̀v÷ªƒïgOGrÍ€Wî6ú¬`vP"¼ü̃L@l(S6ø4ûG³í¡^@iI|.ƒÏÇÙo÷±è.H°Óo»³E%+²ƠƸêؽ©]{6÷ôü´½ï®½_-›:yî~¤Ø˜,Ä[­Ü“¯1(3L42Y¯ËƒWB»¼ÇêG9I©;A0-Jm6ÛÓ›ê[j•®•ƒj.?¾cÏ´åó¹QĂñYzĂ܆N0L-×›RưÉ­‘m)(C Q1¡¯D}ÑĂ›Äx±ë¹™ÓïÅ@‰¯íÄûàµØ8v¦quûàĐ*qóĂ“=Ö^k ûPppƒ÷÷FÍđp·oj×q E˜i?VÖq£/4¸ÉESêè}ĐNå ²·²B¦HR÷ÍßIN*÷“ÿ$pF"×/+`…;m ’5XÈÿLË9Đ%Pw±–J‚»Em’¸Ÿ„C_g÷CánjjwÇ›r%.³0Y?Ŭ™́j@;xÀđ‡Hxd+”C\s8 æbÚ#!Äg³߇oläxûXs‚…[{|R₫ Qïơ]9.bN0*´<Ơ|l¥«9 GR÷¼¬X~í#“óœAGZΑ̣_‘Ä~eÏ!Kèµú Ô#E¶ 7ÚÁoÂKöÍíSÊ2øŸÅ—¨X¡V"¡ºïÊ•·-tE….6Öåe8bµó ¶Ă×cÀ́ïYr\ b’KÛÛ#¤ODĂM`…°_Ï· fh( ¯æ7"̉û$"!÷w̉Ø…¢µµ÷‰”øă|™æ‚§̃"Ÿä¸ÉVÿøÉW7Ê•oƒ₫© >¢G½IƯº(2¦8GyÆçÓbÏ^YtüEñ;›3Ù¶-eÀÏ*ùÅôaƒ3Ȥƒ"OEN«EË<$µÜSµ¼Y»®ë¬’œ2ư¼¥‹®Ư₫œÎQñ¡Á:0ÊLÔª³íµ†›q̉ù́*̣Đk̀<<&7MÙ‚]15·H¶‡×µ¦̃ụ́ƠBƠ₫{ơë³Ê¯·€»¶·̀ûMe’ÁaLỡ±É@Jœœ6Ø Úï†UñG &5 íôr&;Y˃{«SûôóÅ~¦J[+óèc5-5.º\Ôºt]Tkq+b‰íĐNÂÚ8°ƠÉ)˜2û–xùú¶£W ‚“AÈ)¶ss€ă™ákBéAÙ{ ĂKS€˜ăZŒuÉ“ QÏI8!ébt‰Sæ˜Z£›®ÑṆ̃øPf‹ÍµŒ̣Đ{óïîÆ.B” OcbmPÀ[U‘XRÈM=`(§7¸æ#Œ ^—YgÇ»Jx‚pZEùjr³ÍẦÛé₫Mr sl½(6cn­¨z"y‡î₫R`Zú₫_nÚ!lô=E9ăYÈ́R$säDmSë:…́„’ ̃ü„Â",˜‘ ½?B¶T’âŸå̃Ê+Æđ ¦¿™=x½ [́è‚f§Q†=ă`ÖĐDB%Fö×ßË¿O¿TĂ s—í©Çsè']tAàÆ¡âÏƯóH₫Iá¢öƯˆ,ÛÊ­Q©tẒúÏd•₫Ø̣bFA!÷œHX];ƯªG*Y{¡u ú  P6oăèÄm{bµ¾i¶"W¢è ưÚ›ñ°r".‡ÉV™.âSCξm»ó†¢çƒè;±ựÜ"ƒ¹æ%X7ôí¹́J¼ơت:›ï:Püưè»äÓ;íFªƒ±«‘–›ˆÁÏ’·`ÊÁ‰÷O{¤ß¹V«e îOËÈ!ơeÓ Ô@ÿø}¦œ}\—”‡&ŸÔ,8¢•ï¢ÜÛLÇ"Ûr•ÿ’€̀%_ÆË̉ÙmbÆ–)ÈJîƠ7k+ù¥”…®¹"@˜ ¹#pñŒÎ‰²y´|>?†a@s̃Đ„lL×`‰Á°~ÿC—ßܬ’4ª’$8PØ0(ƒ;¾½óptíµ¥«k8À9₫y°‹Æ¥`s ÿ³̃0Ç%æ‚Ư")t‚¸C¼³F‹&V"ñ]r|úÊÓ«xÊ¢V÷å©3œJÀoƯçơüG W+£6„˧Mئ/DæÓöB^ia¯₫´Æ4jă÷…³đö₫ Y…¢²ª̀Œđ êVæ¡)x‡!‰ÜàÙĂ1Éçô–Mvc³8ÓS ñ́B¼Ë̃ºôYñ7C -V*_ƯÀMḅK•Ë̃[Fsû~¦ưÔ?ÓÇ¿=«AUV|@P6Τ[´¹Ù¯·rFo2VoQ¤[(®Ơ ›W—§`IÛy'ÎƯ¨ 5¡<ù̉牂ój¸z]åœûte‚ĩ¦¾É¼mG¬g¯Å‚„±µƠÎjAtîi†ÙQ'́ëlàm(–§̃!zơ'˜oñá|”£sr»üĂ ¢ó³mềM!b¦) ™ÈêpêÑÆBâ`°Qº?¶́këÁđ˜ÁZCZ§ƠaXB̉"“×ôơ‹íĐÚ 1wÛM¨GgÖ¬ÉxbÁXû}3äâ-̃̀> ‘ Y’N&Œœ£|E•_{ÍÛЦ€ôy}ĂÙP¶¸¡邜v€7WœŒó6Zµ̣¾r\‘ 3+Y•‡´ÉÎ8˜2 8Íuk.­x‰,”ôû„á«>Ni¦\—öÖ3ÏÔ[ü‡Fd̉kj^e½Hâf-’4uô ½å<ƒ?*àG{7±À*TAî*®‹¿Đ(r·^3\ DYÓ—ñsr² |ê;5®ø/Û1Œy‘)çOï èM7½£\Nˆ›à¿f` ₫¸ÓÏ*H£ßæB,ö7×A.¶&e\0èúaĂÉI°  Ä½iH¾”*È`@”ăT́‡¤¥>²›²‰Ê‹Èµw|'3@½SLiº¬§4`ă‚ñ]UGv½¶RuH¡₫˜³ñựé7;’ TS[+zb‰§­yÿ×=#/r ÉÓ’ÁgN­¥TiTRüÑÉâûsẳA#yÿtŸ(’ȵ#Gôz‡éG: º3»F¢̀>ùk”Ûܼ,Ơö¦lƱùjđG±¤‚6ÎÉéÊŸ̀pB¾!lvÀ:q»ˆöl:7¼a­Vv;øÈ ÓÙ—ÊCÏ|æ³QYơ„Ôhră ‡áxÅ¿W­Ư.(D¶ÆLJ,iw ¡ơZÓ€S]ì¥&œsEHÅ©í-ŒƒĂE,uv̉M÷3½éjÊöcí&œüT\²S ÔzXtV̉Ó×{6é ¬s^=ϲ„DNßùú9q"kdÛ7I¾^/¦ă5ó…¯…́öêr~t̀O«=éµî¯\&íùani¨¯ÂtÏDá='€$«ZÇW#SÖ́í#Z̀b½ơéÆjj·äŒ-éÏ `,ËÛHø.…o(«ÙĐ#PƒëŸñ³EÖ fGZ­/268fÄSô46—ÿO!ú̃[v@ŸRO]cYàA†a‹)GÁd¦¶ÍÍ~o2T<ŸÓaÍË_ÍÚJ;9Aï†&0ˆr4~îéQítpÜt}É\âG¯†:„₫ä¡MD₫ë¡ûo.³üÄăøñ²înœÛ{5¿[âq–Ö4.x†XÀ̀µ¬T _?́„—k‚_ªc3É¿›°T&Ăy Œä¢6½¤}ÍQ£Œ#‹ĐrûR«ñ«oHĐÚ­]ç@NRŸˆ ·«¼¿¿ô$^%MxIÀhƯü•¶ÁÅo]‡RPø˜C"¨ù‡4~c éîpn $ªû?3x÷ è•;`8#k.t”˜À~ Ó'ˆ¾hơ× ÄÓqư–9<¨C*”uôkÊzVĐÁÜ|¬vËÍÑn₫íwÑ©µî\³mÁë|l‚ÇqH‹ƒjg0&rîÎÈñŸØ̉¬¥zµ"èi!rP¿(êGµHt[ĐæĂßk®!Jó·~ø ç?$óS;´÷Ú-Eơ°™ Ëf4 ÛDÿ¡¿ ~ @%ö†KsÏÜá0,đjP?´I°+Å‹-$7#×N k^đô”§«€~80̣æçm5iéà|ḍ¹Î8§ºĂôªo´¼lU¦ 1‘G ›\$'ç>O#6|I[Èơj>‡—é'Ô!”ÖJÅVÈæµÜÔrơéF|NYï¤Ó†ZN¸Ù êÍ)AdqHe¼ÉZiüOAy>´}÷xd$}§Hă>¢̉·ÇÖX½$`; ̃H³ +]ÑcaÏÊÈYø{û%Dö“niͤç¬ÏXl î÷»ój E]Jÿ\,ˆ…J%ª·ø̉3üµ@©#4æUw>Yª¶r ÷0;é¯B́€”Đ“—+ù}•GßOÓr\,×lâ„B7̃å-—'} và?褉jc<·rŸÛ{gÄ̃*†§¥ùHöÅ\V;d¶đj¡rrùkŸûÑát˜± R1Ä;À,‘¸‰CÚ€r™3E0v,#ßU«)Öÿ2‹y‚ÙRÀ:1aḰ¡³të „ï:, Âi«ó²X=®H"‹êBxsÀ–Âđ§zî~aß§M3_ch<áÖOW´6ËÚÆSÀqÛ1HKx4‹Ö-Ó[‚›¯RŨ8Ú{×̃¼5•o9Ö”ö6¶`yÁ k×Q \ŸB̃vO5…]>eó*̉AØg~päaèF…eLG¼%mÉbƯ¤åíEÿgŸ‹ó»iÎÅŒ]ØëhWp™ƒ—TF¼km²Zx¤dôØrÏG7_Ơ¥m÷ß÷ñà:=d<äüă.ÀDE₫Ÿ<|‘-üÁ‚XFơö¡$˜®Pđe}p‡æ_p?Ư/.Ó#¿"Ư çqlHɼ¬e´~(=œw¼ `—̃úäCRï?}¡Ïă”°3Ư g{k™‚çß±âHØÉƠˆ«… ¦n˜:ééʧèMđ&¾äeáv·̀<Ép"*ƯXüän¿²"Hœê÷^F IÜ9äoø/Â<Øwß7|;LöGgÄS»,\=¦j5·2•$¸4œ`k€È₫FmtÂ`up+EWNTl%àæKâXMO0QË̃÷‘]‹W:;i¦ æP)%¯̀á6èDÇ®ĂÉÓn7Í\\¢v3KT9BéÚ#Å6¬SF/Œº£tè) /-- `Í©ù§–%đÊ,^f/ú‰Cx]¢:Ö̃Œ₫'Y`¹W¾”gmÑÍŸî­)iÀr@=¸È Ư#˜tĂ|xÎg(ăÈ^ÊNâÜÓavúmPwüS+÷̉Ç·MÀ·”xpùÑ"›±íÂà¨&pƼ\¾¥ZóƠŒWs~sz¨à§•åÙœh 1Ï]s«¾Î 9ß°÷âĂGüc£(P\X| ú̉Đâß6å³­¦÷“±ñÙ„8€«$eÖM€hṛ‹¬b'î ñ¸Äªp§Oï’¶ĐO˘åÄ«K79d́}ƠÖ(~Rñ‘¬«:°£v_€R{í76ØÜµ̣Ơ èŒ)̉CL ̉Ë¡€r¸´+l¹,ug ”ÇÇ|P…‘#ˆˆ́} ÄdØm*ˆÍˆÚ5×ñ4hIO?ÑBÁÙà₫ưŸ_¿$– rXÚ'̃^èđóL C9ÁïÍœ.ºrdr^}o¾Ö¦Ăôëâó–â–i¹qsŒi#đƠÆå¹bå kïíH-m¶øŸ-ƒ §¡)gSÄ́/œbBoLÁ»ŒƯ31¾Ôé¯r³ơoÓf¬ h܀РóüÍơY‰ YJ6Ä»‘Ưe!cĂ™@9ÓÖT¬kU@ư¿½ :¢È†êƧ#;fû ̀7,IÅÚ›~¸ œ&Œ,óP₫'́¤—#»Î}£@ñä&uíø-ơû^*ŒS¾đꫪa5Ÿ|3‰H=f_âñ[îë6‹.S!ܳ6óªol³́Ÿµ̀ùScs|ÔåƯX~„â)dpoÅí{MơaƯ“}£SÀuÊ€áÀîàí>Ú² ³@5];Qđœ.bîU31ZEiô(üg–¶(6ïÜ·evâ=j̀·Ê¦ƠĐøơœ¸ƠCûëJVgƯÆư5cơx]’ª6Gr¹­E¢7»DÖö±••EDüg),E]E4â½à…€ä–AÅ:”ÄQt›.hÛÊ"tYFÚ[j”¯¢¥û …‘Ø;ƒ×)2ưëVˆẨí̃¾6^< ,qªÁ' Óú± zï2Ïr÷*Eä¨xpäáëĂܲ ê£ú#ÿ)¤%™À­´) ÓLyó/P„!”27îăJC$£ vî …gNƯ h¬$ĂW>ÜG* ›Ơhnο­ˆ¦€đ‰5~2vé܈°ƯÇÆ=Ô+ÂĐ`~g­ï¿€¸Í$–̣ưƺơåĂJFÊăyăàÀ~“sWˆ_„J«>a>é÷”¢æ^ ÙZ¾¬Àă“Îʑԟû6˜ƒ³â0HÊsỦ¸‹j‚¥Í,÷ö“í "œb“̀¦%Æ[¼Ă&èeX{„\Ñr±CđpbVƠOÂ9̣aÔwBª°ĐJwơj´́Oa ̣™³¬’´;:6+€ ú{+a,xxưaư,œ –ï++pi h‹ŸºÛ[[ÓƠ­÷®²DQNÙ¨ -f¡O^oÉ5;Öađ!§̉Zæ?Ï`ˆ6HFJpoÆềÎÂ7¡WÈc †‡Ÿµ2ü‚«Ơ ñàb‡vi§Œ¨4đHcs“Æu¬4YK±Đ[î!›ÿ®"s§é’ S|"SĂ₫?­¬6qOû~ÁÂ*ôyUܯHN©Y‡Á·Á‚?ÁƒÓ&·^ŒUHJùM‰¥É˜Ë¡æ„×f̉TÑù±HY?~ë §¬èG³_»_ :2 c‰~z!¡BẠ̊½FñƠG¶̉èÎzu™₫`¯=¨i”wt3^ET…±}±jIfŸíc:åÓ¥,£rº@GæHƯưq«(h›Eơ Iá~\ç±4É–ÂVt9̣1Æà%Fs²̉Är?_,`Ư;€_ŸAl¡Qsg6Ô¬-GØ©DKyÍîŒRea£sU¤V˾]G›;tî Øñ=D~m+ä¢đÿÀé·U@èpIz#b’Ñ—lh-Ùÿ ‡¨as¾¬üƒṽ«´°$¹0.b„ 4ư@qw ̉ïL’ÙeÇír¼~B›q3gäצ­O`¬p•æ_”®32Ü·ư pL¤̉_?6ˆ¬ Q)_Đø»`¢Æ† »YÊj˹Ó~vÈd—Üd^Ú@MP¹&f+ƒCfͽªÜ鋆jÀmf'ªÍç4~VOR`Ñ V¥ˆ{exüÄîVÿviQû\§¸qwÁ¼ †ƒPF ä>ínơ½ø@B¾́²̃¡ê«öJ—Ưsæư'UªwT8‰K¶ öW“p'0©Đ;°ÊÄ¿́½ßW×€EKéEè&²mæ¢H„In;{0̀—®SRV¶íˆ`ôơf@E ¡sO#±Ÿưˆ©ÿƠàú_â…œ8~ưÍ+y -øÅlË[~ ï÷ĂÎØfK¨\…ç₫=îD¦v¿> y‰Â2lßf‘SèÈ)½Áó¡A—‰¼¡€÷ÍGC¾ ÓĂí„–ÙÆ„Teb%Iă Ü/dˆ s̃Äóm昫 Ç‹î൧ ûúó©$K¨ï.¶“l›˜”8ưƠê†çôR¹Ưp›,tÿ!+`)ꙃ‹¥¯È₫²ơ@;ø´V[¿B5£›Aéƒa—ơàæ©ÆzNî„c ?Y¬R®¡hŸ¬u£Dr¨•ÓBúHJ—ßÔ»3»̀Ơí ơ đÊlƠÄqv¦\_fUœA‚2é—ă­`Ⱥå]bMÄ?®ÈÂ?nWE¦7HÉ2èIˬ*¡cc_‘$m‰¾̉₫çlđç²ás‘ûcV½q XÔ•&°UËé̉ƯÜÏ€Äï• ‹> ƯéóC}1'Ø*y®ÊÁ¼‹…Rûè•â,ă#nÁ₫v%[Ñ;!Ă9{ Fº»A16?k?4t«ă{~1úvÔ…/G?AÉAL/4̉„)dwG̃ĐVd÷G¤jíKÏ_h ZÉÈak,y} ‡øÿˆ È™ÇUă¼¸yt¥ÍƠ)”ÑÈn=wK›Åơ*^®¾d³Wûô9hJGmf{Ü)jâ:lµû"₫“‡:Ë´!đ±UèLÙ‰K«PÈ<_±'̃߈́‰v²:‚úbÉ Ùwª^bwŒú($#<­;5 »ü-d]L;w÷áuË[!c"6ø 8â§}PĂô„mºk¡£²ß ̉PAósaÔVé—‡‚"ƒØÉ÷ñÇÙO§çàl8á¾9—-Mlø@p4ÍRÆôx½D³‡$ơNM¼KôO« wÛû+ćcö#˸9>p#ƠÀ:°Ÿ"³̀P{Ï;Wxµ₫ñ€qh…•f‹‹ç¥đ†<É+—đcïÆÇ:—{¸< ·}ÆĐiO“|̣bU¾ùïzỒ`óñ è²¼6ëđ¡ q‘WG£ØœG¨î …-É¥µ¬…¨ ˜)¶ÎØe—'[iá+rËlI\™xƒ6S̉ÛÎø»|ÚVfk(¤„‚}úfF•fæ2X@˜dGY²QJ¾j]̀…+ç¾÷†đŒƒÂ WQ`YÆ÷{J/ÙȉHe¯ª©©^ÎƯÂ-‰đ`–ôÅ<’‰̉„ç¼ưüÊU©.NE qDtY©«² Ø@]× Đ%–œûÙ4™{ºP 2Ÿ.œĐă:U|^Îñ]uF€Cä aY»̣@´·3öq9j‹£FawƯÆơûsls-%ÖƠ&¨ºx‡+ m‰EÇ)Y'Û²wn×!,¸"…·NT›Ă'3n ßkù{¢́ €h¾O•Äqh¬v&˱²€ÈVơù%¤Ózç8'"AăË'à´¡»Oô™¿ƾÄ₫s¤Ó*œ©ºUôlWÁC¸”ç B }Đ[VµÎ6@Ă 7ác“Ă)̣Û¸¤́ζ>¼äǵSKUs¬Ûç{wha÷L” ̣½©¬ïœJư YµÁ#@æœpGŸ-x`áÈÆïß̃ȹ( „{2™Çë‰x{³¥jĐ„)¼ÊjVßtÙåxØÑ;•/YΑ }S’è.Ó¶AâCJuyBúy´êUu…cm LH:#Yª1b2 4e49;oï74d+ÿ\†K I}f]K’oX5^E€ =¥±…IAº{Œ¬Ù°NË«mN=#êîË uä¥?;&á^Ø^ ÚM!cǘ£‹̉Yÿ$<#y‚>ŸsĐE¤­Ñ5 ‡ù‚9!.}̉3¸­rP{q.ÓÖ˜méC\.î͸áîª*‡’­*çz¶uà?ÆÙ£ 4_Ë+™-µ·ˆÔε>.­NÎE×[ËJ‰À z¬¢ L½å¬3}P“U‹EóÈ₫«ï€J¹æ>œç̀.\tªeqz̉‚&±.J™§2$Z·ÜĐ4a(U!op2Ư<Ưf5@7¢ØORPÔC îX=Tj_ßUÁà0g‡»Å™Åú¬Ơ»O_d['.ƠW>´GU€ư_×Ù‚ªóæ:-K©Ôû­̀rà ï²ù£l w=Zó¸}Ï%îµơô._Œơö ©ñ(ÉăkĂÀƒOyÖÑv/ôÍÊ+b¥ŸuÓ¤bLAđ®Tq₫™=¿Ö†8"9ăX˜Næ&†gÓ!ó˜>„ø€ß§Ía8Í~©/8ѸSgÆ2£Îí£IèCŸs Ḳ‡áØ _:Ö£€2§³$JOqètW P±áiøkƒÊă!Q0†=öR.×jÈÍUéÅôÀƠ‚so*X¹øëÉPDÈDXWU¥¬}±êÜâtPtD,@?WÛ®„„¾;ÚCo6 é(ÛDf¨¼ó TD}*G2¡”8Iû]¸ÑÙ₫ô¤ŸH7O\\LwÔ–xI~L®CK'˜MΧOÁ2v—Ô¡iÛJ_«-`î:¯ü >f&(‘×DZḌ`à4ß“,dàp­̣Û̉WX„OjR¥$ï·3ả’hë~µ5¡Œđ±ÀÁq<]7~Qi­úßæór‹Z‚q‚T)«JyDD ¿«%·[Ö‘»)’Fă#HAù#PoÖ!yú_¡e;ZÉfy:!ú3Q© ê³\ă÷DÊa>ú¢+á̀Öüæc !aí<ÏH̃{lj‘Hfđ®Cæ& GĂO >ÏÄóZ= o¹`,ÎW‹w{̀…†[çÀçF! bÙëF•5À3d_„O„M̀è^…ƠBÖ׿MÔXl°>°”cRÏX@˺́• chE@äs]ç»É &­Ê ,ÖÏWU&KEăÖẪcü  YWf¸L¬©–8­1]\N%tÖ%fˆ*‘QBä•«7 “=”Eust¦\|ŸÂå%n¤ØüÍ!&9ŒÍ\½•!WDAP^$›Úñ܇ºd̉€f—3í@¦̃ˆ5,°ƺêÅÁÔ˜Ö¥3̉ LĐ…Â\́FHÀzư“‘v§„hÄÏJ(EUhÛưƠ¶ Äo¦‡³æ©ˆŸ?¤ÑÉg—Aơúº!k‘ ̃˜ €nkºÁtB”u<»bíÀö‰-£<º]ê; Á¿ÄÇ/OWă€;6o¡gÿ‚¹4FÓ:1 d¯L₫÷ˆ"În¨z;đÛ¨O’ \^JRx×gc(³ü ä=1ëXœs ÿ=£=°5J‹*xî3p“ơȶOê“)ØÅ(ĂZˆÛ ‹Eù˜¢ ˆlȪ‰̀¹{Uh”£̃2Ä‹­¾´;bÓÇ-URă`_¹ûHÉ× -+fÇ‘:w6ûoNÿ%ë÷”̀ó“KZfW©ù¤”Üt!ȸ•ååÏEµQùHVH纰ß]ÔônÈæÇ$UÑË ™–ø¸8̉ƒH%VX,{’“éÂÆkkÁwR•Äúê˜ö/c’: fΠƒ¹~£~w¶“EüI«¶öÓ)†ÜgZ²0dçagc³C+ׇÎ5mÇÀ8é¡2O>V)êơ5Uç`₫ |w+‚sé\ÓÈé“|Û6øƯêzđZÜ\Á¨4“ë:Áüyq`z¾wûÆ MßùÀ¡‡úĐ%áE£Œd(vŒ̣x®©ó½=é_=j¡¢9ÿªÔ½ÙXḅˆOÿ¡Û3mjË Ă ñ²zïîN?úĐ6mPÂɵQL±9”¹ Q묕l‹ø³«̀Uăǻgç!¿ï™S|yƯÏ:ơ³·«/̃¾Ùc‹́G>jÎƯø!HñHr¡X ă‡,° –I²Á|zZPhÊ–}}DûvÂÅ@547ëOÙg/»«Éư%ÎđĂÉ2r•eÍ)WÇê™VüY/¬»Í·vO}₫>™ƒg-„Ó«¼ÏTêÉwl;ª·_±¼_ơØ “4^î!Z’5As%‘G!†fB¥THi2“¦¼Œ6= ªÜB1©Ư²¶R¸M€7™\4ª™úL'ɨ(@ÏPÑ‘I_S?2ơ¾µnsÄvx€s›97,̣¡̣(̣oưS4<¡ùu°¯t\¤0\̣gJ†Ê'DàÆVsṛ3ÔÎ1fV…}ÎÖ¸Ï@đÿ À.â(Ç:‹äwăƒY_Ơ7l0?¬j¤Å/ă q ÜíeƠ.<í-úñé GøÓqR† ç·QÙ% {prF2I·́κGß§ÂÎÆ",‘æ‰ƯĐh›ûA·]nR¿»jS 4?2 *@4K$èÈ‹¯¸, ‡B`.à‚móèÜ«?KoÀÆ"¢»§KcÙ ̣1§Q ˆ7ƒÔO—FY!Ư}–R:L‹.¸´GCt2u /_H{÷Oøq“÷¨:}¾æư®ñWX{KĂó:‰JzZ̀¯²pu°˜8•-¯¼Ú©Ël „.·̉°ZeîÏSÂ₫h-̃å2ë̉³^ï°˜©í‹ß´Fù,§M%$Ï[D´K‹Ö&¼¶Pµ8RbR%ú9™¤: ¿Ø[7AÛv¬´&Uå&ăËSÜÀííYüû<ưlĐ>0Τ¦¢ïŸí Ö—ØÍ,P"0üÙQh ƒdón™Kj ̉í†É”ƒ«‚Ơ›ùPl'ÑR4D« ]Äzæt÷L>ñeÑ̀“ưA:†K¼EAîdŸ"¨êN†YØåy/&«ß~¿Vq]AÈ4 kÿ ưl9Âr¹$â´¼À“ñ d8å+̣Dz̀Hc‰]Yøy‡²ÁḯO¸˜Ï ăQó¹YÊÁ\è&nC‹&pÙɨ;˜ Ã́5–3£ùB„LZ°\P ×÷ fá/ºOÜó*½„̀L£L2äöĂ«o©̀5P*™“}Ñ_C–;K³ÿÖVb¬âR;*́z`LUó9µÍ‚åh¾´rc@øa1ï|•ü{Ë+"=^gdđưDĂ¾*ëÅhƠ°ÔqL“—”‹ŒíAÀy †¥Óö/·đ´•Ç$H2áUd+ÑÁ0h)äOÔ„h%…E¨÷ªÁñÍ¡ĐQ*VḶrµåiÇÛ¯Ñøº *qcR+Ó¢‰»J=(àO×έ÷¤íµ5¼¿º&ØÚ¯ï2ª³„ÿFœẸ̈âˆk»Ăè”Ç«(—Îï@f±•á p–y× îamßµˆ_ꤛ€º¦ØưÜk7~Tj9^̃j1Kă«t3ÛM½Àc¦ endstream endobj 643 0 obj << /Length1 2141 /Length2 16992 /Length3 0 /Length 18279 /Filter /FlateDecode >> stream xÚŒûPœÛ¶ ăîî4ÜƯƯƯà»»»; Á‚Cpww×àÁƯ‚=ö̃ḉ{ÿ¿ê½¢ ¾1}̀5çêêÈI”Té…Míöv.ồ L<Qyn+ 9¹¥‹ đ)¹ĐÉÙ̉̃ç_zQ' ‘ˇL̀ÈåĂL̃̃ ăj`f0sđ0ṣ01X˜˜¸ÿÇĐ̃‰ fäfi gÈØÛáÈEí<,Í-\>²üÏ#€Ê„À̀ÍÍI÷·;@Øèdibd7r±Ú~d41²¨Ú›X]<ÿW*> FFwww#[g{'sj:€»¥‹@è tr₫¢ P0²₫MŒ faéüXỠ̀ÅƯÈ øØXíœ?\íLN€ÜUi9€¢Đîc¹ èÿi €™ù¿á₫ăưW K»¿LĹmŒ́<-í̀f–6@€¢„ƒ‹‡ ÀÈÎô/C#gû#7#K#ăƒ¿ 7H+Œ>øư‡³‰“¥ƒ‹3ƒ³¥Í_ ÿ óÑdq;SQ{[[ ‹3Ü_ơ‰Y:M>ºîÉø÷±ZÛÙ»ÛyÿólfigjöSWFu;KGW ´Ø,>Dpdæ@;'7 èz˜X0₫\ÍÓø·’ù/ñGư¾̃ö³ @_K3àÇ8og#7 ÀÅÉèëưoÅÿFp̀̀SK€1ĐÜ̉îOô1Đ́üq̣N–]¦Ác0ươơߧϳejogăùÇüïĂe“S’Ó¢ư›đU""öozVn= ;€™‰•Àùñàû¿£(Y₫§ ¦?¾̉vföîưè̉ÿ́öŸÓ§úÏbP₫w,û‰¨₫ ¸;“ÉÇ7æÿÏc₫·Ëÿ¿é₫+ÊÿË€ÿßz$\ml₫ÖRư¥₫ÿÑÙZÚx₫Gÿ1¯®.³/oÿ±vÿ×TøÏºÊM-]mÿ¯VÚÅèc„í̀m₫ÛDKg K ©’¥‹‰Å?£̣\ư¯³±´*Ù;[₫u¡è™™˜₫îc«L¬?. çyü[üXÿRÜÎÄ̃ô¯íbaç99yÂ}ñbx3¬¡)Đăï 02ØÙ»|¸>èù̀́à₫:Ov£đ_¢€Qäâ0₫A\ăơ_ÄÉ`”øƒ˜Œ’ €Qêb0JÿAä₫ ˜ 7€Qñ¿ˆë#ƒ̉ôSåb0ªưAÔÿ  ÿEÜŒ₫ |ÆĐG>“ÿ¢¿ºÏhú/øÁ ø_øÑ\Æ₫ÁGIfà‡¹Ù¿à_JË?î¬A·?ñ˜ÿØüÑÿenïêô¯èæÿ‚Œ-₫ Ù>[x:X|ÜÊ,>d–ÿ‚Ä­ÿ?˜Ûü ~P·ưWíÔÿ„bÿpµû˜¾é?ÈÙÿÉ₫álÿ¿ÔƠ;ü ~”îø/øQú¿ˆ1Ôéü'×_èö/"́æÎ߇ÖÿiûÇÂèbáü×Ñ|ïânÿ/‡ú]ÿ?¨»ư ~Tï₫¯súˆçù‡Ú‡­ĐéŸ`ÿkÑL\œ>^f₫¾?¶đđ߯i@ ĐneÑ̃„7Ī.¤ư±Fß~’|_ó 5½÷S‡ëo$èTêề -§{áÔ‘^”ơ]qª;¡UâWï“–èđÖdå¶gŸƒD•™ư6¸åi¬Á©ÂáúBXz5¡ŸWG@kđĐ.̣\GW.$¥|ôG÷~Iụ́µñ°Å}åƒjYø—̣YúXơ½À’ỵ<ă¬R(zB´Käù»û9´œ©wb™DZ8ßÓXÖ"oŸ,qO ^j,ÎƯ¸ŸpupÁïĐÆg(¼E~¥É`/y—­.{´đç ̉¥¯Ó£0übùVm©m×ÔWë6¾̉ɼ—› ¡ÄDßK®-kÂ0p"UĬn3ˆFw©eµ₫ê4Ùh¿×è1³J'Xå­,p’$×"fGºOlhñt#°æåʸ_L%~‘–ŲÚ~6ĂƠ|Á~•Æ;e°v×4Ø`¯-1_ÓÔ¹K×¼W|ñ[ÿL"Kê1Ü7´9ăäz*3_#(1±Êq̣$“…í "^x%¢_0c†DÉÇ̉™hœ¸—D Z å…•!ÀØb½u`Ô±3̉©TIjuƠ˜´ặÓWm• 3]×á qßÙú́*]èHúlăd¤åÙyu’ØƠo} ‚1‚KH,ÊBë¸èƒü‰¦áÔ§èy=̀:«©F́÷éĐ«èlTJ”zZ:”˜ûØÓåQ2cB_êLTRE'¸k*Ëû­[ÛÆdà)‚_ħËư˜¬)é辉NÖT¨ ĂqăĐPÑùøí|‘W›©Û̀Ü1quƯ‰ º2Cå[OjĂÍ́ơGsS ®„tz‘“:ư Œß;~´Çù[˜¬Öy%b¼wÏEưCrF*bÈçѧ·†ư«/ḄÏå‚z߯ ¨đå0"!vÊâ2`¼Ès đdd^’ û¿Îú.jr4ç÷çâĂÄ*á£p(Å|#â4lk_Ov]P€+P=׺¦±œë§{ó^ˤQd$Më†o‚saæưd4<₫N8ˆË[|v Ë¡Í÷]Z h{~Ĥ¬­+VQƠÏ-ÂSûñƠ(\âÓ/«§á‰ ©¥»,$d£b­+¤|Y„jF€Z¨5ç`wbØ7’~û ÷¾§0ȧf[Gˆ HÊQßâ¹t+}½ă÷₫V]ç×C`Ú°ùÀ¶$ Ưú Æ×Ë&zPîFWߤ"`âiOÈ)‡¹FçO„q¦‡„ĂK ÊŒÓsÜ|9H³†=ˆ†!_myWÙ\ŒLp <œ*Iº6`äDD»Û\I‘ÂQqdÅă”ṔÓfÚM¼ø¬Ơlºbq3·?“64ƠÔíđlNl'å¥;ü_¡=Ă`B­61ƠzÍú₫MỪ@öV¶ñ́|ù5N†Ô&6Ö÷¼×“tƠ¶ª›Ä€lµÄĂxöÁ]A÷FÅÓ9=åÓ 1ăY½@û«đ΅oto³̉•-¿/œUsİO0Û™Ô=eTË ă8ʰ‘Ưú„-’"SÔ¢8f™ƒ6‘ƯæÍüÓG 1¯ơư₫E­pCdè⹡'q­ñiöä––o©j\0½ntä̃ˤ̉¤J®ê6³Åvß|/²rv†vË ¡—\a~YAæ­{f#KéëeK å®í ‹éÜ”}C³0h¨Ñœ_w<˜è]§̉,;¶̀mÆcËt7Ǿ̀úNZÁx…XÁï¬ `cóÆ=R•´`t H'¡̀>h½Q¡ÎuµAkL j#›CÛœ–˜J·×ñiÖ‡No™–cßæ̉ß°—xÁ¿¯ê£MX›̃Yw#̉Ó+zÆè³fâæ(éÛ‹7ơ ?—)£è¯zp̃±u~f nÿÆmQÆqE{F ÿi£FüóFq•­ûl‰d0f–v&‘·ydt¾ÀÓ ó¸%шfuzŸ´à`zÈ@ưp1 ~Xoê¥6¯ç\¹=ÖÓJIkís˜U$†åaóç¢JÍgåª^Oƒ.\Ù\æA!L)oCÀC”x›8ó:s½é&—ÈsâoµqÑ́¶ưä9@‚¦³nFV5K/÷Sˆà½3HGßÑ´"…»ƒ§’·Ÿơo Ù̉Â@ÉD~Ê8-Q0ȤI®̉˜û˜Ï‚ /₫å1À}÷ô¯T¶4ºư’Ü¿jÎ{LŒ9Å!WBÁ|+;+1T¯©Ä &dü¦Åü‘TŒC=` íüĐ\FÔ¤ÖĂ6I¢¦Û‹P×å`D qb’$©ÏO¾mÚ#Bs?UE–XxJÄZs‹ ÂÉ1W=œTzÚS)ăH&~búºTó™µ’́ŒNQ¦˜ËÇoûœ4æbê¼ea¨O±Î̃œª¿Íă×è–ùYJ›¯™Ẫ¦‡)iô²±‰Ü_[à÷¤F›‚ưiàĐrtÈ­ÍàŒU6?¯ÇÈ[åí·Ñ^Vä}j¨É—º¶e3™Ï¸¡T0w£,̃ëÔ–Ǹ±\Œi¦™ÚĂÚ̀Âæ|êOK)ăGêo¾·»NÍàúộÖ´Q“ Æ»ơ~6k‰î́ H]µÜF(j0ñB‹Ô…ßûˆĐrI:Q L)¹aê8qŒơü9ßÉøyÄ#/¸ÂI*k߆[¤‚]«–ü)Yy{‡Î“ƲU\΅àIË‘Fáđ‘ß[ фӣíQ=ŒG.Äog3¾)RÉÄm4ßÖ¹Œ@K¦† Y™Ó[̃œ€º7¨rO5~Π$kꀡ±O~²€â]$¶ P÷(£öù:°¯Ŕ`K£-1–*…̃팄G GLtØ9ÀO—̣‰ ̉ëdÉ:ÄØú’ÀM0BFMÜ‹iKËÀ\•tSm£K¼s>yÂlƒè¥á‹v:<*Ö¹!w&Júj}¡3t4¢Ăû£ ßÀhé² ØLàüíçê§ûŒ}Øư.¬Œw‘!IA¬:.̉RÿR—YnñGUêa´Ù‘={£íăP³_0ƠÑbéø|oTˆœwïß̉ä([Éç ˜Ÿ»ÔÀ·«8¸Á=$¢¯û~¢\êmQz€ûÉ)´QÏ\h@Æo¦ÜƠ_)2m>×äeÜFÎá ôRÊ.‘ư‡ûƯ3̃&<ï¼HY“ƒóh´/¤IIau#ËÔ;ƯÙ${—ÂÓ¨&··³ë—«qîØÀLù4; ,ô!ĂØ_€ÏHØô-îăƠëF·—·PN«aïèå«¥ÄFß®i"0T0hMuÓ¹§æíh”Øæ6ÄûµßϼÍSŸ=úHïyfù7eà aĂå'¼ “Çf0ÙYaÂùâXÅđ?#—#áGóÊ^ΗëøR‹Xî“y>˜@ÈPœXo».;û¿™/kBnà‰ë«b»ƒ£ñÎSbÿV“Đ̃ œ îar¥ƒÇ–‹€VKß‹;{ ́#±ápŸ¢zLP‘¡`‹œ-ÙŸ ÷£zàj̃%¥7+̉ ÎZ¨Œ¥¸Ï ѤA&ocYGäă³I#d°đ·êÑÚ-Çă{å–<¸O˜©à­B¼=ô•„`î–.ægµ6̀UiΤ´̉Œ{Qe¨E7:¥û…ÊdÙÇ2¼ư¸å# ¬(˲ZÊfe£ă°/c̣(¥|µ¿¿¼!+5›N÷[ È„tÅ,÷‘±e†W…´íeđĂKá¸û+P93f}«ÁÂS®–dS7G\ïlƠbÆÚ₫€'ǿ ˆĐ2ÅË#D]éÅÆ@²‹Ùènj6£´eZ È́»^QÅ«¬—₫œNï“>Ïä V—¨™>ÛúQ¶ÜÆaẩOuÓ=FÔ]¥l{äKmkÛ†̃p„̃ÚaÙÈ́ôsÔ. Œ˜:S9ûÂ?u¹¡«»~²óÄ1Åû¸í¦0ñåg-f„4+ï[œùö­3]íôÁ~$NVÏ×µ3Seg„ƒvëÂÓPUÚ`ÏhФâĐ+ïeüKb±" YVđz/tJÑĐ„³ºDc‚2$)3m9á¿WÇàĂEl¦³5³Œ8»;{ºè*ó öj§²°æ{Ÿ£Ûj&öMè±ưY{™[‡~©˜+ц&{Woø3B´Â7%f_¬EXK 5Dë|’Kk`ûø¨eÓSÀ W¨‘­£?̉²MF I42Ëφ˷D‚íohèAmÎĐ¾é5â±XrbƠ’Sª4ÔB \‘́Ô¢ƒktßpÜï̀f°ñẁsÊ{¹Äe^–¡₫,—œ åäC#m—V#ª¨L"ƯV‚¥¬‘”Ysù5j?F§îÍ$eu!A%¬pwF$&½ IÂøJb¡:5‘ëÖÂN+çGº4a„°@?æ.‘¦7è[ˆ=ĂQ̃oƠóí{¼ưˆxmi×SO-çJAtx¢qælÂî®›éxBIÈ*ÓêCGĐ̉[…O2æå¿íäœ÷¼EµG?[á¦₫0{ÓYu:‰‹: ¹»¶́Ä»a¯sPú̃#Z_—ëÈÎÍưñ!Ôg•9o/ÑZđđVAOÅVƠE†ÚŸjd†/24 A4¥UNK<đ̀ôuí’F(¤ZÆíĐ,_%hù»„JñCjÔÚ TFAï²pD Eµm:I3yă±ÏB“à“ÉrFgÍÿ₫5¬b•˜iÍ"üM`Ÿ‚ X¿nă®× ¿jäQơ£¹•đF2¥G¸±ˆ’)_ơn‘₫lƯ r_Û¾í2¼ Ib- _U-£jØp/¿ü8·¯¡î ëöoaZ…`Ó̉7 Xñ»$Ư ä¼É9… 1|ÂỮCb ̀˜b´KÙCöÙhv*Ùíߘs´ĐaÁ´lm B¥˜›YqÓ" çºÚÄÍí)w°„ô†/¨1©‘)‰W‰$E%ô>ew*̣N°¦ŸP­b¾»WñrZ+cϨÈ î¯]º“á q®†ư#²Ư7ÄÛ1ï[í¼fÖ€*Y?È́l÷06kÀ̃VÂpÜ{Ư]i†‘¬ALàỘ9¶ữ₫o±@A½~tG6ƠvÅ đ<¸ÅàJUĐŒ=âùU ±¶aSa¤ÖÀqg(èVÖ#m¯‡`‡&†y…¹ú'ƒ™ß'6L‹/̉Ë#̣ªY)ÜU=çRÖë†Á̀({“@© ¡¨³’6í¿} @Ă8É7‰®Í·“£~ZÑđjÇU®»{k`N‘Q?‘¬Ëăóív”; ø"£Ö’¦TÙ6ÿ³̀vÑ:!. T¤ÜæØV*¤Y÷ơ±ø°v¿Ôơ ©t‰6u¬ºÏGé¬ÂÙÓ©ÓÅ/¯ÎmÖ_©2ÇÏA׸¶/‰ơ…ȿϪÍ6ù>µ*fªÅY€êS‚»̀‘ªL]̃:Ï̃e‹ ̀ÙÔø‘~ôư×ȉj[Íh’́sGÿäF“̣7_¿ÏßucH56¸åBGä j̣˜dK‘)ëC@¾¶ØywÀ)>úØàæ41‡M1¹ƒ¢ç$av}5m;ơƠ³ ɺ !—æ¾³B jô´PßA=pÅ}i†§öâ¯YµƯÎ#…)¯I†³ÁäÔ¹«®!çN·FÚỳ‰9=ÆKÀ²ÿơM#,ÈY¶/‘Aù(‡¢NŸèh·ÿæÀßéë́7-|ư¾ªh̀!EyVnœÜoüÛE¦ÄÄ£_ÅÏ´Íp¦V~1ñđÇפœÆ‹Ëẫ´¬‚Ư …xü’g7S¡Bd¥Rp=²ÊœL¾Íˆ`•U²s=cĐ׃Lh‘Uééè¼ïï*Xw!Ù¯p2R•¿Êü±Qb Ê7Û £C»”É;Tˆ=˜Œô¼×„0¸̉–¦Ô^~P PÂM¼¨Hµ4$øâÂQ˜T­–`¨Mz–ûĂÔÅJé_cá½(j~wø¿5g+8xÛ­à ¥̀wx4kMÎ-ư–€:&hJÖV³Ïµjq­́ ¡Ñonàă ,×ía±ƒ€ÑçßB¢œĂ,• '\à%@®?A2½Ăǽ…öβœ252v-ØPú¶&¦p Ç«C̀Ư…ëúÅ­·X(fSá͉Mú:Ê[^̀p UåÛ-Ḳ4—’Á5UĐê„A,\ÿâ>kL» ÙQPđ~i$5^₫)fỨ³¥¬3[MEÍútc‘•“Ï–8OˆAå@…!DĂƠ•lª‹úsâÚ~@ơª<éÄ%]2Î)¯ĐNˆ˜Ï‚Äûc`E¯NZô ߣg÷¥YÛ"‹cµ=f/¢©÷¹2öÂj;ë²l§¸bâ–5{“o ”éÇÀÂÙṂFø@ÅqB¥X¦6 >wơmÑ]Ö¨é' VÍ Ơœáá– ÀËDí=k¤ÁfWưN wüdçê|?ƒßN°—X5+ÄdH„™ ̉Ê»2ăà8̣€ö/ê·³­¬/J¾'ˆÈuưb X3¢3` eŸpG!9€FsVn¦µ@¢72‰‘ưÂäbF ’a<:¥ÿ¡dÜ[:+Î,Y(WtÜ´₫EO£"éʶÖT%«†áV₫owGÔs̀ïçjWáú¼çB-|̀Ñ́₫ú£Y©Ŕ©¤Â]n]².æö™0gÆ÷Ñè‚dx. *£YÙ¦Çùk³Œ{fhçDZ0`‡ˆ…‡zS|SApC̀pé 1„%Àí\Üé'Ê ö»§Vb'T$¢³’ƒ±ºSKZ•Çí"tƯ¥H£fh+[ ¤̣{f”Ť'±ă›̣)8ùÏq‰»jU+9}[âMá₫Æiâ0"NUĐb<Ó{T¡¾¾ă¦í©߼ d_n¯ Xµ¸9å„ú@{A©e9ª™Mε`¿ Ô®n sTaQYâI*‡µx‰kÚ†ôËßE×^³đ6¯ăøá4>¼.6sá¸z­»'av4HjNŒ%X/ö‡¢8ûbåîæŒ‰™ĐĂZíØézq¬oBX >đ~Ñ|êƒÛ.·Æ”T îi¤S—[s¯¹̉O@ƯÛF&ÙG1½}¶åù>6xÖ“»eƒư)<úƯË!¤&4g¡{ú·(y¨Ú5tæG¨¾ XóÂ.~̣M4c%äÁm–XJSàÊYßÁ BÇo™ïh’øự̀9vŸ¶?#od²N[ûÅuF I< "­q®Nœ"ühGq™…ó´˱wñEç¬z‘ ¯åBÆËŸù¼NU,íøå#)»'Hô²Ù0̃„îÈ0/KÛE¨f¼•ăpKKầĂÊ\íW¦l Ù2!ö-²ªÑ·8U°kÚ2răArJ‡oü±i|°pqÉ¿”­ZôI=¿\¦{m˜))_hĐƒTx¼¸!:„.u ö€": ” í”̀÷Ë>I臱¶‹âŒƒ¨đ‹\/pƯR$¹–6TM—b¦x›mŒÖđÁ˜îG­¶ UÎàI Å´*‡¥ï‹Ö#§"ƒ̉X̃G«ßĂ `!§R¤̉É÷u¢»ˆߺǧ!£¸ iÑ·HÔ²:'C>Gá̉>́sgcE¥.."æ|ăˆ"ä„ä¹) 7„a~Øk…ÍáÓa¯ă߇¦œsóDEûÁ0z̃äe}zƠ>­r^ ₫µÇóö&̉̀{÷YQóơ;Z úÖmsñª]V‹>‰ùA,6é·9ưT?wipáđ(éÜ×î„€Á™yơ;R_h²1Mâ/ă¡ă0M*TÍéáS¹|ÁôßnM®Np₫…8:úú̉_RÙ­å7o{»ó`v"ûeq/Døœ5¾#áiç¨Î·1iR*l"‹Ü´¥íA ư*Û‘¨EÊ^÷DŒ`_¡UMvR3Enü4ăø&&†jv.Îæ³u7%ÅLă%ñ:1µÎ3ö%úæ˜1^ÓtC}Û… 0wwHf₫è 7 êRơJg×2a —ö@#Ù™Ơe7Ơn·f‰—œ³¡ê ̀×Ä7Æûä>Æ„@¿¤m«5₫©©«Uº­(;1n|ơ¼{r·Q€»f$xÊDH!ưWötH´ñW›óu¸¬̃ËX`j÷»äçü{uÖä3Đùưk˜ù¯UAÛua‹‡ÆĐR­·c1ºĂ:£¸]J·œHж ¶Ùpßxzñªª‡»¦́µ ́’2äX¾™Đ\¯—€¶…̉Œ€Tê$*k-°}º} “—A"ƠV«üư`é^ @́ªÅcZlfÁ¯éP}ë îa£Lú}Ü̃¿©ï® nÑq CƯ2ÎÇÇ\ ÷úG½íaÉ«>)Ö4¬}₫ÇUØc¢¼9=“4üL‘SütëjÊLAiåÑ12̃mŒ%.³·ŒÀpÆâe5¿³¬ƒÇ-±S2âoméÓ\m×½ºVªt æ“]|pŒ­¶ä€Ÿ»~è%É6Ù¹6ư3ÈWQØw¯ºĐôª˜ÜådèU¬à"5 ^J­èKÉDo®&¬¸™½åØPëZ;£ë  åŒ o`Ç1H¶`„£-) `¾ïqêx,Sq “\˜Ëʲˆ}IÙ¯¶.g‹8æ4Ú Óñ]˜?ƯºTT}¯¬°§¼£Vy×´$²S,=¤dêm¬g­›àøhÎ}(ç\Ùd§Kờæ$7ø̣̉n_¤J9|‚hG‘q îÍTôÆØ^ äyc\±¥XÜ/Œ»ê; ̉î÷Öạ̀ĂÚ»=ĐÉ$SŒ÷µQˆ! ÷Vu ³/̃ék˜VÇzpỂ nøZ`Z¨Í]ëe‚(0¼T­ñ[fĂƯÏ:6fǰV=Ơsw>| Îsùu—q@¼÷"ªJOAdŸOn”j•‰]ØÓঌ¹Ă¥q| ;ï•Ó 0/%ʺ£$È4ÇÀ ëæóñáR+Áù’•øST¶go¯Ù]L˜ƒÉe1¡ÓáM×Ü%qB¦ÄE¼ùä—ÖÍ@Á¡Œéù́!9*0…z¥Áv¼âa°{¨8IÆÆ5êCÔ °ósĂ#Deįñ"Ú¹Gàê6µÔa2â3ÊŸ¿å®bËOD†W`ù®¥; ;^IpöÛî;†NgW‘ÖgTkë,À€­$1Ø÷¦äËúU$¬±zªƠí̉é¡•p„û\f@̣ó„Ç-̀Ïî\ƒ́ùŸK ·xBÜ6 oƒÚçƯñ̀åßrµ°ơÍÔ¨ˆú…$盦j–«*qH2t²%"<’ ưûgđMmy^‰×ôŸ¼`kËfăɆ¹¶~Đ1Ù©Nđ6ßl‹Ôß·Zɣω# %AÀù`Ư5lÊëđ0øe’zïÈ_på®–É»©l;¡5A'tbûmW{Đèÿ`Ö(r ÑƯÈQŒ”‡;i *̃¡ë|¦ÉÚ“€Ç‘-…q·só Ônâ{̉X4¥V–êW»•sñ3ÿ”3v²Fî'câ1}mS‰²vb0ÏÑåG¾F ó°…È!6 ç©° 7\ưî²"¢Xj#=)Vv)t[7xü4kJ>¶d£ÀîMŸ;¨«̃’§3–Ïmùóă} cDRûkBØiÓƯ°Æ$ç¹Óا ÚNÀÊÉÆŸ± vÔ¶…"«/,~﫹3<Ư*_R¸È A‰j¤ª îG]´ß@Ç?mÑ*ø1Ù…¬Mïúv¦½₫¦ª³­Ư@3-£$1/núJ_EîaÇ„ÿ¦Ư»Ø:eͲ Ø%1XhôñÇ,Yk(^¯˜}¿„̃|u9~Œm,دŇ'Đ3đèÎlƠođÓ–+Í•̀€?k9ƒ+›Sxm5₫V‘#Y‡ F^ ]Dé₫º¥ơ\EKè2éx«×ŒÍ̃ó9ôr Ú^kYÔE1ÚÈæ'í'FWÓ<æç—*'Âr:bxmØÎí«̉€Ç+ ¶" Ô0#,ßÊKVŸ bW˜½9œ¯äî¹Íï](D‚Ç]đ€ø´A¼¥ñÉwîÊ9hX“n˘8²ô2ư=Ú¸ÛÁ“º {§ňĂy–Ø[yµ$½÷#eŸ²°h08\Y·wÆg.`Ă2&rJ1 v®ûT´½Ë“JĐ—'Tư¢V ?!ç¥kưs;¥ §¡†ă…´R#uăœœƯS> p²½ï“—Ÿ„¨CÊ„³È¾÷̀È-®,,ƠGöÁ]o¨đD‡«`+1́–{sđÍyñø„º!ñ°óñ³sÜÛ›n‡Í2cïËÉ?h̀V¯;ÔrjÔ€’̀&°E•bêl,Ç"­©ĐơBËñ¬¾Î˜K\?ó<¿¼‹Æ.Vñ¤8Bkqơ¡¦ö‹ÄOßNÆ ×àè)"*æ}ưƠœjâÁŸ•Û©’ø6?ÜB=äi²Ơü¥‹++}Ê÷8Ăjz%§”Ó˜½" ƒ¯H*ó8‰ÖÓíèƒi­SGwÙ¾Ö.–°#JæŸMo,&i‘’ư”ûƠBî(ÑŒ€W¾‚ÙVu‡¢ kÁp‘¨¹_k:Z¨bÔG¼ơ•]Û ‡ƠÑưAt¥g‹ô[ú #) ­ê}@•j‚å'fäF̉'Ȥ›iX(n^﬑7Ú¬¬3¾AC Đ¯Ÿx₫TÔÉë£Æ_âU¿noh#âś`7́©¾4sùF̀ĸ)ÜØ k„|ÿ ¥aº¶Œ t×|Ü_3E¹­ÇGëñŒ´XưCsQÉ[½jO‹¢F±Äu3âåKo0Ùú{Çø“'$l眶¤èeúÛ8ô¤mÎêJH©ó%fxà¢ñĐp₫ ´vT́ˤø‰½®Ú¬-îH«»ŸF@ISvơ:!ÎܵA~HÊn…²>+PA¬@R₫˜+~‘bp6wñ W~ ¤›êº¬§{Ê–Tăêà»áÎc²­^‚bX5™,4E!eû;̀¡± s¸ÿ`ØEg†É¤‘ÅïB¢C1˜‚MÙà̉Đ)c„‹1iâÉạ́Ï|9Cœ0=ă+¸í\xê×~M¦U¤AÚ}˰uŒ2ZĐB9¿¤{đ¹œ1S|w%yăăS 's3c< ŸÉö§(›\É´ô‹ ç¾* =´:˜M\É^j¼Ă@lNVlXư È)ÿ"zÔ1ÂFàY}¼sSÏÈƯñđí||ẃÂçhCñ²°›?¹¼35˜äÜRß I‚翈w5œ°µøê„/eø™@³¡¬“Yk×Xæ1UùÇy€m…₫ê€xeăœL­ƠÈP„†û 5>¢́f̀…=”Ñá ĐÅYđ|â’FBGƒ GÏ“Vc€ Á\ûa'uf{•â”âđmI{’8¾¼OE¾¯tQ¹ñ>¢ü~2ÏÔ+[·2ÔƯ%ª̃XCAU¹¨­4•C×°₫'¨Sª§í\¦µ=uï•3eùËÀë{×cù¾T!½<Í M\)ó6\£ö(&½÷ư§¦Q@«SwC€Uƒ‰é´Úơ’µLăhÑ×Ñgíô…’UÜíÚºª[OfUZ½~J¨lB;˜ PKåKˆ’€Xf̀zÖ 4´‘˜™ö‘A™ä’µÙñơPï nN÷O° =T=Äú 3É`KGçåjß…o«G2Çà î.®¥Ù·=}äWIÑơđRµ0ơ4H29ë¦GăëË.ä9zfZcđŒ$êà•‚bàç·‹½dJÓă>.†¤cNÅËTEÜ S¯°̣R1~®“n}£;,nÙÑ¥ÀçXQ÷[<̣›#Û9l¦R'b{Ưø×ßB Qµ Ă¹¢MCCiP‡3¥Í5e“q̃ûaB³†¥›(Çnl,3åë*D$™¨UL™̣ú£O'-äÀŸ±¿Î›‚î<ẉa#́«×~ăª³ˆ"™2DT́àGhÎ₫–Uk[Ëæ/³Zâ)e‰kưX.óâ¥$Q­Ë«¤0‚•ï¯@ª5ăÄÙbeFVWw7Üv˪ôi#-Ÿ‘0¼'jj3)A‘°gÄrè¾6ÇÄ,ăJr{¥;3N_£O‡ÄMaبs5(0…ÏQ¢r’p.-Á-o1Mÿ·q¹ÛL]3Ü/₫¹^Ÿ¤Ï_…à(¶ï⯴’è Ấ8ä$]re¢Wôº.‡,Å6›eKÊB›8á{ä/TN"gŸtđŒ¡À ‘;áoZû„<6îSÏ«D!Ñy Bû"â M ‘gO’´Te;Vºº̃ơx×ƠѾFæ]#V ­râÊ‚¾z„íjJ]·;8°úĐwªÓj0·ờ÷•+êæµúY«6²ÇÎÜ1µ;ÀÅcvc~̀Œ„|o¦Wu&k¬¨;‹ˆÅ% ±ÛËỤߘ¬Uư|…HƯ£zûd]*Ă Æ›œFwcY•´NglcæÑ¯_Ɇä]EW|ùâP^5z¹ơ­ÛëZ1_äA]  í(BHêDẤpPăQ0mÄלá×üdËƯ±Hª÷́¹¦Ñ_VÂƠ­¶Îîï¨hDÁ´g9œ/3û­¥l|—. ³‰ëçå­%å”S…̣8>c!u ~§ÎKWÅû¾(EƯÈư{5̉d;åœB2FÊ¥.ö&³˜iánpwt?/Áo7“áÁZœQRS=ÊVÈŸƒ:PT¦n6ñQÛNŒ-É’ŒONlüKνg¯₫bªl1î>œV7ñ¨­zP^̃±tR÷#’”ÚƯîk~«oBí&¤äæq0)•~» <ñtùq,“₫”zï èÛ_í¨7¢ÓÈ?!—“vh¿Ë¼ÔºÊË™FǾFÙy½JƯ¾>V ï#¬¾VJƠ Üćă₫Løåt ư‰đ"ÛHÔ% ^ÉT)¢Kñ—êƯ¥ÜeÛÄ"Âf¢ïü°cÇ·sî€]©àæ:[x¨ê2x‚aˆ!Î=íđ€ “:@Qc‹˜ØX- ×ac‚f9ï<¥r÷2^¤÷»íô^+Ơ…ÆÛB¡"_ó’qà. :,£«Å_‚|̀­×WơK¨R)C®LØBà•+ÈiƠÓ`Úoæm¦÷¡Œ|oꃄ™ûđƒ²—ÛNn›Æå¢;ËgÔŸWfi|₫ º&âu ltÏ F©+:}ˆ¿°~61T̉^ÙơĐ«Á­S̀œpđ;úư§TQax#‡bÀ…ÀuăƯaÖ1×§ơ 2¤¾r&iÂ=døíçi‹9pcg*X6¦Ä§*ëç^2­¥MG̃`₫đÛV¸ º̀ØG@oÑ.³5¥‘×Ä0h0¡€¿đ±]ỵ̃!‘›9¦“ ah @÷i^«ø5M:đ#́çÙ(FûdöĐƒ\ú78¹}‰¤LÀ 9.©PWï¬\.Jg?Âc’üƠĐ6˜{ä[ÏC»i…¦OªZÈ `ÁH Î1ơª°ê¥Éíäj«G3ë˜N‰üw¶ÚÄ 1 kXRÍ#’•wª·¤keeFîƒ!ʰ1A9Ô@zjêÏôĐ`Öo:Çzóú!vä߂ȿaC`Eè߯œüÆ'9„k¡n˜ !Ú¥Ä&`vÔ–úø°-ìáD5ËV5€ëx@û éâ-̃6rüœḶ.u¼: ª<ß±‡²fĂBk*uö³Ẵ ¨†5ÚÛØD4FĐ6.¾Ç:¶&á[%U¤;EZÚ\Îr4́²Ḷ„*Q  ÙÔà½C­&ÜÚ"tiËà"3dG̣»ÇÎÈ$„|7¿¬Nîh¹"°» ä):êÄ1 Ñ:Û ́ TQ"]Œ3̣ Ù̀‹ôùÆSp·̣ó“WSƯÖȽ/ Đ̀ P²Æ5¬À…ˆ…ĐdS½Íöô!³Ó}–1…ü±E€{EĂhE¹û[© /åĂĐdÑØ;]DuÅûĐi04 ß}p•̉œ°ù çt‰íÅJÅCA¾ŒUđM~=È_Q‡RªđÄ3´4$x̃×… ½kÆ/ĐôS₫4âѨó`đ1lU­Ó}\¦}z=}C/,dPBÚ ùw¬1†K̀óö¦O$‰¸^¼H®é‰mîVvWôÑ¥4yº{hŸ^Gf÷‡~›S[#Ă5?S­^’f£E?,¹ÄUk7=tèȽ²ç¬9xy_"8Ÿ÷Rußa\(>Y¢ «€x){t©ßÙ­̣¢T¿ÖY*謅XÍ醛±V¨GjÅo ¯iD/rƯkr¦úhN̉4G¡˜̃Xơ&-0oαÅѰüÊú`bé û#Ƀîïàt„¯(öÚ+ß™åíơ„đs?Ç₫0 ­-¶¥~/.§™dçáÎÎăư¾FÏr:Ø'åÅÊ“₫NïPŸÿN2ѧÂå(h*¬Ft!©ẓ–çâRA$†áƯ´9¥l­Ù•ÈüTÙ‡æ.”Ä₫́ ¼.~«¤ +=84üä~SÏ߸{KXkö´[Ylxß ûáQRº]́đ¢fAµ́Ø–J6Ư{¢Éÿ*“/R§,÷É:^&>’ĐĂËY»M§fk*ú·bZĨœjăÔ©Œ&p2æv{¼:bF{̉„Åe+ë–)dĂ`¯±ê¬Äv,±B₫×Ü–Öz$R/Ëúo= ™‘–VÔzO¼ZQÚ¸}¸6¨N…́Ưß=µ§Ê©’&+ñÖÁÇ ûzvơ@8;—dˆ7Íi€‡̃Ÿ´d¨ ̉~2&œïV&¾ßc̀o/)‡ư4̣êæŸ‡ÖˆP|°–茩‘'ÛM' 2 #÷y¨—ÅÏY–¹·Œ«¹̣† ú®ÙV8ŒF©v1À6́Ö‹ø%q¨j{­ów¶đذ¹;4”ÙüÉç;̃®ÛèS‘_ÁƒÄ1"*Râx—HÔû7Ó&ë+Ñ—7 ?=|–[S1j´M›ĐëæÁWpu…ä¬YÂG@¨ç¨¶ûưÓæ¢î|±́`8ö ¯¯aQÇq · jå7kq‡‹ V·ư2¶ø…gŒƯêè îôFºJúR´¦́èúû§̃!*ÅáơöºïäB¯³H=‰̃ưÔär«”ƒ£WĆ,±Çô¹yÓóđس` 2Â¥Í9Nç›vM‹º—u?ë•PDVẸ̀vh²Aë}̣̣ƒîZ>ă«Đ̃ Ô™(ÿr"I_y?¿èbëó̉øÜ¾̃iÎ#́Ơ~ßÓw´Ñ¬Rf}'sƠi„qH$¾I ¢=L=¸'qàNc˜µ² „£âزeúZ89+%º¶ÀˆñăZ–æŒ_¦˜ôù[æç̉$)â-ÍtS@y»ˆk¾kI´™›ÊíÆéưë“83Àlwo­\áñ ‘±•¿ Lj¶I),iGÄ7ÑbK$0îû+ôîª̃ÎhÈ£§È§B̀ó[“Xeùw…ͯ׼ƒC>ƠQ­6G˜ë¦’¦.ÜÊäŒ̣‹Đ(IRÑŸÄó>3;C¥&Ù̉+wq.ùBè<â)ëÓ¥PwœÙR¶S°]O&Ÿó$³´ Ơ`l)/¨¶X¤é}#rUĂGú‚3ê}OŒ½Y‹zăÿνÜÖñ½Ÿ–aô ù†rö1è`QAqˆđv́×ßnäå•JZÓ NÁz‚¼Ú‘°)d5R~Ïü=ؘöfyĐÍ®®¯^ŸøơŒGyb“Íl̃`i‚Ï9ßQm& Å^…†¾Qé±+½<̉a*AZJ¹©†_aăryÅS@‡èhÖ5=Ư­/}ÂhM'-ŒJ©băªçqY9\?€mưÈR¡ï°Î׿Ư†Ư.1e'̃D,F¡ĂđçáĐKY…’í‹’K†=ơ'ø/³eĂ Ôú>2»¢øêØ‹ ÂOơ)­ZDNĐg»{öö{H"̉$•2¼SÍñ"sÊôL1D}¢à’•hăä[Á÷ß̣‡ĐëîZ#py…éÈúœÎB´èiÚLa.ṿZS®Cª–±®1^-¹ö¡èFơ_Ú.ñ¼SÉ‹3’Ôh@LL{亮@ƠÛ½’„€ç¶ ´—ÓÚ'é ¤ØICù¾&̀îz)¯½đmhhbápW‡¨ïL•·ăñCÅr•wi™çrô—ËC nlÓzl̀u¢ŸÔ¶àBăKÊ?)2ÏÜ´‚ç̃Èưúy’̀I )_ÙgÑÎ">s~v§µNoIØí̃رxnŸ2èö^św̃vöǪ™BG…ÑxXNmø{«âüÈơ|'b®tœ– (o½Ç z½Oûë°«8mfzˀ雲ng+Á« ‰„Tœj¿f!ÎĂyGonsÙ=ÎËƠ‡Í’¾–6ÿ3Y4ư×1¶Ai?̃¬̣·–æ,MœÙÖ½LeÆĐb*BÛ9|m)¢"†J§¶‹náÄuÆZƠ“U3´j›ü—ƒ¶ô A¡:z9Eîû÷•µ£TŒŒ!‰eö‘%ógéëuFÜL`×.)±Ûe-„T̃ö…+.‡d Ơn®MêíĐ`L‹a"yW¬™7êh¤e.ë²~KB´©gm‹>๳ñOá­6Ư¬Å%µ̉̃ÊÜ6YÀ){ĐC̀Ä 1§üĂÛk>µ}̉NbˆrÆÈ%ÚøÛÆ‰8JRÎ&Éq1)Îq±vđ%^7Ư)öÍ‘dê³Àư%&K9Ơimۦы́9Œ >çJEH!(×@UGó*_%‚¾TA¦#¹ư²UHÓL\q³.'a:³7¯Ç_²5TÜ„`uë‚ÙTóCzån‚S¯‰¯cdË­©Í‚ƠC̉Â.eU+ ,tzƯµ2ûÖÙa^îÏ¿îx́wK˜ÜV,iä€p ÊÅđĂR¡I›´d₫F®$¡Ñ|̀%>Ù™^ñVÔvUư~*wĂºAlI~±å —7Ê“µóùµÑCôB}Œg×¥ªÅo–eäMơKONQ̀¯ư•‘¢ơ¼ĐRÈø‘zrÈÆ…j‘ú×Á*[ú7éë%¦u à_%;>&7[‹9Äc©ñë€ j̃±‚[năuÓ}ßËíÁ‚©«|+¢w9÷S®2³è®»đ¯1‡Reqô+]MK~/ûæIæF#\Ó®5=ιÁ²×>©”‰²˜ó.xnLj̣Yµ3Ùc>ä\¹­¹®5ü_]¾“Œ°Á{ Ë$uⲡS#ÙM%Ø Ø¾`ẁLôÀ…"(ÙôuÚ„Â2å½Z÷/¨Ä3œ¾BS¹R?™çDÜưYnY_×÷èk‚Rjú³ ²MÇ/'´Ó’[IÙÓK–¾Êœ0Ov÷ƠK. ÄâN°Fưmv¶ư®c₫Z z¯‘¼%¾Ë²±`[¤Îư©”Wõ¶rđñíñFÎÁËơÖáí#¨jÆÆăTµ‡âM ›ˆ“í|*´°Œe¦N^t/ÜR5 3ÇBú9´×6É`Óă"%ë1ÄÄ@zé]GúĂỲ5î¾Ă–nQ̉¨ÑSơ0Oë̃<§U¹’«½¤„.»+‘““ä”+xœsØ]H¢‡<30(ơ¤ăZëăW]<jpœ ₫‘fơ ©§D̀«oPÂN¤Íˆ~ø½SơLHBNs`ùƠ11Ñä \ĂyÛpk%Å>d¢Ú‘úÀØĐÆ‚“ăÑ. ÛC· ̉ÿ¬?êÊAÙ ü37;h0­mD˜lIßêBóèá ©eK5`ˆÿq!k«DơxÂ1Æ<à*S¹l»₫+đ~ăæn&¶l·’÷©j…I›áü âèËû~–ƒ±Ás¿¼·c Ơ"Z¹hjI¶y|¡ÆB¿û<è ¶“ ôÍ›ơ.Ṃˆ÷97ÿ€í¦v·ß·6ƯÚ‡A–~zÀ̃Ø*¾‹W²×dÜTLµâ›äC‚äËá¾ÆƯu¿&y@d‚b÷á˜‘å·øÈdBătßb·:́Ohx\Âä0 Ÿ ,A1q.ûA¶BÄ|¼—z2R€#äÙ\XºVÏ®×ư»­Ùök‚i³ªY₫À¶îø‚S¦·Ùñœ\ƒư‰e ‘OĐl“ˆyPôØ”"/n¨§œ¯:ï¦$eXóù“Fú°AÑXŸ(BULkằ&V’§PRf äƒ\ª¹²Vôs}~I*­` é +•Â0Åç̣ÀéK“KgœA¼×nátCó¢sr"…—$Wâ×6p'ñü·gB«É J­œ˜#©4K³ÄG©üm endstream endobj 645 0 obj << /Length1 1904 /Length2 14217 /Length3 0 /Length 15384 /Filter /FlateDecode >> stream xÚúeP\ÛÖ€ \ƒ{ „àîîw'8 4.kp‚wwwîîîîÁ —-ḉ}̃﫺·º^Ï>çóÇ¢ÉI”鄌m â6Ö`:&zFn€ˆ¬² #€‘‘…‘‘‘œ\¶₫g‘\ hï²±æ₫—†ˆ=Đü¶&j~S”µ±H9Z˜XĹÜLÜŒŒfFF®ÿ(ÚØsD œ@ÆYz€”5Đ‘\ÄÆÖƠdj~‹óŸG¥€‰‹‹ƒöOs€Đdd` 5›­̃"X”mŒ@@°ëÿ¸ ä5ƒm¹œé ¬èḿMù©hÎ °@ è´w₫( g`ü»4zDr€Èá/² ØÙÀx[°­̃L­ö€·èeI€¼-Đú/e™¿ho€‰é¿î₫¶₫ĂÈúOc##+[kWµ)Àd È‹ËĐƒ]À´kă? ,l̃́ œ @–†o ¦nR¼Uøw}Fö [°½Ẹ̀₫pó¶ÍbÖÆ"6VV@k°âù‰‚́FoûîÊđ÷áZXÛ8[»ÿ‡L@ÖÆ&”áhË j ²sJ₫­ó¶„øÏ) `cddäàâí@#3†?¨¸Úÿ2ư±üVƒ§»­-Àä­  'Èøö…èî`à€íîÿü/!21ŒAF`€!Đdø÷·e É_üv₫ö €6ă[û1ÿøü÷Iç­ĂŒm¬-]ÿQÿóˆTeEäƠh₫.ù¿Baa€;;3€™ÀÄÄ̀àx{đü_?  ¿óø—­¤µ‰ €ë¯tßöé?);ưƯ”à}ÉÙ¼u.@ùO£edc4zûĂôÿ¹Ưÿ4ùÿ×åxùmôÿ›‘¸£¥åŸrÊ¿₫äV K׿5̃:×ü6²6o³`ưUƠ®,Đähơ¥’`ƒ·i²6}ëh:.zVö¿–Aâ  ±ldöWÓüµ®úǸY‚¬ 6 ?.#ăÿ‘½Í˜‘ÅÛ%âđÖ™€o#ô¿aŬlŒÿ˜5f6v€½½+âÛQ¿Àém(.ö2€̃Úüfx+Ñ`bcøÇ¹²³„₫Xú‹8 "ÿ'€Aô¿ÄÁ`ÿ‡˜ _₫!vƒ̀?ôf'÷_âd0(ÿCoñTÿ¡7;µÿ×[tƒèÍ‹á?Ä`0ú/ư±S Æÿ·l€ÿBfƒÉ?ø̉ÄẠ̈₫C úß̣û·”ñMÿ…¬³ᛳÙ2¾¥lñ/|Ëùß®̃’¶úßf“Áú_ø–´Í¿đ--Ûá[\ûá[\‡áÛÆÿ…oi8₫ ß̉pú¾¥áü¯̣ß̉pù¾¥áú/|KĂíOüŸ>3r´·»sÿ¼̃đ?üçºçlŒxüÍ«ư[î+…évǘYQú®¾ßÀ«ïˆá;í+úđ>\³ä„.ù́…>l`3¾6Xhà0Zè®{$…ră,Ö¶À˜nÓzL`đ=;È82ïI··ké³X›âœ7* 8ßNSá̉Ú]îΦ~áưÜX~WfvGQB 9 ‡ÇÉÉ‚ éß*”ÚZ.\%4=Ó&ùÉáJṕ4†Hüđ!©w˜™m«o©˜öh3‰đèÅVú&ơˆ?ñ ‹@Z0M¾Ó%†÷Ié{Óâÿ̉ĐaDY€Œ'MrgâJâê,M£íụGĐƒ -R-…®ơÜO yi¬–Ù̃(Y‹Đó;́~ Ö&+%ưYhxù[UÍæ0ÁUnóĂàk°N”Ë ̉ys®–ª_…ºoưÔr©ÂØÔ˜lY!(á;ĂJ@ÓBª&oÙ`Ñ×ă&ë~›Ẹ̀[W@kƠ'Î "=¢×NËytxoP=A.JR\}\ : ä'£0ñ¾*‰’Îa{mà́|¿k}N;2Ưz†)p̣kQm31,i° FOŸ×O_½†Iû¹XG;K†>¡Pµaeó»́es¥×.Ô£Âí> :ÍWîZgMG¯®[|¥S—Çû³ªá‚íákµÓS P–É®ªpWj–ü]q§́¾ Ç÷d%¼oÍ–,Ç¡%†̃¬‚SͶ(lß8lóŒ¿q³*[XÖ9L¥{zsó¾Ø MPI’ ßÿ(†,³¨NNFóĆÏ̃„^ $iHo}æ‡\ùEûøÅ8 ×^̀ä‹§Ê/₫Ư¸–àÙ¡•å5ä}©+&°S{Ù~/5ܵQ8÷´ÛêiÙëÇă÷ ×^œiñ°ç¯ö)©¿€~z‹.×Q¨›¼£ZØÚ«T]´ä)?R¦"^”̀öÛäZ”!†.g±ÎaA‘g'•"†úƯEï,ấ#lÖF0Ă\¼®̣7¯r=ư(t¦¤É)†‚#E-¡_[0`¥Úv¾¥ï*½Zy᥹‰c9# Öơ¿ê.&ëÅ-íµI„Éá Ñm†đ1?³êâµjº²¦ËIơ "ª벿(grf~ Çù¡Z2Àï`† ^Ls<Éyî‡vî€óưv^ 7¬GL燳܋yŸCƒ¶Hốk̉âNu”ˆq´‹IMù ´‰h~~<å´ ùĐĂùPp gHzÀÀªV̉4"ˆ&É~V%mÁx6®?I<íL*÷8¸P|ù̀º>OG4z&¼Ó@Qâ°ekyí7¥éQpqWCûöL˜_1kpÉ??Hs‘̀¦S2è,$y/ )3§̣c»<ë¾@̉ơÔ|÷ø± =·ú†¯tJÛĂïa£¤ó"¤âÉƠKü¦vư­™©-ơ«E¿“{LËZOÔÖ­WĂ0 9Í;l p̉sĂễ)ósÛ9?„‹ü ń͵9>Ù–¤|ÿ»Ÿg÷P;¥E–´ëbÚsƯ)yÓ5rŒ•AˆßtPéơÚ‡q‘‚́r­º5ăñM#âæâ¶V~#°‘xG¨'O@vlÅxaç¯].¥(¾¬¿ÏưnSû£”ß@ ‚ôœæ`æĐ!³-ïËè'æßHßÜÔZĐÏÚ¤›…Yà:°^)~#Q\Ưưø´®|ÁdơËñ8˜ĆT¡7 ûˆQ”Ñ !Ć3ˆÍ ₫ÓœLÜ·4*øú쉫5¨ơ¸h‰ –¼µ"SjÆîhú6Næè‹‰}@ëMÔ1QÎÏÓ5˜—Få˜Ï¥?Jv?_¥àBMâ³hfŸ– ‘L HAñ©¿;́Û Øăw][¦lÑ%}0Ă忨û|¥uº*4©¯4Å·{Æê¼˜jvYN§Ÿ:O7yæ¦~ªW®­ƒ¥`1<ñ±a…÷Ê« ²$œØ J$Ö|,/üÛwçRRÁf:›s¦÷K¥†UFw±ógÎ".‘·´Ó—½î¼°óÅ“S&@QâÛ©íÈ Ă¾¥49JEè%ÇrP±üPÔÑ̃P…Bû›a¡¿2Ÿßé‚„¨g…ƽp~奂 Å[[7÷äéVH÷M¥ĂÑZKù„yøáÉÊ%Ö¨ñíx€¹röxKοư1iƯé"¶?b7¢ èP°›PÍ…µđ¤µ´¤ë~YÚ}†L|‡E¸ÀÛ,_k;©2›b¸]đpè0Oơ{9% ÇQ̣ÂR¥Ÿ₫½h¤UW ÂѨ{¯h ₫Wđ`;ÅÔܾ‹°KøŸ»T‰dX!mĐ]Œ.ÇÄ #H6«åÔ£M딽ø@Œ°jé ™jÎTééùÆ´]êêF…®ÜÅÙüM'¼]†+$ÁŸ‚*Â] Ñ¶$¾mÍÅÛî Yßî»(,\́8„H;×½”c>‹¸7[”a‡6̃ûQưª b…Éus‘'àÓ ®^ â>o„V=^éÆçàÔ<ØÇ©çZ… Ôl,Frtơë}¹ÊÙ5àê‘ûê¯ma…€/! ·j0+yhÔ…c¢è5•|¤¤{”s¨£Œ¬ß¯âLγ́ÿ™ QóQ$ÜĐu'-ư©q¥œ‘¹¼Ô16w™lÔP̃¥X¿Ó ‹e œHD›oRK9|à¥löôàÍ™\O &_C´ï@Jj´Éâ}µîç2Ă*ßÅojAĐ́¡Ö?YooLøt?0Á…\±h6=ÛD̃ồ©ª£Oçôä6ưD̃ŸÆ¼¥zd^´hè%~ô₫̉«ZhróC„fŸ÷®ŒBÀr$ŸøsUKKú•ZaÇÊÅÀt2s톇B·ơu |¯?V{%ơ;³í) +sÖoÛcÖ€1 HÍV÷&Ö·c]³Ä¸.cNve·,¨Ä‡+a€í2îó˜®IÁ¼wÅÔiEÀar‡Ưºáѳ?~}Á?.3aN»k±̃a`€Ús¢÷Óuî†'~ ~;g·°+bCÏùú0ºdØå»bË~ ¸P$Ưe'ˆÅ1ºx}Ÿíª†5H¯à6ơä̉ ˆø¸­$‰WèeXÜ»ˆ; ư¾z‰£é!åˆ,…lçºăè̃¢ wb¸‚¨w—é'¸ ²0u0=¬BLC9%'2}b₫}œM~y-ÆEËA+#A³k©)·øá 6[kW8Ú%4l^çk̃v朽ïƯí3€€LïGf>i¬1tbÎ%¿=¢]}pWǪB£ñD1£aÇ5Ö”_kw*mV†ÅÎgA™u¿‹¡jN.yG—¼œ@sú}Ïërw‹¥ôÍë§₫K§N48^ü¤kß2ÜÈ—”¡TpmóÁT¾Oå¼muÎØh̃Äí•„ÛíÎ:&‰æ5y‹¶ƒü¢/Y$ܧ1 7Jîm —”·÷ ¸ÅÛ^u ÈÖ̀“Á™Ưêå?̣˜VÛ[OB˜0;Ï#6ëưŸ#ư³‘£¿¿\øÇâóđyëLv¯X Jj>¦2)ezt¦“×A6 ùû§Éœ½Đ¥>ê\ÍAçÈP×FnŸJ’áẬMƯ„­đ]…W,J>+ iÁĂÉS‹,YçGWpsÍ_¹u#¼ÚÏ3M %°z8`_FƠIÂm'¤Y‚a¼‡‰h´&y²a-éBlö<ă­^nbY|mªr¼á́K°Ù-Ö\ü_+–[7\Ư e/æ]±·‘LJ»So¬Ù̃§Iê¾ ~AóWK(ÄqÁúW!´D5emFmJ»lƠ1d‹Eœ†½¥CẳùIû@Kº›W¯ĂŸñѪÅ.¨œ9 ÙK’¤|‘Ρ« c¬j/¹k¤e?fV:Â#O‡IZ¶ÓÀŒ:—fÚ“Ưư¼„"8gôûÖä\¡ÿëÔĂqtùµ°‡ .cîŒ̉I{ÔVÁÁ« DL°“Ơ•¬XÇ!"—ÈÔ<$ßnYÓ~ª[r ¨ñ§dƠYôÜMqêµä6qn”̉ÿmTôƠ’×I*Ç]ÆMîÜB9»ÛQËå¡ÀH )âö#~çÊÁÅæQÿNCivº.ăl±=˜®g£ï^($4̉i”ÁÍ™_•Æ­^ú4à#°%íNÏ.\Ó:Ÿ ":ÿé˜?_`pjpTjCc5í®̣ ¾c‰zxT+Î2 ‡Wó`ĈÀµc`¯7•÷̉p/>@"¬4ü5:Å«CâÓç7uoz÷[6&³Ö+Æ'û‘ûe,ê‡I»Hù€l\_ëÓ’c΢=ùІÊåËïăÔBV &Ñ8­éKD[ UñD•Où…„†üÂE«‹u½́‘¿úê»Å媦!¥W\qØ—¹Ø¯*ñ; R‡ôU)ÜÉïî²à„&¼t‡‰(I₫®¾†¤f^pṼhCMÉ2W¶yu¬$Çø= ú®û‚3O›¬æÈk÷.mù–lIûĐĐ’ÉÆiùƠK—₫&G^doM‹*QÏkâE J¥X}’m‡+̣k2Ó„>+9{•Ù‚¿: ‰mï‘wúVZUôhôù!–Ô2µ₫Ú$îR<†üä®jƠ‚ÛnKÔüµUR™>–Û5w;ʵfàw"ÓLƯk%Áæ₫£»®$èèÑÙó&–×₫Dùé0hö²”¨¥Om8?Æ8Î6¶ü'9B5Đ>ê_+àî7vø vá æXRÄưrv¢'L¬Ó™é—‘JFÇ“ô½CÉl—lqr̀¬–âàÖ< ZŒÍđ˜Ù'MgÈúÏ1{,~m÷WoUê%ja%¨éqT|t½|j¿`WmF©‰D§0炇dBh‚€1ß*wŒ?‡"Uù¾ç$Ï»œ¸íÆÓí†O7±¡{„‹y‚Ÿû1½U¤sWK5”“ྔœ̃€"ˆo4imÑÔRŒ= « 74â{¿|:̣µ̃‚̣`–‚ñĂÙ0%Ω¤X đJfXù̀$ÉÅiçå狱K̃Ô &Œ ^üÏƯúµéè!đ™3ƯNº•k£0nŸ¸ƒ_>ïS²´wÓ)`"jL,á4Ûạ/đĂ®µĐà"œ‘높(NÛĐçD:ƠÿŒÄœố‹:])"À¬”~r} ›̃»F2åúxă7ÊkåPó 3Ü]€öZÈøº[Đ2éQÜ«.¤.î=ou͈®ö)çưj³ơf¤iÁ7[¬!¨ọ̈ô´×!1}¥Uà½äËJ₫:m'Æ.¬ăàIƒ#9ưÚ˜Yÿ ÇR^B2÷X U>yy¬‰Ú¬»ôSMR̃uÛ¢„^àùăé‘IÙ^† ]‹5+1*†¹ rÜĐOب2]9Éb´²-”µ¼A·LߨÉ_£XU‚·w|6<‘k ŸO£³Ya§\£ân{Óv—Êcâe3¦ŸZ¿^*»¢îơ"¬¨l#H¿ë¨₫Ô”/ËsîGNYăü„ÖÊf~ÄçÛ|@·Å¶:‘̀GZ蜓…°ÓăÉ;¼ HhÖ’æiµîr{O„*¹ XSƒdïâ66µ× tJ°Ï†Àëp­a…ăê0ë¾»‰r‡íÊŸ‡©ơ€=`@ס$=Y~¥“Ô-€ÍjĂuáS@q¶¼][ó@x-ÍÖÁ;ÇÈ<!‹²Øö àÄă!‘؃âRy=ÜTT¿¯J\s¢›h«_đm;ʃ¦păt ÓaŒ÷¸Zjåf̣óŒ(Á…KO~gL,¼/Ëíô;u-̣¾–œŸ{‚;pä*E$¿~Âi¬gûŒ8)<£Ụ̀ M÷ăùD­Ư7®Íİ'È|hX•8 7)ÿ\6Ü)#»]:¢c}¦6שzäáAV‰̉Ä£jYªtky÷—<¤Ù₫¹F[…Jªø¥̀Ưâ=Øîîw9&m~Åtơ«€Ü÷uB'üKc·Vă×>V£„r ›œ¡D–ܶۖu÷JQñi<#­öÎÏüHæÀ¢©æ+O₫uˆ)lY ÁG~ ÿo¯³baDkóĐ&%Lî,¯fU=Ợä§U,±x'~qÚgÆbH7AÍéJC¼ø*R‰ăôP&9fh€|\74—£'0”–åWB{s“g©[·•FnƠ|ó"C¸‚¶©{’·D ø…?=``"¥’[ÂFR½P¸dGnèuêÜοc‹ËlåST®¶ÎŒ¼ư[À]7iVœăI¸B/™ŒC@µÙƠ™ér¡“,„e•üƠhØz¹›¾T /PÅ9YÑ ¯C›²Ë”¯%èH"¸P±Å”ûz°ÎΗܙ‡Ǿ“ư₫&Y·˜µ³v¨¾=DÓ⨠KM ¾‡—aJœ7Ư‚i¿LçÀÏS3,À\ ï N]O¯Ơàɵ“¨†pÓèk¦Ñ́—Ñ]E™üĐzw+”wÔbEÆÔ¿ÁBs„½ưóô‹¬Ø(â •-÷»®ăºÏǧŸ°åê_Œ¼$>»,ØÖï—:ØPÊ­Yø« È`Gâ’‰Îî×’55;%gWÙé1ucZ²oÂÊàH¯¾v£œvi‡‘Zä½Ê‰S>³Ú|¸ÁÅ,%åÚ \ỏÛºạ̈OT6QđĐ\¿­ë°+̉Û KzWr9ט¦¬‡ ÛŸÊ2 wØ{h,t å ~?|LϤŸ6Ü$“å(“ÓèÇ×mꔢÖZ”ÙH8AË0l3ÈË­ Ó°TªlÉ[›+5±b¦û6ó™³Âz‘ÑŒpÓ[Â]xQá1‘c’ieĐiâ#‰i>nâï½̉ெ7%u¡p^Ÿ7Ä̉âhJÑæî~ˆîQîL´`ôøB¢Q¾ádV,RYºrđ́®ƯdµóÀf²•̀ơ.u ¨ÎœÀÜQ'CåÅ3ª?¦e;H‚úlêĂá¶M* ÓˆÚ0)]ß.û•›§u”É4Sđ…íLåoå”,½×צt­öæ»ÁÍËúˆÓöm>5•g\hø†ÖƯḳẴÂfñ–§Dó8ÄÚƒÎ/đ5̀*¯ÿo™°~íCø“Ø.“‚'Ê&²»ƒŒơñcÁw”¼ŒÓæj6@ƒ ÑqÉe¡5°]Ü¡‹f† ¡ô{JÀ]>§(éôgÁ́§3í¯d͸UjƒÊ¬Ư‚z„`®Â—ö¿ÂP’'̃}=sÊâ~æo÷W¾–Ă2mđ¨"ó/Đƒ»Ôư%ë1̀ávÚ°ØmrÖ̉Œ+u sa0|¬+˜‘Î.rO’¢T8bmi$ ¨Áê°¿úßÊ#×ư£Rm0úÛG¡~‹lSúªonÏ̀µl¡1%r$,Wh±xJC¦¨Å²-{’J•.oµøûđNĂ; Xm°™©+u#̀¿RwWSúưe˜•d…Bléô!K¶aˆç÷Œ§YÿÂ5ÁºÇ!دaå Ö÷Î qX/–á‘ Ùéü‚”¯©4ÿéyN ’́ªYïù·C}3q1#ªpà"&suüZ ·Óä„âE¾Ø`k¡¥À\́©½NTÅú™„åïŒ|¨Ä]Ç `ñ9¿ˆ6O®dS¾ û×…!êe‡&ƒC“ÇÉB©t*‡úyrơ K™¦ÖyÅ₫©ÎYcm÷LêÇŒ6á|Ír¢¸éŒ̉ùqÊB-WÏr09X³}À‹J*uÍ“’sáL]ËŨ€Ö .ªUŒ#{®Ÿ·8k‹‰Đyđ”dÓ|w´rO»½)ÑÂK@|Ơp™ Ơ3E)»°zuµP–"‰º3"}Óå$pFx[Ÿó^'·û}jY&pơù¶mÜz9‰rKº¼EÔÅœ  »h˜̉™JµU³Ö= ü)7€kÆ ¥Œ°·PµÁïy=וˆ÷y‡¼`ĐÅL¼­ƒà”S¦U°¢ ʶ.â¬ÛI ïq|ñ"”ÙÜ i^²B>”ö΅#/ƒĐÍe™Û¥à́À²ú¯ªư½{˜ñ¼²ÓиÈócø"£kæ*ƒeW3¢«\¹¿*ĂxC¯=Àt­(û¼Ô÷÷ù f]1³ø¡ ZV¼ª8Ÿ­0%ˆe¶ư8̉_b‰ºü5îüª„4û~½IÛ}FcÔÀg^.å2 …G¿ó$Ơ£Xcyé¤dcTkGä!…IT;|OѵüsctbéÑl埥8¸&î×Z‰­ûµôíV˜#ÄŸ́&HKáOÓN»@ư{Äá6j~Á±n™ ûf9Üc“½)B×Å(¡‹ÛÁ3äÔ2Ăß÷Ó±7U|“B˜ÿ¦&7Ñ–ự~¦á AKŸG¤®^Ỵ̈ùS_êăÙ¦ÛƒÎâúfW#³°ôK\”A¤ô€Í̀q">Ö×k¡ä¦”̀ dO'qAùz£ëÂpóÓ2RºoÜüÍ-ưDE¨ÏöZU2ĺh“%'' :j¥\\mÔW®á]ÈĂbÆ—wÔ;:¼¢°q¾¢×Ôê¹NrȱƯ©_ă„ă{4gBÁ"á=º9ÔJ9*Zjó;pylÏcÆ®?Î̃¯Fù*FEƯlƯóÓƯÀ‡[oX—¿GXEĐÀ¹÷S̀|Ư†XHŸ® ªwFXä'¹–d³NkY‘aÚÍ›R{VWèđÓM'a ˆ|Ñ Ad,;wÏIåzY±ªf¾ÚNA\æaGßWÇkŸ•ˆºê “₫´¹â.{ç1¦EÁjĐ›¥ûvVÿĐ ä¹q¡̀O¸ Yk♿å¬}}nÈ5¢íJj1äMHU £è¾!ùÈv&T>ÜPÿ]ßÍ\ØœsđT°ûË0ºÂí¥ÈŒ9"6Fœ› \fj;“C°ËưiaO1ÍÁ8²6±HË£sÎ1“¤~íÜj•èȽ¥å=q«Ïçûéƒ^(@J„©ơÙªéH&Ú_ï Ȫ́D—gzö½k1«Ưæ;²Œf,LŸRÊÑ£ưwÂEØT~ü§ ư.•cê¼ôͰäl„-Üb®äÖ́L₫I°₫îX\cÈú«táÎâq£Z†H0±WrÜ D%Bx|×ç̣å „‚KZ¾6 ¢D_‰pJÀÙ+"÷ơY4/rC’0è9|í¨qñ,OÓiO@è}¬÷Vß(Óë7l‰3:oc¤:t9$ÍE]#–W¾‡?+æ̃*À¡Ư•—·ổÀ·JFÓ%e·7·đÚ|W%%x²Á̀Ä5ĂI»ÉƠ/1¼%ÏṿüT ÿ‚Iü[́lĂ!ßa¢é¾i›Ăᵉ߷Ưf=² s›iÑEówºD•r£Zr0÷—ÀÖ®́™³>é”6ßC CàWùí¨tæ'oïM`>@‡ö UFỊ̈pÂÛ6¥}OiGæ•"ıCĂÖ+{z6Å­ !è5=¸ÇSôQ0H̃û™Nj ROg„ÓÑj¿!¨üqEʉæ¶KlèHœéajïk |€èÖüQùˆ€¦t¦mÖUÓ‹¿¨†)•J9`́}h™ ·4ÁÎ +®qéÓäÔoS×´uÏ*ùjWÂeÇ¢́…‰›a“º@V‡u ø²Û=øÛ(nR„F ¥ë·4龌qăæÀ׬R¨à&N¯.amnAû#Õ+ø+;Ûi®–åÁa®TßB«Öî5NÓ ̣E2ÓơG n5dqäqú6ïËơ¯i)»Ös‚ê›̃{³ÛDè±N-?1~DYÈåu  üœÿ*Đ䱦ôW„ăáO«W¿́Ë6¿ÿ°qi.¶:µ·€üÙçw#Á÷×ñ‹ÙH¤x;”„~Ặo>èGú£Td°ø+ú°/zF)Qj|X ^3).¤Q †ûŸÔ’u'3^K˜Ơư¬qŸ‘G&́lzƯ(ŒÏêrMùFËiloöß8|19€Ú†Ê*µqΉOÜ6—ćwùhUD‘Aä^öÑ‘–C0c¸2wwäGgôï"D,¿́Yt¶Ê&„ŒÍ¥ÑoÔñRߺ»Ph—w"ÀA}É&#¿ =ă¦\̉9.ÜX?· ›))Ó±]£&Û‚À$ú¶vé«êx,¨vƒ^¼ŸoÜEE»*5~Ư>CÂuÊ™êwp¾́d”MäÅ₫e_¿ÑlÔƒ.™ưN.pæûṼ²X"ÙEÛ`CÔÈ¤Ö [HCÜpơ ù 1ä %*YKÖ]È í#µ,¥PV~µ£˜µ0I½́‡êK˜nÄ̃4'₫à‘XÈ׬Rèƒwmyù=Ï2¹CYĂháÍÚÓtă‚I™r5d£qúeîA²‹“bKP~‰]È­í¾pÇ>'R F¸ÉyËjÏ‘?́*WSK±¬믵qđt)¨5‹ BíkéÅ‘ÓKÁÑ ïß~ñ(ó‘nú·~¬ßÆ€ èkåALècwiC•.3O9¸‚`7Ù¡ØFßúW’sØ{ßïb§̉)ưÂïù­ ñu"Í`é̃Ù”ñ>œúätAu«̉(H³ÇˆKÇj¬Í¹ K. j‹vÄLÊnGŒGrn¶ö,Θ¢vW Â]ûïô ~;TæŸ"Ÿ4ÎÔ‹“́ ^̀Ơƒ(yŸÎQ:gç¢Af«àÔ¶[qÁ2ø,7˜LBp{øx¶´÷eP ŒÀ4E/ ®Êï>½̉)<²êè^›ÙëjÇmJ†«Î˜HßCåq¯|7ûªÅçÑ›]Ïú|fLÑë _Üù\v“Áœ+—øeƠé/OV:³£ô¦ôËÎÛùl ¤¦µa›ú¾́¯„S9ö$R{¯–p1´…¯}?øf²P¤°¡kÜ}x 9‹Ầ!)Z:¾¥ßc,‰/ùÁÛ“÷Pe7B =ëÂnKܬ íà\™ÙÆdæ`ze.Ûˆ*í“65™ÔtñzY¦!QU!MLjÎñŸ;vđ!áWB)ñÿ2LëißÑ·üʈª¾ §ªRNé*ê©MD‡âË\ïÑûóö æ̃Å({×é6Kb¼RĂ6ŸKvE¡Ào¾`€˜¬-”ŒÊé&ü¥÷@p(ăkä9ôëBy7¿ ¥Ă¬f#°!ˉH98éUœÇ¼1³(‹K ${³{hR¡T眃Ġh±ư¦°7¶ù¶÷sP}›ĐI¨NÙ} øÅ¼zqÄ}&ơK`ƠưĂ¡‰€·h¬Ó´u|†'à#ˆMgÓ3’ợóWV”S™œb´â1’œƯ₫¨hôü]ñßd9_¦>² Ôă^5¹e³¬‡19Woô”¬EC§‚‰ (9͵=Ö~ô­8­¢Ê-æ-€v.1¢(–D1Ơ‘ó­"‰ï„ĐŒ¯^ß™LË2ä…|¸Ơ#¼i?a“¢øÈ:ºÑ(_éơÎ4+ûHº2K®Sô}Ÿ3·̃>¹ªomMàÜOWÑÂÀùN¥áöuëíOˉÜ8nfˆ̉kö˜7 –‡Ü}vTÑíV2[Đw‡«œª0—y!V§ ùj!%µ( cU””¶v]wǺờ± `<;bưayD¨ÓØ₫¡b.ïâœ̉U[3ÔK;逽3¿DkLĐn·ó{ö‘P«í­ ô†-‘¼4‚ŸËÚTrơ˜³G„¬m¡|Đ…l.Y/¦†åKà8øJ¬öaÜ-æËÛ`q¡½e¨é©m·f¢n Đ̃´{Ă€{‹FŸYº!'Ø8 KÖŒYœ/cl×Ûs‹w,]Fơñ–‰h±é\˯‘BB̉ñ69‰đÄ, êü¸iBPgÚ—©Q!>¼®Tû¡Â¯bXtßpxaÎP'àF+R<4Ó‰ˆW &qOÖ._­›²>8äIÈѤtײr×,í÷j±¯-ĂĂöqÉyL!x \ïb_ºù66ö«ǺûÈa0>}S°TöFú¤Ï´Ùœ«¡Ë7(N4¶{¨6¹Û-DyY®–p1́—ñ£ƒ»|{ÑŒ”Nê%om<Ëü̃ư”íîÛÆ†ŸAíL¸M=¤ûH1.t₫…H1̣8X¯“ờtr@¥U“y¦¯0>v°µñ/ûغUƯ₫!F4Ÿ)é^:B…ăơr›u×EIÛ d³̀yŒ±±Fuî`k† ‹†¿‚#{öÚ¿‘ä:ăÊSfß"s´ÔlA8Ơ3kU:/*F#Kï£ ZÖÅGoY½`K Új`Zq¢´¡&çëLœdT“PUY.¯xĂèÀ>˜mëœY¤Ơ5}¾åáá`á€4êÇ¡¾gƠ{ͺÎ[¾ ÓôR¾q‰É?ÿ`\êdmƯ5e_1ù©”đÂk·¼“˜$bX̣.8­ùël‹= ñÄVë‰À¥É}W˜\ƯHK4çi£Ïí+’•5£+SJVÆiØé”!a ,IaK_̃èƒf îÔ5ܪ‹ăïϳƯw°|¿ƒÿqo¬{ê¥Àj"Ø|å‘’rƒ&81đÓ= B“Od€U–I6ơçeúÆgÈŒRaàyyé!q*–^̃É0 ¿AÎH9—|üœuäêØ¼Ó¨ÊÙBíVzƯ+Öhf¶ªAE.ø[f6§ÓÉ• #^Q(2ë¤:cnæÈ•²p¡ơ¦(åÀ;U¢üë¯oS€ä­Éu †̣̃F–mΓ/"ÚY™îµ2Ççʱ‰úN9¦FjOá˜y”tVY±ø½¥Åi=ùRÓOáW{ÂÁ[̃\ :O¬¤t)?œ¿ªPG—à ØÑÆ+j!è]œÔzDÊ·»dÅ­{Ä>潄T]èæP-bz¸.̀ÏÎtU¦…“ା —xEÓƒ æK¤Ố[Í:í~à£:HûáAĂÿđ‰8¦ûy$q‚•wpC!PêÜ oó^Vu‰îû]A=*Ê ª4ára[6́åHĐ·‰QÇ3¢̉èn0¿êDzÛçô.äûÓZŒ0ĂäAá7|5ÿPñÖ»ÄN¾|Ơ”î ¤sÄ+Ñvñ`)>*8«z7ƒ²Áí¸ŒDQgƒå(à¡°|4k›å!ÏƠMÁ¤+óéX&vtÄÏY Ûuáʈ<£@±é…gỊ̂5/D„́jŒg±@·¯Â@ưƠœ8+Vé78̉^˜đ6ª?@đÔĐrØà)i£¿ Ø‘?Ù䢪q;ׯß\eøJÓ^ấƠOlºƠ•Ÿƒ²–H<‹Öz½ÓÁI¤8BcâÖÁjÙ¢Ö!n/Ị́C„®™£ª.8U‹¸æ3Ư}]@ç>¾9ÿ‘K4™bĂ#²¿₫ïµ¾H€j©ç¯\)´ ª;p¨«´ÄkmăÔf”64ú¦TßÁfÑ‚»ó®u]bHµ7ÁJ €7§f)ûP­Y½đ6RïR<»%…À–K EoÂ₫……zE—Ê „÷®Onâ‹/é|'2wS°]Úù~!’aö“!Í’àD:Ç™­àøVṬ¢)ÊCçĂ:°n¼¤™9̃à1Zÿó}gíðq"Ç®’Êa©”qƯ›“_±̀¯G‹ü̉¨Ÿ" 3¿½çö‚«Ỡ•é†äsßHƒwhg(G æjSÔ²u¶>3Óhth‰V¡hærA*¸;ë–×ôjhá±kn7„R8Ø¢_a–@ו±*đs`~«Ö^Àà«eA-aư6ç!Ez@Ăf:Á™OfQó̃“Ïg^j›‰c:›ˆ-r-.•°8À²Ñ̀ú°-Îå3zÄwn;Ö%wJ¨—ï©₫øàº±_ÎC!1•Ă>Óiø\Ơ³3ÊBBóUÜ]øăB‹t×qgQ‹r₫B–øY†Ư¶îØCö BS¼‰½Ó–æ¦Â³É( ¿$>©ägfä̀먱÷pQíº÷e&e5b+©Ñ¦í¾ÓÈkÈÚ©$Œe×ö̉%(Ö̃É`¤ŒxP#ưÙ ¼D˲ù†¦\x¢v1=J°Éè¥="œ¿¼zđ.O”AwïHÏ"¨₫"i˜¿’œÆª«êưÔn’§<­ăa’E=Ñ1"~ n Wơ¯ÇÓƯ³eÏX·®hiG?‹9!Rê}q{Ân&gû†‰F½†́óƒí]«o9!ơÈ“b‰Á¦â>Tă5Ú3Û<§_ªÙóÓ{3̣ă´–;¾0égZ,~ÍnăSWt¯0ø4˜«_b¤?ä%·˜‘̣æƯ[»yă³ºíơáX¿Ñ*×¥]0~Ɖwm†̣(U_mî ¿ù^έpdñÔX²Û#2‹£"X ¤Íao [!!ê %`Fpû́c1-úưđ©úª@ºLÀc¼¿@0¨œR€ăDß¼\Àbe­ưËWØK!¬áØvWÊcÉn/PĐöØƯ•|m) ¼‘‰5 /C;¥Ưz{Ư}w¤Q`%Q Ÿ¸U¶yởb|®„Ÿ%Yí̉|`¨NeOú*Ù3éz³7£ÁKCÁÉÓ¼©¡äím*8Î FNói’WđŸ$}g_ÿm'¹N;·Ú#B¤i­Éó„¸Lgg1ê nx)× ó€ËM¯9Î’›Iû³¢¿Å/¾à#¤\ZEåŸ÷ư^«¿Tœ\i‡Ë…Î̉cEqÙêpµ̉t.^W9Ôzz¶ưMº^GrƯ£i—åapqè;ÖûlSè³ù;h`Îđ9B…ÂlHŒsÜÿú(­)ăó⬽Z^4äùúz¨µQneêø»£*fg«Øƒ#ËugănJđ×…"ÉCÈĐ}M¶×9g…¾gÓ‹‡Jl\h㙇džđf¿ˆóƒÊƯƯŒ˜NFçÔĐf/uvϾ̉MY,ŒTôÎö̉ñĂ—4Cá€|!x1£,ÜÑÍ]‹í†ÍPOÔ m}…¼£/|^QüÍÇáº×°èÖ–,Pí9möTûV.j^¹gg«ƒAÎNP̃OzWH§ô Ơ9Ÿëa« ±Ñ$! ûÑ÷s«¶ơX„»²§À¶[x¸e$g£ —-{tç₫½WÉ@|ÖMßçªt¸wr[y™8}ºơr™ ÿ6Ñ;›0ŸpIÙO6Q ©w–aBø\™À̀Üׇ…ù>»ƠU胟…/8S̉Ă•tp0ÉTî₫@Me"å#· ¦µ:QиXX“ă³É׳{Ù$™Ÿº–…y²½yé…]11Ë® v$U“OjZ¯póŸÍo8Ḥw1Dzéq¬…¦= 9n¸öôv1«Zơ% øirSd7óɖʯ÷iS:̣öe'•–[ÊF­ Đ;^¦Èàÿ:;{lF†nzåÆ ß®,̃vƠ.RkÔÆ›Q¸EÇuGÛëî±MRB̉₫=Ơ‰îAj_qüë ޹¥wPÀ£Í£€€>ÖúN1ÿ]Zñ‡ị̈đ·-> [˜’KFmơÄæ´¡GÜOó¯pq{øª£̀¨¿“»û¼T¢} y!nÜ‹èP̃«q““R³÷̀×@>ù|‚â==k­ƯIw§«QÉ0Qˆ[»́P.³Ë°­²œ4ö%8*~»º„›3ß¼u6ÄÂ#è Ñ€ ÷E_¥éHzÆÁIXŒ́{̉yÔ˜Çûë~–U¨¸́‚đÿî¡$ endstream endobj 647 0 obj << /Length1 1812 /Length2 10289 /Length3 0 /Length 11420 /Filter /FlateDecode >> stream xÚweTœK-îîNÁƯƯƯƯ!h¤‘ÆƯ-¸»»K ‚»»»HGî™›™÷~¼ƠkuûXíSµO­¯i©4´Y%­Á–@9°„•“C ­ª­¢£ĂÉàààfăààB¡¥ƠA€ÿxPhơ€®n °“Đ1̉®@ È‹MÆ̣ª v(¹;8¹œ|BœüB.Á‚]…2 k€*@ ́tC¡•;{»‚lí /+ưûÀ`Åàägù+ étYY8T- v@Ç—­,Ú`+âư_%D́ g!vvOOO6 G76°«­# À±hƯ€®@kÀï¶jÀÿ4džB б¹ưí̉Û@<-\€ƒÈ èäö’äîd t¼¬ĐVT¨;₫Vù;€đ¯íp²q₫§Ü¿²9ư•laevt¶p̣9Ùl@@€ºœ Ä Â°p²₫háà~É·đ°9XX¾üẼ '© °xéñ_ºY¹‚œ!nln ‡ß]²ÿ.ó²Ñ²NÖ̉`GG Ä å7?+Đêeç½ÙÿsÄöN`O'ß° ÈÉÚæw+ÖîÎ́ºN w ¢̀¿¢^L(ÿØl/‡ÀËÁ]@/+;öß‹èx;ÿrr₫6¿ôáïë vؼ´ôÙ_~P|Ư,<€ˆ«;Đß÷OÇ#NN€5È °Ú‚œP₫©₫bÚü_Tà ̣s¼ˆÀñûóŸ'ÓYƒ¼ÿ ÿë ÙƠ”µÔÔ ˜ÿÓôÜRR`/€/+€•‹›ÀÇÉàäøÿw! Đ¿ˆü‘ªèd₫Í÷e£₫ÍÙă_B`ø×œ0₫»–øEÀ@Ă?z7áàå°zùâüÿVư_)ÿ/±ÿ®̣ÿ¡÷ÿå$çîàđWĂ¿C₫¯ Gƒ÷¿b^$́yUđËP8ưo¨>đï)VZƒÜÿ׫±x I'Ûi³ ²ñđưm¹É¼€Ö ˆ•Ư_2ùÛ¬û{́@N@ °è÷U`åäàøßˬYÙ¿\'n/êüË|¥ÿ^UÖÉ lư{æ¸xù®®̃(/¢ââåør¾ §5Đë/=ØÙœÀ—ÀK‡₫°+Êï£à°kÿ6ư…ù́ÿ »å?HÀnơô›+»ơÀürØm₫€/«Ø₫ýv@^;èøBÂ₫øÂÂáøBĂñø¢xv§?à đđ…†óàˉ°;¿hüïb.î`Đ ô×¹ư“ùBÑơøBÑíøR ̣|á₫ÏF½Ä₫u©ºY]ÿ,ù̉ˆÇđ¥ÏàËœ²{ư_ñ₫¾4âóü¯Ó·rwu}¹ÿÔiüÿuư^@+”…Y°•p؛氮»FIROÖQîÏ|º?Ư)yPâ ·Ø`>©ÙW‘̣Ư¤åÉh Û‰ƠĂªÂBG$’ÊÆñ{Ú Ju³!âà†ăÀ(D“³µˆ¨ ¡#1Œ_p|&IzK”Qp í=¨pFUóĂVLzG;ŒH~g´·ï¢@JQSR‡¬¾?Ë(Hđ3äT]Á!@Saúk Ç›È T¥̃¶‰{z%#Ô¶ă[ܺnó™Ù~)t̃ÀéyHó¹%©a¿PÏH/×O»ne‰è,e1…ô{W,e_oT`“h^‰º̣k|ˆ¸J-—‘›=áz£§nế)66Í&4‹–ùÙÆ3ø῭Ná4̃'Ÿ¿êèkß”ĂYÎd/ḥ»9Í\Z¬AD‘â«Héyư˜1Û…pÉÎöcâÏI;r|I¯ÍZ‰‘ fR¿@Ö1P†‚t”ôjö°O€,¨đ®°ê2}SæÊÆ%d'~̀ă ÙĂûʳx²r:Æ]œ^©[ô %3BVư“¦Fç}µ»ỡ-cªœ̀IU>Ç­cܦ!’uÄO^‰&cIÏCïOSü¼˜RbÖơRa`áƒö£̃m~Öá<:9C˜R€öï4êƒz®–üÎàƯ'Vj•Q‹Â,¾{? g½DOg5oŒgBb½̣}€e!`>:Æa@ZµÈ1ƒư#.kÁÓe툆À>éd ºL®ö¬hŒ  ă<âî$.º÷¡Uc­—IÆ`+ew(+SƠ;z²¥(¿Ö,A¬> Œ¯B($ăưÑ#„á·|x¸×RJ̉ä(ĂVú“Ở̃INă³Ä–âêdA¼k: 8g[»EÍ‹SR₫‚±&ßP6‡cđÔ[¾´÷,Ăë]çj`Ü×+‚EÓ°¬>ễ°›NM±Ói³YO;¸}Qy•Ùӓ̓ÁñtÆOEQ3̀uSÁ³³îc‹ëÎÍ{ÖEmËCâ,œ¬›Lêú9ÈêGóUàNF=B…/,/r}ûñ»ü@‘½ÎOMSiU.ŒB_„ÜŒ28ơœ\~gPQbµÛ0Ă{ ûI FU6 Ó»¾-Ă×StoÖ¼êqnMÓM«Ißâ{lu}–4–r«è™ûÜÀ̃zíœT¼̣̀ŒÉÀÏÔ9 Jăûx¤íMđù°I†Î$)TZ7AÇEëu{4“G¥Í­Ôz5?JÊrZAwûJ₫5ŸYÄ̀ÁOrÖư'¸> @Î¥rxi©°¨É·-_zRÙ@ ¨YÚÁg»moN*ª¯Ôº;»ÈrÅÛªûx‘Ê£̃ºÑdº²A›Øt;~·‹Åp5™²^™szÀü…{ƠÜ̉ªĂ&ÈÂtNIª¤aá|$±XŒDăFkÀ‚`stôC3́rât9 ¸=¤—íbÏ~C‹$Ñ'¡+ë3àDjÄđz»9¦UM3• »ö!₫jßZ‘3~ÿ­­§¬Ù‚†¤f§)ªd–˜·M÷AVƯ—;9₫¸5 ÅWâº̉̃¢‘˜}mp—F©‚Ṿ*œú×Ô¯‹+ˆp̉`c¾R0ô8¯ö_.  >­Ư ¶ndª/Ȫđ"ÎÊ}ÅZ²ÈĂˆ4ØiƯ2OĂVoä(™Ø‡›ï—³äŒCèM‚÷]^·%2pâĐZ–?˜É¤7JS{HhâÜd{™•ÿXΤÿ¦HÅ6ÚE¼ {‡¨…­é-]«°ă™¶FÍNXT­c|`Ơ…e¤cơÖ&$>(’¢À‡­&¿XQBîơDsÙ‡JÈ;&ùn.7Ê®‡ÍP•'ìZÁ”Ă#¶“ºÓ}«RɾW‚ZI1I+²Ư}ÖHC8Á¡]%í]vS|"äß,69\F̃˜…¿»€đ#p–ä¡%1qỂŒ£ßÓçIäư aEOt U@ñ“$W%zdÿ€m©!ÀWªnÁ°â2`(œ¥÷b©Ÿ”?äËYÈ+̣ù§àú‡5éh†)Ç̉©ûïPPŸ²›8|.ƒÏJ'Óc&úŒ¥@M(:¥lÍ„đÍÊÄ÷ăÙhú-₫î;Lê(ƠrCVF±ÿ´Â™5 ‘)G$±xi[,a•₫/́kË>اqn ÔÈ*hÎE Ά¼¡V ¾«L»Ö]üëÜ-̀ÈtdưgỊ̂OXÛ2‘Đ4^{x%apă!–•HC+²Y·.@?È]œ$ñ@øÄeJqjïº#Â7ÚéO PÍ«®ôê§O”ƯäOjc¹¿ö}×§zß?f"N2’á”hZʲ(¢Á±Epû9ç²đl‰ëÔ₫Œh₫ÊsôLúơí<¬ï.ùM½«̣'€î]QZ€×cÊÈ ö™X1Ɖ·2|ª#ºVVpnÎ8­7QHˆg<ÿ;XœÎ,̉lb•÷>“­hßĐ„ IK³¬>¯nÅÔT”¡ ̣ $Tm«PÏ,8₫.÷í¦CñoáÁ…t[ËÛk…¾Ç´S̀KVç(y°ÉOrr̃¸è¤Ç¯n01¨àÜ"x)ĐH5§/ƒÜ·Ê₫;ÎM^b…”a!çè‡æ Ø„›̉³[Âá¡wBÇ&À̉ù§¾×½—)*vwíđù>¾ßÛ¿J*ê´ár¾œ¼Ơ³}¾C~߀n'j4Ø…ê…zĂ=T©Ÿ¯;sltóË Açˆ&_-€ Û߸œ¬ăÂyu¼ÿN̉Đ8ßR̀WIØû¹QÿêM´˜aGöƯØ3"(ô¯̉g{xñ˜@¾–Åùű¹₫½•`í¯¯¦̉¨iw)Ó5.RkI3G.¡Cç%|J0¬{:m†‹3.ª¸†ôº×ưOƠ½çă´…]w¬ªÖ+įđ"Yq§áH£â¡¹á½Ùʰx„3|“t²SR 2§(Ôs–›·™­OgƲ üÖ´Ạ́£Ï6‚‹[:˜{PzàcQ&₫¬?¥̃’ÂLcømÛÊ6 êˆ$„üÁơgd媽$ù®ü₫δ8¶ßĐÇϳÖ]3ĂcxÚ½“̀Í $ƒïï ¨I&[·3.ÁG₫̀Å·̉±:ª2{chuÿ–íº†Ơ„Ëzăbj³Â3s‘Á=i1”ơØXË́©ßk6ÿªyÏø}̉Ơ¯üM ç̣̀́W"Å@/á)Öä5µx6ư#³ ’®óT`á«ă§¨1+t* Éo":O…„Ó­O£̉Uû̉á9˜z4uĂ''Åzưe¢ó Ü+-ZúæNú;Ä‹î˜̉1î7PÔG[”‹ (" ëƠ²•6hsk vki†Àƒ²ø¯îë;ZñéĐÇ'`₫9Ç«®%˜¸Y70!C̣Z/lđ2OÉ)Ô.ÖV¡¯ “Á… ËU¤ó¾ç!‹ä¹Iî¼÷¾cĂ3Ó,µiÑQŸ»<3đ½)¯…“²L‹À+1$b~<¨Vb×ç––"—ơ=|ÙDxo>u<·äăơ…o¾&.çӣɮ̉¬FMùû)̀¤ª?`<”ăîů$ܳª×’k(̃Źº0¨jö@ ¶Eó…à6!“sÈ‘L¬ñj†•(ÉYöpµAæp;4+f—_>w>70‘Í̀…f²ỀO¬M©ËÍ̉¥›…‹:Á±́hIùl.1ÚÈGiï5|{@ܼûÄŸ~_ 5”ÓÎƯ}>ÁN)“ ×Bˆ£±Ư ÿ á́Æ›?NE₫bE{ÿ-làVESxLñÂñ­_£Iz‹÷l…GưÊ#¢Nä>hñˆÆ—å.R®—Jpa ¡6ï@̀ÓW¿}ø,¾rßÄeÄÚư÷4ˆ·¬d1­¶]e¦%’ë”I}C¿‹é¾9¾…Đàåä$›ª¥û­&₫8Äù­Ë$ùYé•ZEP÷5ªß#ÉÖ²óÜb+‚EuËŒă ?‰15 ÊfY—…´¬²c¶|vt\¿`Ä+âaج‡À‘p“—=V–oÜẠºƯ8cSé{)ÖFKa¦jb£Ọ̈=¾öܱØQTe¶ÊMÇ€'̀™)̣¾₫Ò«JíïÀ‘ËáBϦyö ¬Öj¬Ư£¾v’¢ ĂŪ ç´Æ‚¬bJäS ï ËÄ%ר‰¡vá4¾èÏs úå[à<¶5bp¹ẲÇ\´— æ%éG,jZ«‰ñöqf¯ >[F£.¼A‚¤’‡sϮƸ•Đ=;r?l²Ôwöđ¶¨u)ÁMÎSuT¥¬’85NLËî̀̃Aă4Kv‘ÊÑe.:̉SV—Ư’‘–‘,º/Ơ §Â6€a_ZÁÜErá(ù”WÏM¤7îcÂuϤ¿x¨•ƒÖk`k³k?,îûDI·́¡\¨!ăyN¾âóU ÄÊĐhíIPßfYbFÀppâ(”™Ô¬²)̀o¤¨đV—øH>x0Z ̉Óđ̣aDZPˆwR›ƠS{â¯K²Àv›7(6]/êm“qPØOÀ’#ÊÙfÜɇkªJ¡‚{mvÄéËÓîîå„ULåë85L)^Î~GăH{iÜH¦_`±¶P!ĂkÀ&SM=đ¿P×$Ëü¡µ{}¦"Ê {€‡¾h@ËÇE›n@hôa„›7{)>e"3̣ºÇ»ÑØY ²¯̃ï¶¿ÆÁ«j¿Ơ³7ë% ̃Ư}3û4Bä0£UëJ₫llÅqR天ô8?dDo2ă=B‹´±ÉđVt̉ÖO³Y°ûĂsY€Óă·Dl.8À—¾|­çz‚#₫¨º̉X—RÑĐQö°¾#Øü »7ßå'×cdH|¢z¤ø{( Ñä$ëê‡Ư¯an˨v…<× 8W<ÓäT`X­5p±ä%Lo[sÙËHÀU;́ï ê$_‡åé“¶e¼Æö±Yö{|HÙ|úÉJ`CïÆ º»|¨hø†íؤ]»Oüí̃Ed¶“èN×—)†ceÁä¤#à’V,gcî–o£ ”i—b^kÊưÇƯ ¡Wü̃D6™â/¯¹)ˆß7û:sîf.€ÎW¦™È½X9|ođÇ£¾l °̉“bPNĂ ¬Jv»£¯+kAu½vG¢„¬]9H¿ê«Û#A$rt?¿ËÜ—¢ N¢hñ‹ªè—oE´kđdß¼Eáö­V¸»ăOœ›<›6¢'ä%¿(¸‰’)L ñç‚çËßÏul]!*꺈5ö8n_A¢$o`çú`’ö@|4ä'<YđPƒGcx–VTç-¼ÈN;ktˆ§gp«Fïoă®EĐ¹iîW‰?àMƬ#]Ơ[º’úĂR<lt˜<\>¥«©·uo—äỘ{—+—Öl!ôu¿ EƒM$Ë‘Ç4lrĂUÄƠº¦:vét Û?+™¢ÿ´HlÜ“ ©̉7t:rëëvËø¦±aé̀ÀHwÏF\Vr›º®1/úÅ$0×*a—$ÔÀ›tó“ya•‰)rÁu¶èAØo¥{ơLÿ^_ƒá³á|ÿ¥¡ô—5̉–Ă~a©®O=ŸÆÅ–U@j}k‹÷ÏËä!ÜS‚~Æ`:Ù7+¼kw† Ÿ§¹ Îl.›¦ÇsŸïơ£é’ø^Ûma₫ÄÈB<2·ĂĂ2̉»—¾ÏE‹ —:PÔ<€>[ŸE}ëEy¨8Só]^÷m²©Å¯uñ¦̀ZÊ¢ ¨7¶ß%oŸ-#<¹ÉÅ2  ×¸6ÜÛk(…æ–Î÷å 4©\lZ%ÙkÖZ|ÿñ¶ii,± [“©“8¼B÷4ăve7øJç¯ê»wô+‹¦rü@)Ê_ÿ`(ßyÜ:”³6B̃ïÏR2·Åo–x‚hÄB_[!äÏ×6s+Ï®Á`̣C©–o1ËX¥›Ñ•2<ÖÛ hÁhƠä°oµW‹Ç~ /‹ ÍÜG̣”SV₫VØÙU& ª# ’d`LƯé">Ôbă?=æ₫X́Ëï $J|Ox/v¹ú…Dó"VWÁæûœỵtóÙ₫ÛÛ†®%ÑtŒc¿ÅqѪí)ûn¬]Ưxơ¸Đi+ñ6ÇùO2W.5k>7ØøˆGÊĐ_@JJ-ëƒËơÊp6»"«ư*¦xbfFiŘVÚ8ú{ÄO—bæ>Ù@{³lƯâ@¯$±ƯÚ*c;h’‡oáw¨”~BĐ÷o%áÑ'}nb–Ó»ùVTçÉ£+âÙu]YK´ú,^ÊË Ù¨’÷j«¾á§^®5zÇ(.¯k+tAûéNöîgq…cåă*Œ ÁLÄéî‘ˬ“•œcă8a}…@zœK+t º4́“£9Íj“ÛØM†{R“ÍϯÄ–›Ø‰ö©g¦+”Æ&ª"oáæ+冇‡‘!ùhj7í,r}Â.n]·Ä“^~tbV9{̀H»ü‘o+FîË‹È&ö"}ùï¤7Äæ­4`ih_i ä¦W±9\Cö!T²̃Ư}X”•Xè \®Œ˜~˜]_Bê¨÷¼æĐĂñD0Đ@Ñwøl¯đoư ©Û!ç4Ç`º’^Â?Ợ2ĂĐâ!7bpÖ¼Ëeû&¥X̀ä]ñ¢Ó_ΔÚ8ƠFƒ¿üˆ¡‘ĂOÛ¦¡á¤²EĐ]»Ñ–óy ¹ Ư„Åäú>4úuî¼ù¶óDD\Mqmï6ùi‚\ÛȤè¹å8pươẠ̀²n–L\³Ô…*ÍcÄÀ©̀₫›£Äù4{°+$e^*÷ªđµ’Ñ*åơÚƠ×ÑS7Ä›÷Đ=J„â¬ñơªË7-¾h‹®Ó̀ZÍ¿f»ú3#¯tyƯĐZ Ú™D‡Á~hcÍØ˜ú©•¹„»¡“D`é’7¿–Ó·\6P*%żb; 5ưïMă^kªñƯ$®Ø-¼[à)^ÀÈp«5“¯2+\‹Ó1– /RDfưe‹Z2èöä"®ÔsUZg¾x{5ÓŒUG4ÇM‡qsă ÂÔU4ơædZª+ç+üNµ–Đíœ\>ëpeỷ]µ́Ă¼«æ¹₫¥OB"´w¸ºCºM që'㸄ư<{j4œRÓ̃yøÈåưaÍE¦]Wc9˜ sÁèi§¾íà*lzØ`Æư¯%üđ92)ƒæª´ê°·å×Eúö÷7ÛEZ̀4÷œ¯…QÔÙ0·̀¸F zOuïTñ¶öÈÄûQ°“²¯>¡¸tv˜6.R_WƠ{}Ö̀C×ó]³¤l(̀,$ª>ŸÜfÄÎßH9ÆÅ¶–@°B®4¼i¦XM´8}9uh‰¥MW½(gጹº»øFª!vÍ×;ƒÜ‹hjbæ¶á ŸG}(O%«›På±Xöœf]y¢ØS»œ2ï̃!Ô…‹ÓöUÓÁ) a~ôÈ|UÓ*8Ÿ’»©äÖF¾ÔaóĂi7 Âˆ9&8·ú Î|Ï$Y”(́ë(ºÜ {rèÎlé°ưĂ;EC°†úa~₫¹® d´xèœv­ Ö7n₫¹ôwÚ—•=z8$pT̃¯k“«¾!AG4VQT 1ë\à9(´JŒ´Y7‡Ïçn–ßhQ»@ ®¶lă>‡`·đ~!Vûl›+̃q…¶üËL¶ö㨠̀₫w³¢àÇ1ÅKÂ~¡®?$Íj|²Ă‹)ï@‘³@çùL){¯ÀE~&Å4ÛÀ±̀©At—wˆD«Ù”°XB‘\Nxw¶#N:wQWi{«©':Ø_„¾”%¶®üE_ơè¢|Sü}¶)¼æä=r•*³P@¤¸_Râ`²b—~ÓU³GéÖYÎ]÷9Úüê¦À±üé·8–}G‹Aê²üVÙ±>Üøƒ₫ù~éÔt?ØÜCÄ›±‘h¾ŒÉƒ w˜rࢨîæ.•˜ŸH‡Ăs›Ï+ÆE‡MØ!±#:€ÎâGxö÷̃̉…̃)<%"ê…\V>¦(IbúĐ#«XA>O·`¸6~óBw¦œ¯ă÷7C=ßÛ´7Æÿ «%ÜÇIf §Ă)B&*GïË׫cá› ‘­^ƒ/ú·4Äl’çÓÄ©LQñm€RNñ‰½é©‡ ̃" ÷¸Ne`đÓV®…"ú[³‚®Çt'>Úyµ±†±é˜6°*I×F§®t-L̉ñAÚÚî¡v6©1ùüÎ0OBˆ+3 Ơ·0/‚_S;Á·Ùª³…ÏN7Foréœú¬˜ă“ÿüg;ñƠƒ ¬1g!a_“(ÂuRkTĂ³Aqf¶˜-ßf—­V6Çd ÔPŸZlăñÛ'¶uÂDó h³î·üŒ%a,ªG₫´{Ójµ“P˜µÇå­×CU‘ Đ÷DÊÓÂö"(T`”‹ŒD„—vQæœ"¥§PFx¶çºÁ’uöÇäóÆ;xÂ&ªa£ª¹mºeáLîi%”€ÆúHÑR\Óă©…öÁ'Suw<«On­÷F£©‰Œ*÷ñŒ+T¦ßCBÏ’ÜZ›‡ –ÈƠyP΢o¬#sЉû ^±@©¨ªX›O5VË]¶tóªàf—LÖ€oY—•$wơN„uàIÆäY›x¼5zi DHÆ3fG̀nƯº|áYŒ}ú+}&>zµØ 2’ëË\W’~ƈ¨´ư™‹‘´ơo•äH®ÜîçÎÂ?tµ·ú6ÛÈ-Ǜ-6̃âl4¥È4¦ ê}ÂU¶$¤ ẹ̈uæªH´⓺Ä̉†s®i3Œ%U¯7($yEƒùöh_‰ÿî,©ă!¶´Îû¼¿!‘Ø€ £ặ¦i×MƠœ‘—œ/ôµ={¸ú®á 5û ÜÄ&ùÍ/¾WöØNÍö&®M%í±B?¦$óÚ½8{çú₫„p*´D¤/ưÉäéœ2:ØíøÎ—"ûuÛAÖ‘ødiÁæ:&¬½#êvuÎMôôâ#ïY ̃Í"|‡Ö<Ë U£ÀÀ]WÊwîOÁ?¶áUê÷̀=ªVå—Ăé¢í‹¶æèÂnqû~‚?N’¹2âDSTMô vbO røe>Z =»&áùÖ¾¯3rÙÚ¦̃¢‹”&²™TU_¢₫@o÷)‡ Œg?O8á¬̣‚¡×ცơÿèG6  endstream endobj 649 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xÚwT”[Û6R"ÀC7 ‚¤tw0À3À ]̉ ¡̉©H(%]̉ " %!̉Ư)~cœs̃ó₫ÿZß·f­g}ß×]{_×^ëaaĐÖ㑵ƒÛ@”à0$?/H×ĐÓă /$€Ç¢Eº@₫²ă±B<P8Lâ?̣0eS#Q@ 8 Pơtø~ ~Q ÄÿÂ=$°ÔĐàTá0EîæëupD¢êüơ °Ûrüââ¢Ü¿ÂYWˆÔ 4ÀHGˆ+ª¢-ØĐƒÛB!Hߥ`—rD"Ư$øø¼½½yÁ®^¸‡ƒ47à E:ºÄĂ büĐ»B₫ŒÆ‹Çè;B¿zp{¤7Ø  .P[ ñ„ÙA<Tu@OEĐrƒÀ~ƒƠ¸?›đọ́ÿîOôÏDPد`°­-ÜƠ ó…Â{¨ ĐRRçEú ¹0̀î'́‚€£âÁ^`¨ ØøƠ:P’ƠÀ¨ ÿ̀‡°ơ€º!¼¨ËÏù~¦Am³"̀Nîê !x?ûS€z@lQûîË÷çpapo˜ÿ_+{(̀Î₫çvn|0¨»'DEáeÂûÇæA H $@܈­#ßÏú¾n_N₫ŸfÔ ₫np7À5$jAưáù#À^éá ôÿOÇ¿Wxüü€Ô Ø@ 0¼²£̀ûßkÔù{@}3~üèçïï7 Ắà0ß࿘OIÉDÍXëÏÈ;åäà>€??À# ÄÅÅQaq đßi´ÁĐ?müG¨ ̀ˆÿîµMúơ‡́ôÁü;—&E\À₫ÏÍA [Ôƒÿÿ̀ö_!ÿ?’ỵ̈̀¿̣ü¿;Ṛtqùågÿ øü`W¨‹ï¸H”4à()À₫jù­\ ˆÔÓơ¿½*H0J ²0—¿7P‚ú@́´¡H[Çß|ùm7ø©4( ¢ G@̃-?ô_>”¼lQ÷EÊ_.J=ÿ.©³…Ûư”™€°öđûâP\üùQz´ƒøü¢1ÀÇ ƒ#Q!j¼@Àî÷óL…@Ÿê€¹@́‘?]¿­ü¬¿Ïï§ù_Um==PNä/f ZúkưKéˆÄojn+îT̃rV)Kăͳü{~±5æ‰IO´0’ơs¿£úÍŒ£îrÖve”©Ú“%‘#4œ;gC>æY!s)ʹH4Å%¹=ü₫óĂœÚá£hj̀̉íƯDZ"k3L3¶$£‰«ÑNÁỢ•‚ï­ˆUSñMÀ(:e1wˆbå¾5bsc¶E·|–1Xx n î9½0cäjkçX/®¬b9YX£ÅïàFÍi±}xñªˆp2ú ZíHTE-Ç͵8ó×̀où1ơ!Ï G¹0g¯§ûº¶<-NxåÏç}:„lIÖ EcºíÈ&s°Xs…ôA$ù½‰ŒqV]6í“ß6ÛΪ3ô‹«okb.„YÑăØnCZƯS÷hÍåƠßơ9iMưèæXùàè{Ó#”+»Å=ÿ O£"”p¥RªñMêÀú„ÓG¥Ù4®s·AĂIÎƯêë·z̉ ¶[&ä›^Đ-ñpµz^ó¬&ë±3c\ÑíŸ'%m=ño‘D+¬Ek{Uí¤Z\³æ¼ưó¥]ˆ„³K-b4'0X·°ư—zÿ#”ÆëưŒëºá¬‰­S:Q¯Ÿ·̀qË‹ Pàngđ́ ’"eS?)<ä%C2ƠM@GÖH-Ü]ôD„´Æ)×jZF!ë&g¥ˆßăNHƯ‘kÆN¸4dRydÚ2Mº“Êæ‰…}YçíkËâ ¢1tÖmbé#M½p ôGƠ£æ9L Ó¸^ä‰Ă˜iº€fñÔ‡G¾¿đÇÈz%æ`læ¼G³L{?Ñïu·ÊŒ~ëdúÙ·–Ü›Z*£ C½ù}¯C˜åe0±#¡Áü–Ò\é¶²–LGùnKRÛMáz~9ei#åæ¶¡hÏŸ|sa£ë>Æ9Ư¡ƒưƠ¦°ºFÇ–«Ö´ûêËơ` ×r6el:&có³Đ’ùeÇS …Ơ×öóˆù‡@Ù%µư…†Ó±ÉĐiGÉæH­C b̉Àø†Ø/×V½¹ÇD»~"‘ÆJ]“ƒVMªÁ¡ë¥$Q& ¤Xs»Wc ?J#íO¹ơYj1Û¯ÅûÁM©:¾¨éƠ'½Œ©u+¼EÆw"&¦¥ơLB¦°–sÓÜ 0Ư°>$–Ï+jÀôDkÖ¡·)Ù)O*É®đ©øZ¯‡b19Èä+C‘ôôº¬¢îƠëoDXïÜîF̀½GsVíß°¥  Ú}¦G¶ôüùĐù«jÙd«"̉L^÷äWÎÚW¸í/.ZiØđ¬!M£9̃ÛÎ…îŸäMd[Ö®@©»Ë&sb}AäpP9ÛßM,IῈSs§KJ;wØù!\#-Óư)%tiépüFTÀ'Ưƒ@f & %̀^¿nơ×›Wµ.ï›rŸ̉Îv>K]7µ›$e%: :”…fàÓSnÚô“̀T§¥¿¬ƒQ}´˜i—Ö L˱k«¥z]#7 êœñ™û{AÓ"º¬ éÙlû‚ố8û1`î÷Ú—Ûä†̃Ó >&đØ~ôæÊ„Û¡ÔÛei*Pƒ’ƒZ̀qƠ *E€y” úF(ÖÖÔA>ï+¡„ufÈjƯ\µôi¡{[—¼ï ,—ÑŒk¿œêÍ;GS'»AGçÁ‘)] ¾ê'̉¶W2Ôª́'(lºă- {w“f4Ë Ç$1_N ÷aèŒå*å®`ÂÆßXwíMaÔ4!†d8d“GZỊ̂ 'Åmu&ÈâG‘% 9N‹pµ6~jơR§Ñ•\Îå‰Â˜J›h^å£S›ˆpäÓ̃é&Sˆ•*ă>_#ñ¼̉%Ó¼ă‚¿¼ĐJM¼­é[ñ₫@(“̉ÈL¤3îÎMhæÖ̃ÆcăÓ;?’#&¾$óèO3üyäjí!ựXŒÆPođᡘ¿èƯ×C†[<ƒy¸–§g^!ùiŸlå3‹%́Pù>Fèiß7Ǘ ~®bæÊ©»³°–>ogNwăëv§Œq<Öîj|ô©‚É+‚O²•ë̀=Uï v&c'ÚçêÅ€{œ]Kg<‘¯9’¬4×̃ơ-h±9)>i³'̉̀ÚÀN/4₫5)Pp°üeßXQ—~Gb¹wØ”µỨ1•g•?Z©G…Qê'K~.YNöab>#|XñˆÍ¤ºôá²o7ñ9W……ª©bq× ØGĂV¸Év$uW?¶s‡qY₫ö›|uR™È‘ŸOơqø!‰›ïˆ̉»kÑ܈x‡~Ç?<ÖÙO+ê¯^„3íß¾́¾ÁÉ-¢FÜăæđDæ“æ DB6I}±dNé«ỏ‰§ñáfm[62Êơ—D°˜¡¹fÿ2K—T‡zBLe/<Ɔc{̣å Ù)!EaèÖaÿ:ƠÛ7Í[xVÏaXƒ{™ Ơ[U,¯'Đ ư"´Ÿ’M̉*¼hI^v7e2uPgÛd!́¾Uî•#«y×)ó¼ƒQz¹U6Ú7÷¤’â9¥‹/ñ¼^̃Ç(K88ưÔç-¨sûƠAÉYav‚¾̃^5ơ`QnW†ƒ-eA·Úh»?ñG%.È]¡—SÈƠ _â‹À9s½nß' À?=s(˜o¼@Ó⡲ôG¯e›¬iˆcK4“ª8H«!eg3‰ Æ»n.‹¨¾ÄÓiês»°ñÉ5Á2¹¸×{Ö±ơó¾]æ­Á—µS_•6«³ûSờâƠ¹ צ—\ÊøEùÏåÍ̀«X„g#|_s¬-ïÜ2¥1g Qºf^äë&O•¡»—>Oí¬6ÍBß2ß×µüîê÷úȺ̀í¢¦ŸXpÖÆ<Æ»Q»jØ$]’ÚøY$k'?âßÉtWtymшÀPî4=±=v|8́Zgq1~¿Îy¢.5ñËƯm/ p´”îUơÛxl³á: Y•¸E²êè»d ›´äª†¶1ă÷ÉΑkr0Føđ ÀmưUÏ¢J̃đÙ»ä>Å•8œ0AC¨Ía,ˆ*›à}lÿU0ư¾€SX&\•”ĂTss#œ̣-=µ{ûª,^cR2̉ËÁ‚â©àÇè2í…yø;} 7t¿¬o¤Q¥„%æÙ€]Ú¶0†TÅœ‹ U†™­ûx1)êvCF ÆMǘNñ2H'È»d«¥È™·K2‹N™NºS‚ŒªóM¥ÊI-gˆqˆ ®·óù"8hwàÁTgeù ¥”äO–¯Zí 7 ̉!•ªy¨·ÑB¨C´&‡¬æ™̀¸,l°Ç—†¥ÛwW"ă•mJ7éáuY*_„2 ×V#ïḤ›%–#Ô- ’®¿µu~¥Ù1Ó_érb*s roûFæ@cËU\Ê?‘ ÷„§*ÇËÅ0<¥N#à­»#¾zŸ+úË„ƒ&Å1ê‚?PI‰ñó‰×̀”Do³;ïMƒ7z°ña₫OƯ(Ă= Ÿ¼×iërwÙ°Ÿ²wz ̉À1Ax÷‹Ï·øÛ ÷̃¾˜Q™äN½¼=h{ÆkSx‘ă·ííFÚŒ̃¸ÜÀŸC;ßơØ“J±H_¹µ§¸†§µ“‡a 4 äôŒå&ï»qºöÄùđ*̃éÊ;µĐº̀öÖ‘åü†£j³Ơt“#ùcέĐYYsg©Íâ£2I/¨ˆZưeDñY„ˆ3/—̃¼¼­¿QôíAók‰§d4ØäuK’|{•údp¤:4­º&–ç¸h.[²§”×áM̃²@FâîQ´4Ùø=®3PK¿–ß0z/̉$‡ús’̣8&¯E 5ưbAC—J³gZÈÉ9Óáœt«h³Á¤~‹ó³Ïµ¡¡…¤G¦.V₫́”F•ûaĐ|£Á[2‹ wMM–Óú¥åÆ-dú7Å3CæÔªS­Hî,ºD²÷‹QÆoKÓǪçÇ»Ế˜Ji¯u®¾K÷'Ff…nỉ̃Sđï‚ƠJÊß1%OI×<‘-/âkzbåk{ư¾û®2œë g›ï=¬«·ÅéPLAÊ–ÁNA ¢ÀÑc!ß7Üà;Hsê3t^9-'!±ªÀë Ø9)¨èX÷:³;×;,ƯúI}\̣Ơ¦ù¤ÓÔ¶Et‰öáÔiß v*µÍ•ô>7¦N̉¶C,fß[Å•„Ç ½!Ü+E]”Ä׿èŦ³@mX¡Fu¤­±vOG˜>ć§bÄÛ«á\æ[Ä-aê#ÉƯ¶G.¹g̀æx;Ç›¥7SK³²U¸ŸÅ)Ơóq†|†\ÓK:™¢Í/Ëcñ‘:Q‘˜$ơºÆÑHI®Ú{œËîwêÙ?„d«zjµÚl™toîc~=pt>p)UDç,ç~óăÅQg4&H'÷xPnkù1ï~₫ơƒäµDÂ!t:j8ç²tśΪ¹‰J;Ăt徯Aœ¦cP Æ´=}<‡6ÏO ³¿ßÜŒ~wÊÇÍ%Ëd1¦wª{„òÆ®ÿÆM÷f̀¤´¥F¸îyÊÄ̉ûUXÈ+ƒZyánüÜ|³È2ù¨Î·Ä±̃4ç<«¹V9"®ĂV^ÙéYÏ Ơ^©ë½­'‰räz>©ÔδÔö¢Aº%¬–̃‘óÓ1óÓÍ‚!Q_ÊDH½^äKë$]—ÀÙ’œ]̃÷> ZWöÀWÍ Å¼è^ Óú,!°”c–å(<ê₫`‰¼÷“ 5 ©¼“¦¢ûÀGñnEÎŒ:×ö˜S7CíS™éR%<¥äܵÓü«••ÉK.{˲0÷ z¾Í̀x̃» "ià"h{˜ë¾ưf̃£-h©TŒ Áí£ ¥I>–o²ƒÈ̃9jͤ€úÓSÇŧ—dcX~­Uk²?of¬-½Ávˆ»Â£Ă1~9³0?YÂ.yÖ$­àQ̀Ÿ¸B⪥ÁtˆzÇ~1¢ĐĂ³Æ?Lj£ÛÚ¬Ö;Y¿ụ̀Ư¸2›ºª¤ y†@6ăg‘Ûă`»¡6¹BóoĂß `geØbÓl¾ÊơÑơ₫K Ơ·jvL [̀¤8Årܼ˜eáÙ œO V¥‰3‘꺣‹˜bóÁs5Jwú²ñdóùvc2B7*đ6ψ HjÍ{ă—Ă€)¬ÜÆÜ;zÈƯByt…̃^_ôƒ^N°A9H¤ˆ~ÙơøCỵ̄QXe.¡øKΕº!÷¾oÓñgíaAf+¬ï^œû²³‡»¯*hÑ(>Ñ;í º˜ú›XÊ2 i?»ă9ÂRϺc;`¬v™0Aç¹|{§{¨PŒà ±̣Ỡ£×‘‰–}ß@,Té_‡Œ« R¥ơZÅ ÍZ•±[ó—fŒrr®*RG {¦˜‹5ª; ”‚&_Đô&È;Û?.`³âÆà‚OĐ^„jêă »Yàâ3|0ÂVø‚]Md[¥SŒ>‘]ÛƯk$ÖàiíQ4/.́[Ôµ[Ÿrkù¢¶bßW¾¢eÔ=©·¨¶%̉Ùî-‘YƠf×PŒ…0ơ”Ôó`?ê¼ÇÚỀœ̃©c—å~YƠÊDH]5™·ó ̃TYœÈ‘¤Êª3ÉB©o#ô¡ŸN—QyÂä–ÙH]ô„^‰È÷iËøçûỌ̈[[\ñdÙ”>q…]̣PÈ>¤¼ûăÍ÷>U—tDñ‹0%₫FM™4€¢KÍ' Ça幃̃`ø¡t«´û|ÁóưIÍ3_wåó^ăx:|»,°=¨s°ô²Çêîæ^³̃µE…è]ӱɵ ËVÂ3¢Ù'âơhgç¡ĂG‹̀6LtÈvbơigo¢Uăn¤ œ*ỗ¤;†ĂȾF¯zâGùç=h­"I×c2±©’…QØ–ÍÂôÈœÇ ŒÙđ÷úă5îÇàÍçă6£NÛ[L–Å—:‰—̃ÛÇGoö çkarj.Ÿt"·Ô´M̃œc·qéTZ7†u»|ç³bï2KëêĐ—;mËC^’ñúI|Ç>HăU•xÆ̉Œ}ĂQÏ%̣󈔗ӾÇʨ-zc%•ß₫æËÛ\+”KÍÛKa5í†Å2ư&É·¸Nå#̀Ÿ­E<U®B}·­1T÷*/û©—5 >6#†pv›wªĂ5ĂLŸËsúo˜}‹PŸ˜Æêp¶±;Wà5T?ox|ÿưÇâ8…‡» _ºâ#`£³#‡ăï§,ơŒÄÂC¶'«GlGüa®Ô]%ô£Đ·²aûñä^ƯøÍ…̣ä—:Là#& f₫é—ûúRcR[– c¾ƯƯÜGLÏ\üu+¬'êÅaø§¦₫N„z¦oEk#̀øz-ên„Ö;ØX ¢€H‰¸µDmú@¾ƒKºÍ¿cŒđÙó3‘¹ú‰(‘Rưç˜"̉γqööÅKéƠXW$E˯öˈqœ̀‚¡>vÉqr¿ŸöçTX5zṢ†FZ}²®ưÚƠ™ø endstream endobj 651 0 obj << /Length1 1406 /Length2 6162 /Length3 0 /Length 7128 /Filter /FlateDecode >> stream xÚx4\íÚ¶è½F¢×Aôè½÷AÆ c3:ÑkDÑ{DoQDI$z'B|“ä}Ï9ïùÿµ¾oÍZ{ösß×Ưçºö̀Ú́,úFü v[ˆ*âJ”tŒ,„€ PD&`g7†¢`¿í́¦w$—ú„’;„BÛ”A(4PhzÀB"!1)!q)  J₫ D¸K”AP;€@‡ Ø•®>îPGºÎß·.07@HRRœïw8@ÁâƒàÊâ‚®ÁF0‚̣ùG ®(”«”  ———È)€pwåæxAQCâî ±ü  rü5;ÀØüă0BØ£¼@îÚƒ‚!p$:Änq «Œ4´z®ø°öà¯Í ư+Ư_Ñ¿AῃA`0ÂÅ÷ÂöP §ª-€̣Fñ@p»_@ ‰@ǃ$ØêB ¡°_3 ₫Jƒ̃f¸ÂÅG! ~ơ§ u‡€Ñûî#ø×á:Ă^p¿¿WöP¸ư¯1́<\MàP7ˆ†̣_´‰àß6 ”@Üo°£à¯Æ>®ßÎßfô ~®W€=z HÔ‚₫"đC‚₫#VnH₫i½O·́ù¸₫7àŸ¹thæB\ÿ&ú# (Œ¾ưŸé₫;äÿÇ̣_Y₫W¢ÿwGª0Øo?×Àÿă¹@a>!Đ̀ơ@¡U ƒ@k₫ßP3Èéê@́ .ÿíƠ@ĐjP€; Í/t_xÿT…zĆô¡(°ăÖü±›ü̉ ‡è#Đ_Otø_>´ÈÀÎè§MÍß.ZCÿ¬«#́~‰MXT rwù Ï½ø ¡Uiñ₫Mf€ B‡Đ3́î¿VH h‹̃#4ÁÑö?&€ ê†AÀ¿ñăEÁîîh₫fº£¿×¿åxCÀ ³°t˜Óë°ö‹z/₫Ï£¸+«Ñ }Q¢(¹~ÚxYjSníªî§ëÏ—ELÎúÓó́]Œy?êÎ ^NSÏCa¨ô­+đç~?îv€0Ù!èÆÅÓ£×Éö I[b[r&›Í^…‹÷ˆl¾úRxƯ‰Ü|(¹ pŸ‘²¤Ñ£)ävnc>µ`a[E Y<"#w·̀đ0Ö0¿Æ| ;Wl¥ưî³n—9´´ô.§¿/]ä¨@«·Z¬*‚‚–̉W“%w8i€–*1G³ ‰Á¡(z¦T–ÀJ[äÁ±ŒơX|ùÇtA[ Gƒƒ®Rđ½'#uÑY™Üå#›lăï‚Dw›“¢ùj̉ÙÙ«í0Ά2ö«E`y½ØÔLܺÎ7:Óˆ’̉s m̀ÅÆX¼'¡"Ö_&î^<~–•($l•*“øôRQLÆä:lo¶xơ @AÇN¡¯¥Ëâ´ê1|Oàôe´Âœ9~̣µù]ûPOä‚m‘j*8Á¼#kûíVb“†èÙ{2S1T­Ö¢Ë†;>7~:Đ0/[¿­SMú¡¼äük¼©I¾1Ùœ±ö&F†îm ©p… iRb ç½2ÆW‹•b#/dBeR%‚€O>LÜR6؉'­]¿cĐóÇ:ÁÖư@PßZ+¯ó¡ăă]NMÔưhăvÂƠWE‹©àñÙå<ÅŸ&6¥OåÙ?ûwºỷ°Ÿg®Pở5¸nór„±ăaCÆ›‰̃ÎÔMoơ†Ë3́ Û!5©Ö°"XEc¼h«̉R?U´‰e?H»ư¤ß½gľñä;¡å¹ôư`Wë¯ ºû®?ÊƯ•ä$œóá’"ëU:A’~Ø„Q¦ÊD§äD ‰†áY¸†£}#ÁLNk‘º`Û’íis YƯ¥ëÁY/ĂEk-ƒ æ€/ø«(DU⇧¾ÈÇO‚æzbï|]µ{O¶7­̀Üè•CtZp£,G4“XÄÏŒ˜ë«h_ ¯Û·Ü©j)C¨§úÑxOÑRnqvµ{Đú·!ˆ.Î.Ít™ ³TRw3[â§1O~p¤¬gÀ˜Uo¨j“a: ½bR͵=,®à„)]X‹>ôpá‡1xÚÏ ByíÇïæèlï2לĂäÀ<ËQ¬{UÖ†•_¬Ê]"6HßCK´Êơ§âX4îľ~ưcóî©!ÙOÔ´™tf×ÈaÆ€‡<×½rÏH Åô“9~₫ë§§ ‘Ϫ¥0¬ÔÎc óJz¼Â)T’º™BiOƠtË¢ẹ́ÄO"¥Ö!ÊPSD]úÏÖÜ$¹ºf锜Z™á²|aưë%X+¾7¦fÑLîâx*¥Îaç(;ĐOËÛđåPçt8“S?³µ‡m*h\è[c–×ez-dQÛi ªû:sÏEB½$0Å ï ™èkÔÙûi•"é ÷F-ªÛóww<»ăÇ-ó[~̀35k³ëåËogª‡F$“?XÖçŒÓ|9ü!Đ3q†¯Ÿ­ƠѤDGî¤n[n5Ù•g6LÜ“xF惾2`]$Y¾P7IÔú@$5Úøs„}k€ÎÇ 82´E;¬¨(>ưe8üv˜aáe’¡ïKăcûo~‘ÖdÊOløef®)¦oÍ\¾é_ÈE Ûs*û,¯ƠØ ¼~%of’H®…Ó‰»q†̉~¹¥uußYO†f÷g…ü¬ ©ô#ŒoI¡̣t™æ‹3æûLbq|7,ËEÜó˦±ù¯Óm!ÖslM±Ÿ¬È$`©ñMȰ°nÁ„µ5kî,ăÏoƒ@Dǘ«•{ u«ÔÁF¬ù̉ñ_S¯<¬1Œ¢ D2ÅeÈ>xÂ?d¯ăWeÆ×·³†O—QX ậøEMöÊçM§ñ>eÈ‚ߺ.ƒÆ\áƒÖë§?Íø•é–…`́;²#¿—;È`´̀­êR‡l|®4]Üí•eY|•›á#ÄÜ=²EåĂ’3IÅoô¢<{lJp ¿ÔI&¬±ôwY \Ïow'ĐŸ·¸‹·wKƠ=LûÚƠ¿á9Ï$éLèCGƯ äă*M§<8·Hv¢ƯÊ™:0 ³ª\ʶơUS’ceñ‡,y±|­M{6\d¨ÿ•íKS‹ÔMÇ{îÁ8•{ó_‹́8+{?wÑó·4¾Æ¤ï°ÆD.tÑÇΤ!t¯~xE÷¶@›XbüÍÉÂ3đđqĂ8‚r³2&[[½è}«ÖÇ“ăÆ\îŒS<·\̃¹` ŸÔ¾Ñ¶¢¼́[6:#±×ùåëđ€ä¦¸×ôœ'9ăµge(£̉ÁB;¹¥Zs*l ®P‹Đđ·çκf ovUç|U ¨Kûæ\÷¡oÅp—kqfÜZxˆ©pu½ăÖ†;F̣ æï˜~·SvŸÖàs+UUX¾Ïs ÿäøEOf̣}̃' …yLoSTÀqï_/`%éôoÏ V1Ro£æĂ±®Ô!Y úJơßG)- ¾E=iḾˈÀ)A0̣́¦KÆö»Ïh<ÍG8U›́jQx;å· ÜæĂ½àµª™}}HØ«‘ SÖ̃7xˆ%|̃¨ÏGœ´up>˜°èXÁ…đï ^Çæ‰Ç̣¨ˆ̃K·‹<,DÄ¥ùY)•˲ưÄR½íëÀ2ÅóÑ1ăó_÷GđîhÑhâH"¾OËËÀaé™k5qˆÀlLÔó±íZBmÓè''ïn®.\ˆ(a 1"+vÊÖâÇ me6¯   t®oÎú☆đđI˜¢>æ¡ñX S£¯¸¿0çïbŸÙ iå8WTŒÄ8-VàÓĂ¾4åj¯W™Ư¢›â·Aefߨ}æïj¾n™7/¤+èAiøßv¾À¾Ưg™|¯1TùÊû$W×jỦÓÚå Ï}w½i»1¸8üN!Ù–½d(O5ư¹Ôiç¦́@{–Ïè²6£=æè3ª^É$P’“4/£U0̣6÷Ä¢B’CoÏV°¹VæÓFNß…‡Ç# Œ‹Ü·á{găwêfŒÛSÈz3>h­knï}³V†–^[H!<ÿØ,ÜĂrH¹ly韑v÷»¨iضư¤Ì–›~pÀùƠ”¿̀MlúÿL¨¿~/îWd–äa S\ÀÆçdF^W… ¾¾n§ aQ2¥Áñ́Ó¤ư´ê†ôỷ@o‚ª¥ôôƒ-ĂÀ‚4”aÎjk ¦+ƒ„Đ‘¶‹X?èdcÖÅơhO3Q/_S»–|cs°¥0(R²f@ơ­K‘Éôä Û¤JA+u‚“ ÁS+9@Å×ç~^8Ơ6$¢"çEª{Ó]u÷Ÿ+f~ƯÈ̃Q(­ _íp{=~0L¼̣fỵ~^ SdaÂÄĐ+}û»ïoWóÍơ剬·ă0¼p/,±L\êö|ü‰°½¡öÇ3“®@ïs5¶›<ú°¢­q€ü–±;#)M¥4Ç;UG3SÀ5µY‰!2w«ºíYhn1ó w” à nzá¾6”hå’_XxåKnîïƠåĐpIÏ]z)kỊ̂Î%r8$?£&6»a2URÿzñ\â½3ÍL"Ο‹]"P ̃VQiGŸ@qÿ>&J·¾èmLø5i³³‚†U$7ÎI`£QÁ—‹´x]È3\ǛøRë8ÆDÎ+°<ÉÚƯ+¦Aÿ+c}…éçL“t»5ä7[ å¼)`⪠ÆùO|8]v2M¾Kº²Øtb–´/npëf«Ơï¯âdÈcö•¾q²ª'‡‹˜ËjæûÊ-(ïÉè^„ßê°…1>ós£±µà’e]àùú´spÔ¹ÔGä±sñt­¾̃C¯́µÖraUDØAŸ@µm÷ÂO%‰j¨¨÷©Wđíj&™•éê¦#*ç̀×™ÍÙ™Íê₫v5öؾ9ÿ²´M Û,M₫høø‡Èó³tWf˜Aơ‹dƒ/™Ñض«¥T‚®Ç·_0'»uªNJ`ÛüœQ Kê‚oS¼Ç»)pÑóăđ•~0Ó•‹́r´n §®ßÎyyÈÉC}ífd| ~„z@?ë|$ˆ/W&́BË;‹èb4j?DÖyë{ø%R#Û[Çk.ôsỴ̣̈?¯*Ë7y^«zjr¡ÏÚ¦5Á[Ñ>eÑ §Vp¥áCíè鳴륜ñ$»É¹,4øba_îI?¡Úü¢0¯.UÿêŪ…:£­PrĂZ›ú€_³W耡µÅd-1Á 6Ở÷iêÊ G¦tr®Gx>“é-”úË́ª2m!=ư‘¸g gùjZóúuOtë-›±5†l¶¢‚”đŒ©}—§́oõ~0–{|ëñ}ô¯²Đ¬&gûơêÛăĂÛ¸$!x‹JƒÈÖt…í @ÇMq‘ç¤[ơG«[]'Z̀ürt¦—EäæâŸ•éY}—2£•¦$ódN'ÍÀ1_“Æ SdNº]bN/ ¿ª!-—Çb\¸Ó„¤̃Á:3±Úx$3ióóÎu’hư›˜ ÷ ”¬LuÏz°­Vçk¢T½‚{m>Œ³ñ¢¯8ơêøÖ£“óù¼Aí`̀íĐ|ưdqó̀CÍWZËá₫âñä3&é&nÖoủ—RÓz<;†®N•ÔÉui†¶ &©²™Ôe7q1Ox?jL‡iY‡¦+&e¶ƒ‘ß–wC½V«så,#^WbzKOsƒPÛĂ¢d¦kĂeu¼•dEM•Uo®ÅcêL!Y¯fËú}6?½MÆ3΋U½RswX3Á}K*:™Ëá_ßĐƒÿ$uI­|c^"7}‹(¿WÇóó — ª$t}@t8^?ÜͶ³ê3À1»®7ŸHåB,û2®êà¶¡e'ÍDB÷Ó½/ø?9C6ß¶ UQ̀¿‘`&9¤ø<Ë%5‰¯•; X§x˜yŸI+Ê!»¬ïkaOÙ& …|lqe `†tÆỄ¯åÿØ@+àSÁ»ơ#刜ähâ€c ë·’׳%m›¶t`̃@•.^9ÂAÑâ(˜ä‰y‹¾́Üá䶆ꦔ\*e>×ÈDo ÜÓ$¬äbYô©BO\6ØÙ́̉¹¨ ¬sؼ3ôơc1u UÏ“’×sº$´vNsÄ"¤‘²„™÷èéÓ&Qœæ©vT’¼*⵺¸ø™v±~}VG±.-Ï#iïô’æ¶ÍÅQÙÑỷ>µÀŒÀµH;ûÉ́…p¥8ù–É’©̣Vÿ¹¸ªâîø['}ɵ£*Ö́n‡dŘç±c} ú{q'̉ÖñzeÉ"ß»xïˆÔ…zÀÛ°ØV4ú‰·ṇlôp!?¿'`Î`{³̣8$€_’Ê@đmÑg:HP®Ü|÷ÀàÖTMĂ-&̉Ç ,«˜bÛƒ®Û×ßÚ¶*l¶„L^Œ¦ơób“î zÊk,Çsj£h5ó–éɲë$j„,#B7̀{â†F̀<¢k´]Ÿ́=̉1U¥̃Œñ:k|6“”µO (kN\¼m<AE6VÜ´æ;•G÷ú³–Ô9ÙK˜%È´¤Öq̀ĂŒ³ §ªăGˆ;S­üL¾Çˆ§ôƒ¯̉{̀ÿYỗ-RÏ} ªE¶¾93ºëXr§å¡ØÄƯp ¾åIG#~³‡äñÄXcw9›j·dJ7>zé~~^‚•KE³]艮èo„yơÚLD«cX´–E¢'†Y­?O~wpû) ¬µWéç’ve•ù9dÈvVCîÎ( o¯ÇÜÖû~¸ư˜|¿Ä5)Ă¯y¥TCŒF)MëZ KĐ«æ¹ %^ÅÇ!£÷l¯ ~0M*iŸ'6S{gxƯ₫ÔỲ®Ú¼œĂAô„5lC%Yv4¿Qú16I¡çö æÅjcË]đ,®Ơ~3†U-Ư„ÎéÙJn˜ÒÊÓ{FÊĂÎ ‘Úă¡ åkc;Öạ̈—¶¼›ƯzVó°jïOœb^Gëb毕H»”µ˜ôđh»#í³¹佬́‹M3‡{,·ŸlÇ ©~ÿÆdM¢ âYy{`M/Ûsª¡Qø–'!ïågăæåËaàÂ¥í½³́[–Ù¾>ăI3lØ¡ÊÎ3¢év† ;¹úÂåưdp|̀d»¢6d/«7}ä¿ôƯ´˜¬^âÿ~¥Đ«.=öK;xà£h+^cáđo=À‘/‹|¿ŸÏo—ư¡ĂccëFÏ(æÖŒÀsN½!*Ù"?€ơÏhzÛ_ZϼJ¹Ë=“ÉïפßR£7{)LjXÚSOâưîë6>s”A₫‰—¢ĂDâZûµÑu[n6ë\9,Ûöà̀Wº¥6CĂgæ‘ÊN÷đV´«{©³a“<®|„ăÍ ‘Ô XïP4ÊèüË[vÆà]®†Ë oÊYï 7xd¨@’D/xß.Ô Kq̉áSÖ¶”œf|Ú´2xMwrPc#Ïsê;$Đ̉ùâỷb.­=a Đ̣}¤K™¶yµ~N­²…Ç·1"“Ñ¡APpṢk‚L?JMÑ™,O6Ë EͽKf%é20k}ªw}:™xŸGÏ÷G«¸ùØ œRaÁqµ̣q~~œ"~gKf[œ<ÅânfưÙÅ»ƒ->QøÆjLª`ÜƠHLæ*‘)P¯+xC–“ê/>ŸÓ½¬tØö_WƠ—`J[P{b Äo¿Íq똱³ƯË =Ị̂NΤËaÍ4ö÷/ed=ɼ†ˆÅFéKæ{yל¾sÔ*ûă~́÷£ñîØ¨]åÈ"?~y₫PÛS¶'ßCüîô›×ÓO‰±´ˆ_‚æI{i©0b}ÈC°;D«IÇá 7nAk^nmï4x)Å{ĂVùóă3ÖÍ„á/¢9r—ENÖä(ñÁ3«Ú’E?|³™s‡…Acg3¾₫ơ+U­ÓˆGKB!MS´`™9~_¯@‘‰gKKVXƒƠ$đD‡®Ư8ÓXÑ0ûHîG1%R¦¯G ̀ º)Yç€û3̀/)ÈbL#ºmÅ(¿ÇÇ]Kl±tïVå‡áx†WŸ»Ó‡‰…„J†ï9fZ¬"/!8 —äk¼™DöK₫ẻC×.UñÖ ừ…i‹év˜ q†ÎĐ‹æm ‡Â”Ùï¯æ̉¦c\½¼¤^éYˆ¸í+4ĤÆéỴ̈Ö>ÔtRYx9i" '6‰ơ)K¹üvø¢³Ík3»­gVÓ¥&+ơiI®Fi+^˜¥¥Ă›ởe‘…È'Óz[ Ù€¹W7Ô't(ÍÎmHXX₫óØ‘Á¢Ï?£´âJ‹^4Un8j:̉/Ư¥UçJóç)Îû±L˜%g7ȧƒỵŸH¿b8œ»ơÎØØ$Ü:J“)Èr¬̣ÊéûÏÚO=g. ?ÆyîƠ ̉gfæÄJ‹ÆÄ-ÿhùÓ̀ endstream endobj 653 0 obj << /Length1 2507 /Length2 17377 /Length3 0 /Length 18836 /Filter /FlateDecode >> stream xÚŒùP\kÓâîÁu ¸»KpwwÜƯƯ5w Á%¸%Á îÜƯƯå̀–ogïÿ̃ªs*˜§íéî·û]« R%Ua3 „ƒ½+ #3/@T^M…À̀̀ÆÈ̀̀@A¡fåj üŸBè́bå`Ïû/ Qg ±+H&f́ 2”w°ȸÙXØ,œ¼,\¼̀̀Vffÿ:8óÄŒƯ­̣̀Œ{  …¨ƒ£—³•…¥+ˆçÔ¦4.ú?ƯÂv@g+Sc{€¼±«%ĐÄhjl Pu0µºzư'5¿¥««#/“‡‡£± £ƒ³… =ÀĂÊƠ t:»Í” P0¶₫]#@Í̉Êå/…ªƒ¹«‡±3ØZ™í]@.nöf@gˆ *-PtÚÿe,÷—=àïæXY₫ ÷·÷¬́ÿt665u°s4¶÷²²·˜[ÙrŒ®®ôc{³? m]@₫ÆîÆV¶Æ& ƒ?S7H+ŒA₫]Ÿ‹©³•£« £‹•í52ưÔfq{3Q;; ½« Âù‰Y9MA}÷búûpḿ<́}₫‡̀­́Í̀ÿ(ẰÍ‘IỮÊÉ (-ö· H„đ[ftp033s³±€N §©%Ój^À?•,ˆA5øù8:8̀Aeư¬̀ ?>.Æî@€«³ĐÏçßÿ"€™•©+Àhaeđ;:H 4ÿ ƒÎßÙÊ Ë ?ó?ÿ|̉M˜™ƒ½­×oó?˜I]RMTJŒîï’ÿQˆ8x|Ø ¬ll6.''Àï¿Q”Œ­₫Îâ_̉öæ¿’ué »ÿ=Ô¯ ࿱@s Pÿs=ffSĐ/–ÿÏĂ₫§Ëÿ¿ÿ#Êÿë˜ÿߌ$ÜlmÿÔSÿeđÿ£7¶³²ơúÛ4·n® wm‚ưÿ5Ơ₫µ¸̣@3+7»ÿ«•v5í‚°½…í?´r‘°̣)Y¹Z₫9‰ƠÿØ3[+{ ’ƒ‹Ơ7 €…™ùÿè@Ëejº=\@#ù§ Úÿ2Û›:˜ư±d¬œcggc/fĐ$±rp|X@ÛhôüsˆLŒö® ¨:?€¹ƒ3ÂGÊÉ`₫Côâ0‰üF\&Ñ߈À$öñ˜ÄÿA\̀&‰ßˆÀ$ù±˜¤~#6“ôob—ư@́r¿ˆOá7ñ)₫ƒ¸A|J¿ˆAå71¨₫F́&µßħ₫ø4~#ƒö?ˆT»ñoÊÅäÄ ¢0q66ÚÍ]ÿ%æø[ü×Đÿặ̀—Øèú{¶äÿÇ”‰é?ˆÄmê` ÿIØÙÿØÙưÎïÉa2ûQGƠ üçz'7Đºưv5Ñü·ËÈÁÍù_zP¶ÿ‚ ,gªÜ̉ËÑhÿ/ ̀ê_ÔP›APUÿf•l÷‚®/¦ß¡8@®ö møGÀ mïfg̣Ç=dñ/JĐÅÊäđ;)PL‡y±°€rü­q8‚~öÿ9v–¿¥ÿ=vP Açêđ»É́ †8Úº¹ü+>Hâô;IP‡œÜ\f&ÿ*”ío¡‹ƠŸwÄo_ơ¿ºÍªđwdP%.@;«ÿÈÅôø'!P›\l],ÿ”öï"@×/“«¥3đ_“ê«‡Ă¿@1Ü~"(‹?ß\Lœÿ,èđÜÿAéyük @4^ÿ‚ ®{ÿNäê t₫‹̣?7™©›3¨í®>l@×ÜÿđŸï@ 'ĐaaÎÁ”/Ôº.ôÛưWa†1iÍtŸçïn(°)45ÙÁkηÂ)ƒƯhË[âÔ7I^|Z`#Ú’”ÛŸ|Ÿ U&wÚæ'°ûÇ‹„ëûˆà Ô>́ú¾8ùjÙ@¶‚wÈPä;¹q£(¾»÷è•ô¬ï+_ ŸÛQ̃­á”E|.ŸbˆSƠ *™¡(0É™Å%ƒqe ‚£Å8÷D¹¹ÆÈ#‘I¤Cđ;cû⣳Îÿ0ë½R©Æể‰G§ƒKyƒ12Ié#²Ÿ*ƒó˧´8vMàW.3 #ØÚH‰ïpé ¯®œ4³­óä¹_{=SV|öª‘#măÊ/\:s ÉBÅ–â^ƒƯø»Hg:3y÷X/ŸƯ¨í£Ù£“ºq]ï!]óMx„M¬åf‘±—'?LyÂë]îNß"ë¬2̣ZŸëñcÇiÏ]OƠïưâ§n(°E)¨hï2›¸(ojß±ëÁ×𴛀ÁëuÑèâ-J¨/1:]́¾²ŸŒè¤sË>y{x6zÙ&Ks˜`4“X›&è`UB dDÓ'qåÍ –ËỌ̈̃¿ÿ ³dVưa²]â|T>bï®Ë°¼àÉ ư½]Ưă‘@ó¾àQ4ÔŒNN„q@Ks&a´Â f´‡6Óâ¿N]Ñ~QAD_86øèƯá1Êü8iÄnöưÙ»[äØm˜TT\KGóæHƯªl l‘çÁ¡Ë‰n! • Ù²zư¨ÑüªÓJÁ-o¨ •_nÊ7uG{’ô¿¾÷OÑ™î̉™÷̣¨‰­‹¨ư¤I)¦›8}–E‰Ñ¸Ó6ËGÆCئä÷à÷#q­£g̉øfÎÑđe,.qX¤qÅ~7Îàđ¾ß#apZ¾yÖÓ®e{W»: sDđx™Ñyç]åGGsf±N_Î{y9|ú‡L5?,}Ç'ïKT„¡V¿ÊÎ@ÚeÛ̃,Sj.âĬüô!n.<±“èÅ_9« ÊiHë XœÍdû(!ë/₫…ë¶—đ²ü“¢J4#_üÊÇX©!:«p­Ú\>¿ºO÷¹˜»Ö}ÚZ7â¿Ü*H¾}æøÙî¸ôQDú[ñFA´*û¹,ŸËQù{;³)¸TÆ̀,û¹›î1²‡ö÷ỒÜÖoº®SƒC©‹Ÿc²…,¯3¢[L²7^iˆ È̀ú¿E“”²¢xƒĐÈ‚ó/ÊhâË|Ơ'ÏúËbÍq`*̃‰5¹̃£Í˜¥u—ä TfesŒ^}  #h*:µæê¢8²úđ–†½ùn|2rX lÂ)_}yBâ öîc+K²«øxđTóJáäÉÂ@¼Ïu*B© 9)9—ƯÅNØ¡°Ù¤O±´,w{¬́LÅùy-l*6ơ¾ry/{N²ĐD53®gœ_ň{kSµ ”ßrDJ˜Ø[ÿ`Ưü> 3g¹ÿу)îù~dŸ-Đ$OZ?";ºË«¥7~dÙ|® lù0&içđ¢ø©ÔÜâ˜¢Ă±à‰ßê‚D‘˜Ê§,a¶nÅ£âUuW˜EÅ-öv1Ö¹ëG|'Q(2[ê0×–x̣Î*¤+íT§8ñhá*åcU8 ¸¢Ï¤DzTñF–æ@ĐÓư8ÇJv‘’đ̀]¾Æ¯!ï•¡ÏŸ²L±I"pØ ÔP̣”Ü(ñ¿~Ưê:¬LÔ¿SQÉ*ư" ePĂñÂó₫ZødƒNè§Èụ̀̃OĂŸêxK¨5©vé!#À^Eú$Ë‘đœ?¨„§̀bk[B¡†ĐÛä@–îQ¢ŒUˆ“e¹]´/h¯?– ¢Oƒ5P§TMSÁØe<!ÊR¡ÊnN#S æ¡g‹¯+)ĐóÊïûD«²I²ª |àÔË[b8Ÿ5ÀÖ£ \Ú¿ Àft²Lï¾Ó&È»|² 6./ơYP¨Vw-1ªªº̃̀”ç©…Ù6Ä”±˜2ñ ƯLCùæ̉4¤6• V%Ö i<È«éDª`Ơ_àÑdô¶_TKµÓm´niÓ¤¦– ]a/´Ưn*Dÿ>úé2₫®'ßcåvn+(=đö× €ª”Ø1r …ZªB›¥u÷¶"*_½c²²”éXñZ ˆ̣˜Đ'”W¶—QôØjT–§°ĂSªáû¦øó »§!qäNB₫BÛstf/ưun‰Ù¦-•ɰÉ}ªÔ-#@1éë>wß¼‚‚ưN¯ä%4¬“Û(qóÏÚ9ùdˆ×]O3fLŒ°'₫´½ßS16Ú~ u1ï‡XNëüPeÁ©SÏ|„ñ'\ä·ˆŒ„èH¹Ă~xh¾—Ù`¥S‹%ÔO‹,îỵàZÏóÂÖI5 ®Bl8û)³´ ­ˆ<®Â‡}qJqsÂƯEkb”€̃[Pµ«qF!›2°¤¯̃ư?{>‹3̉pÎv5¢Ks8\8L†«®B ñÆ4Ú%ơ} ¨2¦­5ÛSGüKĂè*Mh锸ë5’˜–2ßé4°­6°Fp/Të§:|[?É@Â:jo ¢k“.›oÜ9‡33äU«cÿüëÓ<7́Zf:¡“˜\ß÷oñ>Ë'Fu˜Ifɾ¿B‘%ẽ¼™³÷¥¨~è‡F-€èËqÇ­Ç'ôë DƃÁñs­ùÔÈ9®¢÷ÜiĐP¼ĂØØ·Zf =ÎPs(zµ÷clÖysøêÓîŒÓ¥®óÆ#^77#Y½á–Èγ(¸nä€çôc”)¸hĂÿÅs35A5̀7Ûœ‡äW¥P§Ö£Û€ˆ§¹¤‰ø3£‡&ßSX†}'<Î9ÙFXs8 ‹gzpÛß ÊoS¸(̣Æ´ŸgÈo£ˆ:Üß/7 s©›Œö4ÁV€Q5C`FØ·( NdŒ±Äfîk®öW¼Â–.¼i,#•¥+¸ÁĐñ¼-¢²s¡ÇxI¢ROv¿®­!—!wwF“Uym¢8(v&ûVê¼z‹í†|hÖ &Yùñ°₫Áø3Đ3u‡ÀDèă ÙV øÛ ¬vgØÙiöNÔZ±…Hƒ-Ô»…8ơ‰C™!2 ]GưnÄEè!Ç1ËØù®ü±ÎO¥áêÜă³Ĩ{«?äÂ…ê!’py‰ecøªo 4ß(F´’Co Èç#xqLy·$ ̀2EƈçdT¨Á9uÔhOØI³ă&½´ÁŒ¨ä_¨!«àjN†äßU( ¿ï7O T#3'Œ%ƒ̃¥½j•P~RùÑ+₫óQ¿”U.đ0¼Œ éBÈ’†›r‹IÄÍ<ä65‰§9²ñÜ­Y¿/R‹Üû;Ë9'9V³ßS&ÿ‹ơƠ&ç̃ ùöZ ø×†zÀ^™Ü½ûX›̣¾C+ïÊ¥À…Q£xĂp)ơ–êĐđ(3cRGM<Ë* ¢ÙvLÈû«!i˜Q¾ö@%}Œïƒ­Ø*à¯)Ïû)m̉ôÉdBY9IA·[&"yăcÏ¿¸}——$ÇsWWÎôøÚ¤́û7`LY#×jDÂr̀J¹¬?Ư,cơ2]n¶ÅŒØh®¸íZl$¿Ä̀¢ùQ±Û¦L$ï|x¨é0T”^kåÂËg̣ùhåíÅ`æ<ë‰lNPđ}„äƒKfmrîâ>ô×tç]ƒjNÙU>·^ë‘Iă—iS%8ÿ₫ °yæ‚ÚîûâQo‚-éé*̉Pdµ–•ṛiú/ÄÁ¥ÇLùû"`EÇ›A”âé0Ü]ơ?Ÿåá=Ôï²ÙÓæ{é³×­#´ÖZióúÚtqN×̣‰E´Í9₫m̃Ëmü«^A껢ÂÓ´?‡ä‰é· ¯Ù¹å„q>ù)à‰3ª™4ê Ï¶úg¢²Ek6œâåĂ4°«%aƠM4o   —9„ˤÅkvQv`µújêP?„NHÉÁ~Øă2Śù¼;ê¤nœx‰W³\…“Ëë‚CëNLK&Ï?CœîuđkÓGAZ:½Ÿ#Îrv•A/)úa[Ød«‹¾ÆBÑkđy ¼ª_|&œè5Œ±=@…we¬Ó°Ư#,®¼åz +3 T›úJ¦Ĺá8f…•4k©ÅrWÏGuS:Ư`Ṕ„Ê?N}vđØÅ!Ù‰ äF3üh"¯Eº)F~RêÏ´I¸Uó¡ƠcVC%¦YÜÉWÈGª‚fNNsÄ{;y•;oHÖj¨E^\}K6V€Ù4Âp₫Æ₫+iö̃ƒỤ̀´®ä=÷̀zˆĂ¶l V¯˜¹ ]³©€’Ä›KÅ’V"7Ñkæ̀„]L`æŸxUÜa¯~¶”o•jR÷×ÚˆfÀû›Ø’óûa¢†’½¯íư¨å¶{(7u[€»̉ËPUчèƯs`ÑiW)x œˆ¶Z:̀"L­¶ZqúXdpd^Å8„9VÖŒE^qû̀ë¹V±!k2K+đÏZéưÙ–iȯ¯ù‰¥̃J´ÊĂeiª¿Tv̀hIölNpæL̃YF”aBx|w3́+Ä%d^ĂeûbØa×#É´¿ |q]ïf~½YˆpA% ¯Uؾ)4øÎɺü"ƒa(₫(sº.·©@ăç$Ñ„sáf{'¥ÔD²(Ïœ3´o—sÆ•äoÄ¥Œókÿ*u……¤AwoC½§̉ŒA ́æê N׺ö£v˜ØpÙ}K29¦y3qÚbæzë'­ám‡ưÈ=¶çlªM:µ0 /×ç=ÄOs0CI€L7„‘³ôd«-8K0Wt<¢Oa<ÁínV¦».£Û2¦:¾M]˜Đ䢺“ÄVÑ¿€ç!ˆSdw`Ouë?úùđÙ|…½%6´Ùo5açU ¥†̉e6Jrhüß0)²KLt;Đ…z.úø°̣T<"ÖZWq|"ËƠÜñ ä›­–æ<ƒHÖ‚ ̉3‹̃—}¸vñcÅóQ¦ñÀ—9t…ƠZDzbs‹UÁ`ƒPËrâH4ñ%ö?züÄÀúÔÉ…g"́”—ÿENkF‘sï‰ Âˆ—d|æâ;DCGCb)q8Ö·E¬48ù$}ÊÛˆ¼‘—Ÿäaq6Îé§eèƠ«Ồ7® YDRn‘¡ïñ¶àƒŒËH7ÄăØ³n‘î²Í¡ªB£̀:üåDß.å rÄ!6æÎ’‘ùµ"ÍŒ²È₫?×›éàIQ~¬óÛI¶ºÇyY0ó–4³ŸèUÇ*¥›T]ĐE¤ƠcggÜ/1€û$đ*í6î¶ä¾UVwÇ̀Nçß”=Á&¶¤•#ë3ܽ/ö²úBΑ ́ F¥?G€e&wémBT5ÆçXÄHƯ´£Øđ? ÀÛưcäwDE¯ £ª“o˜§Èœ3 \²ÆTE«w!º§¼†tgf øIYÈ¿rÈ%¯Ê££K3¾bÏ&KŸ‚±D˜½ÏÆá9¥̀N€ {_ ﳈ_k2¥mA§+­ÂZ–Đ´7 —÷WÑvË0Q‚l®rÏÜ32´·áĐqèuXÁÜ&,Í«™2χôÇY;‘́œyo<¤ÏC˯Lß²°Ô‡ç~×,™7od©ÀdäS‚º7¶yÀÊjYúè: OͤÛûaË—O´x Lߨ™skVë9T³…â›hL4˜"öm”̣q”¶Q鑌¡HÍ:±eÉŒÓÅÁ;n$R¾AÆËñŸ´½ṛw•?Ïö²L:’‹åeñ̉Œ}Ld³¤wí'ƠCZuÍÆù&ªüp"B?¯ z,CƯW}œsÓĐë…]̉·S³ˆ‰Ó5\Ói4<¶'¬₫ǜQTSJ¥Àí*IK'Îë‹=D Ù2]~V°‘d\́‰Í7®oTo‡tW;ÖŒ»<;+#3qY·r¤ïÅ×±"ê)ÍbÛíNŒP©µèŸwx*Æú ?Vyh~Ëk|]®|„®É£‚Ü”á5µ.g+6gEPøÔÈË&*ú‘OmÈŒ?{ ^XˆG c&ÂøÓ4î€æă£üp{tÓ-¥ŸÜ®½[Nqîö¥< Ư‘u:ÆBĂ0“ĂRr×Û,‡ŒM~ƒs?§»L'Ÿk|¶+øù³Üï–[Ö°G¼ç®#øGÁ.R&>¯€ñŒ8ìâ6‘e›»6e ¥“{L”Ïhô5Sq»ç¦f?¯l1Cæ¢ß(‰|jÖ¤%̉́ÏV̀=T „?b®?œ5NÀi ›ëlƒÙQ ­åK¹cđă †›éÇ^`èÊ¢Åi‘­Nđah N_Óé«ß†­ÆsVL¤–„CÄ·OÇàÜ"Áü–PÈcµÅ±f‚.ö¢pWGBLå!׌ ¾CQgM–r¦é^ï%?fbîƠZô@HI?.[‚6ÙôMR7Ø<́¤‹2©L©Ó³¥R73ăí¨(ÁJ€u8-ß›7X×I~ø(85©ßP°'më^í¥t½đl;­K ́̃æ=é±Í7i fú…'µæ@ I•ûĂ''e6G»R†ƯË¥ơœÜ™.Ë5ó%b—‹&”fÍ2FNsDyyK+‰¦ª̃â6°9(ü×Uâhbcdç·7s@$xÖ í&êWù¡Û`^.Âk|»¬tH¤r̉Fªb¨L¶VÒ^~]gÀévÔiT>̃‘ưǃ —¶Ã<ƒ4yŸñ¤¾f̀IBˆîÉ‘-W₫EÍ÷Gơ.KđlŸüºÑ‚vươÇ„_&=I‹‘Ǹ“Ï)^§2z̃ơè^ D<<ê®§ŸïPÛmĐ́©Œ)΃₫X!†I\‚Cà‡ÂzÖQ?’`áˆE)˜†áy¬ÉÉCaQÊh+Ë&ăŒPƠ!ô¿Íÿ9ø SM/× Üœ>6yY” ¿i*¡9ÇñÊĐV?8˜Å@p÷Ù…ü&‹bí_É|&"EX&½VY­æ÷å“5¬iaNËç$ú ö†ÚåHúø€I6¸ẽË`$²uFû8"̃‰”e½3ătñy=o|Àƒ†À’UÚ®íÀëüÙCM»Áƒè×ăÓÙúˆªPmŸ̉X2±R\đ¬Au¨e×9x®ăÑn±#Éï‘“c2„º`£*½9¸ëxçî́;k¸ŒQ̃‚Ù`H* }vë+³ă¨^́Œăơ|¯³PÀ{̀U4ù¨Xäñy\€Öúạ̈;$t̃E@B%œºKÉád†BCܤrÍ&{ÖB̉NKH7¼b ¸rÜM᳓dƒLö &¼åÆ ØXa½„9v̀RlsÛJ¶Ko0­Ă[ÍvĐ@ô•Ö}Ñl69´Á°.äS4A~Ójˆ1 N%›«¬ŸÊ¾ø‰œÚíY¸Í2À[*WÍƯx;äƒÇ®v“½Ï@bÏ Đ ÷@ip/?ax&;`T幦xßS«¸÷2Ä C<˜Ư²ÿ°V§&›bđ‹Wô;KÙ gû‡o}Sy‘ƠÊƯâ då©~¬=W̃©%̃CËñS²́ï±d:D¯}T¸·±’lœ¿-fY„½¡ 1)€™Ø(₫>‡ÀoéƠư¹º7ä60}>ky“}Æ;đ̃E ^íÇÁ­í#̉̃ñVQïÍä"TvëIA…Sh%LØÏnÇÊ–9 C#[Ka:|jí‹!˜Úf2”ûF Ïü¬‹å̉09l¬ºtƯ+s(ö¯nzy_ÙĨđN–c–×Êô·ª}^c 2Â,°—iyjª:Mtƒ „{˜Dt8óP½²½[ í=d™À¿̃}[pósç´Ñ¥.̃xÿÅ]”«|âËUTÛ¹È,âå}¯ưeƒ³ƒ,éÄ—P—¯'µ¸úDk™1ˆpJü³>dvyn—ćbÈ‘CWkĂ½V¦(K†•F̀ŒÑÚ¨*†°W—oï™mY °t ‡Åèê¸'lȔ֑º‚_Ó meb%«œxg]åV•„‘æÛđbO~ăÂ==¾ím{+Ưg}!!®_R³¾wtí%Kô'çC­ªu"#uM`0́ÿÈ́'z˜üƒ–ơ”Ofß­Ë FjX¾+œVœư L̉k€ï>v6dÊ;YE‘Ëæ¹%L•7¸ÂăÚ4ZmÓ5½bCO/.n?—ÚXă¾¾›ƠB&ưĂƒ,FW<] FœÎÙX²b¼₫Aj£,Nḱ™Q!Jë8ÂÔÜ\©¾‡ÙQ=º9Yh1eơ‰U2ÍÁMÿÆ *”Nú‡¾B͉Đ4XIÇa–æÏ±ÉQáB_×¥œ ^ëÓj9ó‡‹äIÜi_ÍÇ_(k¸̣0¢¿ø²n“Œ+ÅÎ(F; >%Dz³?–J毹qw˜Ă œj†̀ƠøŸœÏ µâơ}X—°ï¶sÛ¢ú^l*µ…=NΙ>kŸ)|sb_ Í„Á(Í%ÇNUl²5‰LÜ]¼²‡·«Ü~'ZE‘A+^S««¢—ôðdX•£-™—Zæmé±U(ÖrưáE¦FÅöN´Ư:ĐÏ'VSBC׋öù€úI/|FBÎÙĐÿJˆû§ñ’ëÔ…HPÙi±‚“Ă`óØü₫´D;©JæªPó́§Íè̃¯èÙS¦¹†jfæ̣f&¸SßÉ\Y T<œNçÜ—íÖưpÓü,Đy¬løZ37•cé×°ƯO‹@œ x¹Ađ[ö\â~+­œMD…q»…ơµÙùi¡Ï)‚“¶ÁŸ_^g·¼jæăWuÙ‘ê%&Ö ÍNá;KØǹ¸[ÉåĐû¼êzåÉ“ÍDĂ,§ß‰Äû1ÓVÇ*­³ó¢ñ…î¼…=Çá‹}ÖÜ™ÛÎ4M†HĂD©Öưçæ¤ ÚS8j:¼¸~n¶ù^…äđ¡£Ú±Ye=ÎK¯`́—ª̃1oÁ~ù&¼‚íJĂl~)#b$ĂU•”¨OŸ ÊơÚv¨ ESpÜs:æ—bđ6T¦´¯¥0ûIÅÇÉ“ơ©¯øR=®ñW¡Ê²ǾúTw›ØBî) 5̃¸zê‹Ïï+À€­økŒÂbDü{8J^±Ú#«NŸa;ơîÔÍxƠ¹æ₫àR<ˆ{¯ Nüû™í›û_ÈÀXS}vÅÓ•²‡îWT%ùÑ=ÍE¿Ä̀S¥©z‚ô6ÊZ ‡kơvˆĐ¿¸FEFÖ›œXª(÷–t |ª3›*tuɳΌt¯ifÆë´&g÷ư€’D~gÆÆ5Ư3P…±ÖÉ׋B2Pp°¥W„ƒ¢¿ó“‘Aöøc)R K²ÚÛºḱ€(\Ärà©ưµOK€.#ÛÊÏGBÄ̀ï¤yO©ö°È1[Q¯1é–^s, }vMl¯"HàĐ? ß"ºÙ`tEéńçIơVưTBơoz¡Âß-ÅlX~ß#RUl•êkÙˆœ|Ơđ}f®Î ccqÙÖæ )Jbheơ}vy¯Đ;ưA|qÇûV1^z)iElF€ÅÁ ÿû6eḉûz†ȵ]aZ‡Ó-ËUj˜È̉p̀ÉE7§è2–Çw´€©ZđÙoƯ¯Ó(dG÷·0„ÀwÎËc6S¬úÛ[TÑ,Ô*F^¤×ÁïØoÜâ†ö—&¨îrí¦Œ4S¯ 3Dƒü†Å¦ »µ?§ŚmĐ\¶%ǽº©|£ö *ũ¡“s»ÔWV-h¨Üª-@(Le¾:º…Ÿ‘̣¿‹¤4ÿơèøæ ¦mÔ³ñ0â×Ó$Ë́“ûqK¢-`‹>e]!ƒöW±7‹ŒơL·ÁƠùÀ°ªÓÈóE9­\6ỎÙ₫ªJ©sX¥ûÍáû²û3~LŒÆñăeÔºĂU₫Qưb!»C—ăr3nç}£uüÉF-%ÍÏ,?Z³:̃îG3{÷OKÁ! "B>G¦³ÏZ:ƒå”6́ùï áưl[!ưb÷ە붉`˜¢¼Dñ0 wsƯ>×#R’¹ªÀ2úÉæ1-};CáüDv·ÉµjAs4E«ü¯Äd0ià%Ó¡u₫QUx«‡V» ßd¾is&øéÛ_K'Ѫ¨>;bÅÅíuÚ·ẹ̀hJk$2t-2 ¡D%hLíÍSÑéa^ÿeª‰Qfœfÿ’äî{₫ë‘Ka7c3ơ×Đge-ÈÍ.m ¹È[l9b'b=5I)hH2¤:́ub’¾ms,U“‚èñŸÂG;m9Œ̣xp2G¨¸ºŒV+‡~ö}F}ñ¸¬}{´ÁyB?`$æá—²7_û œV1„°°(qbÆïtA£”80'éÖ7ƯSaS.¥”:ô q…₫-kR·w(!ö@êê\Jφjá‡ëđ[ààw$~æ`¢Wă÷Ộ)¢ù¯aëR5°#¤hñ¢û¾Ã_¤¡¨Å5\`¶—‹̉¡W€ï´´÷$ ªÏ·µƠ¦S”ÂtÇ'¯—ߌ‡R”1&˜×Kq2{+Ø&üK ÷=<‹ ßXwpuèÀa’ñêë¶<æÅgˆ±ö4Q3Ẃ7đ¶E™x^:¿ŸƠ¬Î{IA±L SÈ&fmà¨ïkĂûÖágđ!o=ȸ:çV†övl€ô]xWA6cO‚Ç*D×C@*BåôÓ¸†¡èœNز!̀‹}eXˆúáÇ'©YKZØ̃¯æ×(‡6ߺº®U†'#\•ùQ,”;“L)5æ|½´È ©R#á²YÓOÄ=–ÑËä=Ó³¬ô³„AÔ‚¡£H>²KQÛ¼bjÓÛL‹áWRé¾eèÑơ{èËx(o1 g̣½Fgy‰b)Ó¶Ñ´Ç$û̃gi5FƠ² Ut=¨¼â/ó‚qˆª6"e%²¨ßæÛÉăèka™ ±´I‰¨Œ}Ÿêö¼•2¯BÖ%ñÛv’*117éù́₫>å[)uê…Ꜳ<ß’§ØÉû¡·1wœ)1³ñmu©ŸÉiœáƒOtI¸!@M^|̃'\X0â^‚x·Oƒ¿8ÉRÊƯ£«Ë>(Oµ;È^ˆ¥ÿ‰ạ̀¹<©%ëŹtßGn­Îî]̃aÏÓu1å‰_ÚA×WDFgæ'•:Ô·½·ë_á¨}¤d‰tÊæ÷¨ª‹Ơ\¥6Ÿü«Wƪ 2íÄvMNE“»)-ÚiôcöSĂb›E?âQ5>>À„:l©ï³/[nØb;ĂÖ-˜ÏVͬ½±&N}oXŒ`*2†¶Áo¯ÂÍB´’Âuf|-½ïV²›³Gæ˜4µ¶ƯцÜ®ˆ› [N«ëÄîưpjjùăœ”r´»ÄR'Jî‰sØ–˜M™[ȧB¾/óYR`0ùM ½¼2ˆ îEˆ¶d«Ó ¨tåQ ÑÀÙ¿„¨²¦̃ûæ¬@¸l_áËwÚú9ù#Zwm,áe¶!r~U‡̉5´é)d¸–_°Z@"£ˆ"Z£Ïé;ïºÊTyåùu˜í»•đ"ƒ*V-bQ&ÁY»8ŹpjˆG-̉Fươ-v ÿk¹‚Á¡­7â¼X“à4 áđddSh³ó‹>}!–ù¾"¦Lè{Ó·q|E‡}ư&kKé>́‹v/íjŒ'̉a’*o§ÅæW+}9n»‚ăḅîËtåæöÏ7®‘? ư®!ÑÓ hc²ôÛ!2æG°ƒw¸]1‚Ër‘Ÿ<óœḿy,ưK9"Û`_$S1ư®´̃d½<°ă£¯s}Wa|ûÂ{• —û–˸kgJËh%]%VL¤gø´~Âđ¸O_d-¢.XiÙ¥%;CÊqÂäEÉ•£P¥;Ç%Ă£öÊШµëÀ³=6©Hs6¸ÊaVY>›M­Ç;0圙l.{_­Y°¤"8ânÚó±Bƒëüꓳ Qàâ–+R‰·aw5«è„Q_/z:ÿ~ùÑW±¾©£%²/WϺEKµwÉ £#J ψ‰pá­ `¶Ơ`f7»6*ÉË¿Ïø‹%îÅ|Ă!í§N^®#‘Ôl9å!ªM—¤V”U§µD `PŒ́%Züz6̣«_íư—V|­¢®TSgŸo>ô-›oèÖt1—Œö™„̃^vMP”E+jŸMˆPç-µvvl¤®‚}Vç‰Où{±¡U“,ǯjé —­§=”æF¡ +ư“Î]ˆ ¼~Ña^ˆ„M}Ạ^ ¼ÙØŒ0 x£Û5{=(÷cqăî6@ár[ªæë¯qh³êµUh¯U~1K=löƯŸ êá̃í̃ c°á†)7·’úIsGhđ$₫“â O¨–˜‰ºáÙö§ÏÖư±®áÄ€{+4 $LLlP ư'ïăsBA?í»î¯£ ͨ*'ĂNĐĂw\ănO.9gG¤d Ïê‡'b/¦iø njüaöºeá¯C:÷7[I/ÚYGŒ×ïrxrP¾PeÊÇ«¸Í·SHn2|̉ÉœFÓ™9ª¹#Ñ ©¯Ø‹L*úH»”Ăà*–µzùyq‡Y=v=ŒŸ®%Íă_å•iäÔ˜ƒ0ÛÆâ¹™P¡­ƒÀû;^×ṭ5Û2ˆèê:C­¿}*‘¤ĐÅ…Zÿ öë†>À¼ø4o•oKLˆQ“B§gLyŸ#,¿qnµ¥Z 2ËÚiÄZóÙr“&HƠ"c‘qß^ ¹æ,*“sálSe®…{˜ ôơ8áÂ2¬¹‡ÅMCÁJñÆĐíǴëÔpcf䓨ªưY°…¥ù¶N9BéÏ̉‡„1&“ª¶_Àµ!ÖÖ§’°P±¾ïØj7å¡ng–Îß{Z 4$¹1,¸Ơ÷5 ƠÏ·R®Q;uQá˜l}“ưøuHéb)#‡ƒÎP‡1°L,Kײ84ߨßQêôĂ;d₫‹öûwG¢ úĐĐª€…èdM¨]7øÖX¤Ø–ëwÜ¡*O'dƯ}ÛßzQ÷7‚ ûÚt²3Ûx (f6Ø*¨Ùy÷N8,oˆ7Ư85ûX ^Fɹ1‰Œh®¨7¦q£ÊƠ·J­^LSđ‰ºÚylôÈ•Ó=­8ÛJC¾Uâ5¦Ú#—a³Æø)}ly›‡|E GÏ9gµ…(‡&ÔYç¼l­09a±å¹²l½Ü^Ú @7 3‡u¯ û‚^VŸ£ÆÎ¾mÍäæ̉¨¤Cô¿)}ásW¨đ·t+y`í~ÿ’Üj8tư¶ Ư Á7×Hà»îHÁÛç»q7¹;xœ/•ïPÆ̃‚E/¿Ñ É~-E‘6ÖÆ̉×aD~Ẩ‹mYFó&Ÿ íÔúë8̉©/åÙüíYgŒ˜ÛWy ×½’B–t#Á¸IưP…©÷Ø‚¼à뫺đ¾µf¼ÈéàǤpăø±%®Ô¾O³µ{ă;̣[-6ˆ5Û£́W´b\ß•»0‹x×s7FÏ’ ‹èơ3ybxûc5ù=TIë‹Îü¤¶ÚĐĂÊ ­BÁ4ªTƠed|-wb7Ùv±ƯUJ†m>•{Ö´ë$ÇUSó„ äÔ#ÏÙÀ»âIà̃ºd9å(U…±Cb™Qăåp̀FpïsƠPÖK!ß7>´@t´JˆS÷• +ôSœ5_å̃\ăƯ¹—oËÄ%‡6Sß%@Ÿ₫¸ư·~ĂÅuB×Ô"³—1[鸌 øí³Ä¶6més<;»JÄ1¦l:ùÚí dû¡ç  °’—¨5‡ớ¹·TÛT'fnôR~Îyq ÇÔ‘·…ÙÓíA_¤đnÑ \LƠ‘§¸(à̉vÍ'±¯ Œ7\ñO'†ÅØGËơʼlQuMÍV{É>`É1đQ°/áØÛưŸE*?”ûG£?­Æ#Ù´øNU›œ.¼ä¸O–|¦³3«?'°rÉ8µrØBÈÄÆa£TqN̉+¥©. =Ï“XöĂ¢Ùæ4ϹLí _ÇÈg”á³yƠ2„H8ádJpnö7ü}Ƽ‘8ï–¶=ø\Ç>ïåt}÷­æØÂïñpªÇº9ñüÊ"ă±ÁNÊä-ư_}øÉ̃iûÛ;lt\Å̉/!ëĂŸW0·‘a˜Ul’DW§k— àǽê±tGœzÉ=Œ¶¢ÖÖᘼvÉ̃¦¹?«¿Érgh£ƒw̃Kàpî7̉ßÜ‘]Vƒ¥ßSvïºdxúSªB¡+:Ê6/8’rCÆƠĐ5˜ï°¶ÉéăÉlơ˽±á†=ĂêD”" ;†múđƠ TÈNdĐî̉óvq8§°6 ûq¦?5X‰ưÖp©˜üúù¥ 23cûº†…g¹j‰Ó˜8éÛ́ ØËÓ5Á‚<¡¯s¤FÚ;"Ys*µëƯ=-KÙa´ÚĐ¼¤aQ>•–̀ăÿ „‹ªÈU=.bwçVŒ„ÖK¥w;ú̀̀ïâƯµª‘°Ï?S”á|ÖŸ4ù~C…£ăÈ` }ÆqY đ£ÚJ+v¥»–TØJi(àÓ7ÊYA”ñH6ü‘çĐÎl~ôfëqÚHá!(GQ xD|]ɯ Ø€l¿Çîº4kt̀́‘V„+·r ½˜Êµ%èŸØ¬.«—Ö‹;ÄÛ€ËÛ<îgƒ,GE’±!]«̀5èD½¼˜8öáM¢ß”V«’p’uȯán4Đ´y·ï̀ˆ³ɇ·úhȵUw=€V«(*ü…½‡ÀF÷ëàpmY&;s9₫U“B„âó»%6=Zï2ƒñ̉nUÂX9ƠDô~0tÄô5¬ŒªƯ3¾Jw'Ü£O—”KđC ¼2#·{AŒêf?vF‹©cØ÷©{¹uh™Đ„î~óI£¯ñ;©j6̀QÜö™MŒ„'©™_AMôÆ;q78«M÷}6Ëö8*k¡Ø:¥¯Sψ£·†Á~ÿ̃ wu9O-ç>˜.I₫Ă­{„ÄÍ(ÛûS¡º¾X†§́SG#́́†æˆL±̀ÊÉú†‘*$í)ÎhB‹-¹2¤w{d§€ùóÜh¢dú:j»Đ=Ăaj£>¥¼– H¦:₫´—¥»Wó´#\¹Rs‰r¸Ùk’ø³Üb!eùßx੯ÉÚBûûD˜PAî±nH qÉMÇœ‚Å~ •^Á`§.ja^ĉd|7ÉŸöiëó‹é×r‘kÉÁø^zri‹ˆ5Ơ¢S?µp«bíÙ^̀^Úº`¾ƒ~~æ»ßj”-đ©RûëDK2‡L¶·_^/‡̉í¤R®™_N×ÚyR¿VTô°–`¡½ˆ„`âdP8¬•c̣¾®’̓±©L«̣-ÀúPRđ̣lđ¨­ơäH:V?TlŒA–9 %$·oßúqÙ £ơ¿ #ˆÀŒ£`øCK,§°Ë^á¤/nÜi²Ữ¦Q((¼óË=&"h½å=aè¾ÊÂ=PGjKË»̃B³uŒ¤!x­s5Œ)½đL¯ÙbëZTS²5;¦ÓóKg’Zï»íV‰‡”™È jÎí̃Tî́-å.¼™h¤ ë2ds)p=¶2‡˜)BÂ-®+°ÈƯ8 `ócóX¿¿™‘u•ë*QµÜëŒÀîyñ¾‰̃”Ó"mmí¾GÏ•o`ĐÂBCÂ(u.̃k˜ơÔ-qváèË¢"°ß$có Ùüyç8·¼@¬ƠM!“ê«Nv±HqxFâ‹`Z3kÀ¤ÿ0¾äø¥/”…q;~ù*–“@ö‡ ă/9ú́›3UW É ™‘™Âô±¸GöK‚¡ `Ñ )’È-˜  Yˆî₫ èơE$1bŸBD:Û`aĂ…˜̃d1¸´êؘÎ*I·x ô0’²ŒÎ‹W À½7ĂƠöƠ[újÎ 1}]́²i«uvñJ6 L^dƯ¯'bl³B,fi˜&ÜZˆ¤{¬F8ŸÏ‘†£(²kÏ-÷èÙư¬ZçäöƯ “Äyô­Ô¶ÚJe3vNDjHb ¼e§!£ ˆ:ŒF"†@~«‰Ṇ|Éç ’O¡kăb¸2I×,ÔÉ„zÆ+ÁÄ2~='+–ßh)¾̃üÖˆW@®ÉƯ8T‹ [«×bØ4Yư«:$¯›éVlơ­¡ƒ¿°öV8"Önfäê°£K§ln—Qr^¿åô¼¿¬=ªC-×|fŒÎ~UüfÍOföơ·2pƒÅâÆĂPn₫|bG 5©ºƒûz߯÷äzâ-'?åákÂÜ₫\;ê5bÂË8¼‡¥Ïđ?^Ń™Y= ††Đ;åÇ0¶î_åb2ñăŒfÎ/COŸ˜Ỳ¿íÂ%!¸Íµ«9à~J;«•¶Fb–—"Ôh”’öÏÈåÈjp“=¶@ơ¶ ¨`Å®«¿ª ŸeÅÈÆè4KSwûl±v0ñ ±’5uņßK¥IÙ+^±Ùö¼ÑÄ̀E^i"EUƠ†Z ö[2@'́Eữ^{¨ "·ÑmÿÖÍ—P"Ö?/c‡gê]nˆI ~íä$ôö_d×.º““F2́7ÇfÆ#[)»#ÑỤÙ„ăüó¢ß•¿}>Ă>Ô<Ó†#çJ;‘º¬äûCæà€£ƒ38ºP(½¢ sbUơ³¹½¹˜Ru¶ƯB¨|åjTÔI°đGDd°-ûnZœ6üw–©êSpÊu‚¡ŸÁW€FpÜ ËØƠÿOÓ,ø?’üÔ =ÅÛÀ4²áÔ«ÓÎKDƒa…©è÷®(=/krîàRwä¯hR!9SÍzÙö™®Dئ¼ ø•IÙ ÛD™¯¡ÿKGí?Å®*û=QëŒEßgG-&µl©₫‡¼ 6dQÚrê±—?EAÄ8Rö̉₫«kÇú -mg¡Qíi›ơƠ¡§+DĐÏ«å¿.l4¬ÜBÚØ)©„R#ewи¸‚uÀ÷Ỵ̈̃Ü‘á͵èóeCÂHĐY-˜óH¹W(/ Iôm`¹½œh6µ$Ö&î0!º Ô`˜»N.(-VO<m¥ôà °÷Íî‚̣ŦèJÆ"„³j>9”PY9øáBÙc>† ‘Fr(ôîYç©€‰y²₫ñ ;µø¸1îb˜à́©W·9*rM₫ø‰{ÆËDVµçŒ ÷̃Ö*±[ĂïxăÜØèÊB ¡Î¶?º@Mêû=Au–¢ÖZ$ Î—ƠT1öˆ™±iW9x¿ø¾Å8r«AvàÎv¢øßđ£zj+Ÿ́^cSË:ŒLÔB”IUT'³·_ª%l•ôøƒ¦YSµ’KBQ$æN\ư5ræsÄKp§ü!ÀZ$!Öµi#âd…ÄM ­ZøíO®̣ÄđÀdGΫj·àZ–Äê­Ÿ7Ü3B–«̃đF]à[ƒlÓ»P}{j¦ÿ;•Ả H _ƠÀñ ¨PÉ¡Rñ Ÿ].çPŒªø[̀ɪÀ(aç½EbzBi¤¥¢j|±FpRg‚¡n \ÅdnƠÄ”kÔRútû ‘" sñ-ö˽~ ÿ!vü7T¹HGÄs̃÷àPx‰XÅ‚Ê7-x́±»ñ‚ß̀Ä‚±Ç₫°N.[+LFN®´|ƒû‹'䢆ØXJ0À¯̃_½£Ơh§jÇ)øehwœˆ˜ÎæáÍÁUº‡̃‚ *–€ä$Ô₫ëöu!©¬¤+gă(—­å“åÎó¿:e÷úE¯.¼`Ï<ÍM§x̃”¡â¢¢ïÁ}QSp.b“|ƒ"̣Ÿ=%ÈÎ×Y®}-oR9H¬â:lŸÜ^r½©ÍXx-0»ºà‡dæçÛ?B‡÷… pñƯ³f8‰Á>€ă;5é`"µR!¨̃1“ÊLh ơæË±E ilJ4ê4&̀•Pk=Ÿ ơ V»»Î#˜qaåttÿà¼1€§àMÉÂz…*Zkâ-¸rï•u'‰d'*:Ưfo¡x*àvÇçavƠ,ÇÎe~́ưóz¤œxÙuZ_ÎHéÊ*”[¦hLÀJụÁ‰â•Ï^ÍALâA&›ÉHÎÍé×Ö§w¹K6ªŸ„÷K£¡r…}{©WâëïôIUE¼úÁ…y¹GÇ'|^ #B6ÿ9­vßçđ^ ¦‚ Ù«Đ®œô?2˜4„†j?ø¾h»Å¢%đ,ă ^´ĐªXWÂÉéF¼…ăÄøW7ªQ §7k „ă˜ơNcí 3ơcăµCe,Á)-L¸™åöˆcܰº3\©óà©¥w7ÁræÙ+‡¾Qsœ™ph™"\+F £"•bï›ØTn–ë˜Kæ‚°¶tsÄ!m«Èà¡]§4ÑyçB.µB¡TeÊ¢¢Ø®í.̣§ƯØ5ƒI¼öˆ'Qc`„¾ÄµÚº₫@ö ~¢ ÷1M© tíH•Æ3d ưxv´² ^侀¥óË5"â*˜N„ư«́¸1xœ ăèăûÛÜäqbë‚c̉&¿§sf殼’X™Â`¬|Úï§̣Ù5 çƯ ƠƠü»›Ê1‰8Ă …½Ù¥Ny 1ˆä®§¸s’‚ﳜ+JƯ|ºsëR–EéF’íƯƠÜ•Ih¿6äeà4ëÙƯ„©Ôá¿G­­ü›Åæ]gn΃C_đèyÆP -.²®y2ϳ_ª‡g¹ ¦8? t…”‘IÜbø_öưôÎqH´̣R¯ô³ÇƒùƠ™†b±¸,‰°FđNÀ•ïđ­vû7«3Ń;èmTf…4güĐT}\ăè)Nîđ₫íàzb̉ú…sú-N0•öºơÛß¶ơôÚ¨”đPöa"$ß’Ư4ư« cJơd$ø§µƠ³¬syiŸêL%Đ9·c Â]Zó¨=I}F¯U·„™¯¬:¸́†R¿­ÍÜv:̃Wä Mï}uZßĐf½h[¦ IéÊqÙ;dÿ@ ôç(9ÓrÆ—úzd28³Œ{~†•ôÆ”¢é¹€~«₫-L‡o’Z'$́›œKÙằÙMû€¨úC”“äÇwĐƯt.¬6¥­_30Œ“ wJ¢ÓO/2•²‰ ]$đÈ` +Î] endstream endobj 655 0 obj << /Length1 2127 /Length2 13081 /Length3 0 /Length 14352 /Filter /FlateDecode >> stream xÚ»TÚ¨»»”´¸»»»»Ü»ww·¢Å—;Å)N±ẫ—#÷ôÜûÿk½·X ̣́Ù3{f'@C¡¦É,nåd”q»3³³° $•µ´øllœ,ll(44Z wàßb «È ,đ/IW ¹;D&eî±Sv<́œvv^66ÿ \Ræ +€2 @Á tC¡‘tröqÙØºCÂüç!€Î’ÀÎÏÏËô§;@Üè ²4”ÍƯmˆ–æM'KĐƯç¿– ²uww`eợ̣b1wtcqrµ¡gxÜm@7 «'Đ đGÂsGà_™± Đ´lAnÉ5¬Ư½̀]ˆÀd »A<<ÀV@W$8@S^  ê ÿe¬ô—àïÚØYØÿYîoï?ÿt6·´trt6û€À6k *£ÄâîíÎ0[ưahîàæñ7÷49˜[@ ₫ܹ9@F\`IđïôÜ,]AÎîn,n ‡?RdưcH•¥ÁV’N@°»Êû“¹-!e÷aưëdíÁN^`ß¿Á¶²₫# +gVm0ÈÅ(/ơ· D„̣[ftp³±±ñq²€. ·¥-ëËkù8ÿT₫)†dàïë́ä °†$ôY!?P|Ừ=wW ¿ï¿ÿM(́́+¥;Àh£ü^"ZÿÅĂwy Ù ½Ç`ûăëŸGÆö²r;øü6ÿó|Y¥Ơe$euÿÊø„„“7À—™À̀ÁÉ àæâđđóüÿ{5sĐß›`ûí)¶vđÿµWH‘₫³_Ï¿ŸîïÑ ü÷Z*Nè~·¸7›%äûÿs£ÿẹ́ÿ×̣߬kñÿƯŒ‡ƒĂŸjº?ơÿµ¹#ÈÁçoHËz¸CÚ_Ù 2àÿ5Ơ₫5²Ê@+‡ăÿjåƯÍ!c ¶qø§Œ 77ĐJ äniûgcü%Ö₫cÄ@` “è;À̀ÎÆö?:È\YÚCî 7H?₫©BÆæ¿#Jƒ-¬₫˜/n€¹««¹ ¤8¸¹¾́A´zÿÙÁV°“;ÄÉÎ`íạ̈Ç̣pXÅÿưE<V‰ßÄ `•üMüöú‡xÙ¬2¿‰À*û›8¬r¿‰À*ÿ› ”~$‚̣oâ°ªü&H<ƠˆOí7A"hü&HÍßÄ`ƠúMü´$îo‚DĐÿ‡ø!:óßÙ‹Åo‚XZ₫CÜ¥“äÈ₫#áâúCâèøÛÿ³dµúB*üB°₫B2°ùB–³ưBrư !á₫…½9₫FvH\đ¿×é_‰ëü{Û[gÈƯvZ»ÿ–²ÿ-ưkrÿCNÎ2¯N¿³â‡ˆ\<œÜÿåÏÉÿ·ô¿ưÙÙ!Y¹₫ !Y¹ư®)ÄÉ èúŸºBÎÄÍÁÜí_Å`‡Äü½(ä>au·u₫«´́!¤ZÿBH¯ßÈñ÷ùÿkª,=\!ù»ÿyíAFî?üçSè ´Dù¶àd)f×öñ®AœÔ‹ywBx–fW7“Ù÷›k·ÇbưûÜ ×ñ´‘¬Ơmiºk±ẹgß-ˆ‘)ê]~O¦IÓ»](KSŸ'Kˆ7‘!¿bÖÛó{vñÓ ¶‡í€îU )tñàĂP+ƽóú$ëƯbjb"2Økœ±iZ_‰ƒtÂEßỆØ áÅ|6z¨%pñ¹„•É k³́"cÀE¹Å4o3@åÖ!ôÅ Ê æ:s‹Æ‰»íœS¥ưq| N­Ñ’ÿT›)UÿGc>¼RSïÍ~ăWFUñ~+¡µ<—“£ Q¾í†w© ăS«^íj} SSÊc]¹üO3è²rñ3–QÜ₫p'Ó!ÀLHU^–ñ·ă*1· XgÁ•Å Á̃û^ƧÍS€e¥rN ½6€Á±,¿&©˜‹‘؉º†\»%TÚ2U¡îÉV%éÿ+¢Km—vÉ,ÿäƯÍrU¦ñz†¦?«yFEW)AÍ!åđ ù Ÿ´ºH–`.ɇYÄüƠƯ›nC₫Q̉2ÊR{Ów³ÔPÓ³„ó™Ó6C—Hh#ñ̃•³:ʶÇsJÔœj0™+'x3ß|º0¸skñ˜z(§xßDíw2 œH—† Á5@ÿ=¬°́úY=nÁçJm&Ó·ƒ´^ÁÚ˜÷àzsụ1|ínÀ8(E@âúvW̃ˆ: Cx.©¸å(h2*´­8>“àÛ(̃Ưpîp/ÅÎQzS£z_‹&œ©̉„Ï̃W†n * A+<Ÿ~tO–NïZƯƠ ÂÉưËhEĂ™Ăº»«:”ĐƠŸèMZ¹̀¶ví™sp}ÉH MGc–C³Å̃¤÷S6¯í‰àسMJ ̉'*[hc99mbrîy9rÜÂơÅ;KÄæÊÁcD $¸ÔÊ`l†D{­™AËK O2L+L±ÔxÈXÂqc/đ‘ë7.°°cÙ)»Å v”ê¿5›Đ0™ó!—TçḄé_ÆØEûđ…Ö—Ø#á\ƯFe¸̀Ó¡I­è¬½ª¡x¬¿å+pÿ“°¬ƒ·±gi'v B íC/¶¿uÛ2Hư£sËÀĐú´¢£úœ+‰À.qTvÅh¼OGÊ£YÀípŸ,².+́‹ïbÄ yovµº£»Â§`¦|-ƒ]sYÏ-c̃Z{Œù\·¯F$b6U|¶]ȸÜ$•Ô¶ÏÖ‰˜Óe¼MKgư–‚ê¹<ÜsÍÀăă”Á¥Î ¶ôHÁƒWƯƯ3óô+(±®@„mÀ! Á‡o ÀΣ¹ÆS»hàâWĂÖ>̃Ÿ„7̀&vÉĐÅß Ïđ–‰QHl¢ăøßaEsÖ¡- †&”ªê'I¾F¶¤Akl_ÊZñy¯ )\ơ₫(ơ„{ÆĐà™••úµJ$Dgoˆ³̉1ëW=?aÈy°®syă¶ĂBB?x1’œÓ¦°’÷³ÀWơ`¢~±Vµ€æc±ÙF©3#R7ͪdÁoA”P…úÚIôú7Î Đ(>¢c/ &’#×8÷̣è¨ådơ ƯgÍHĐĂ0V•ríh­ks'`½¿k"ä .Ǻ¯­öTâ±½ ç;6́ *OË‹8$[)Q?¯7't]U˧™|ÅWơëơ`1ù>­‚½ïqI’ëeav<ÍßÉ-̉Tz·d¥ ÖđéœíäêR/±ü|„̀ù¦ÎpÂưrm÷5üˆÇ¹ ÍRù…Ù›k6­À"48y_ḍp;á"â˜1¯˜%ä‘î²̃åh¤®Ñ!̃â»á̀ç„É•cÜ¡ûe߇r¼*̀ë‚ÎHQ¹–Yôû| ªơÖ¥Åz`¦˜æ×™£èjÙ0Ư ĐË̉ˆ±-Fډģ·/I&7Ù—ZëW̉=Qëơ=R¤î›ûoøÁ£>Eᯇ>r¶Ư‘w¸b£à^¾âc2:/R‹yÓ>û½>ûTÉ%À…s«À[)²™-Tœ35Pƒ'Ù8¢¶7Üïïñö`À/ïÖfÚ•™ [€¤đÀcú²ˆøjÓpPêÀH ¤w½jæE2Ë–đ:zD̃Öx¦AÅØg›àDZ²ƠöôË‹–H‚ ¥Ç™20¦l•j^VẠ́ Y&ïæµ~¾Sœ?R¯xfùîắVâ(ư„géá;K « ¨ÎưËû&S¬œ'?\ĂÚïx7sệ̀–øÔnïÓ7á4Îâ«°RFÇY=\t åeßÈOjVaê0g2KÆØj}ñ–Á@I{åNư#¤´ẉà4OăT9Ÿd‘ƒs/'xƯ!®Á¤Ä¾^éA ¦U‰œnyRipí×ëá˜Û|MW»G¬´Ÿ¨Ï¾°¿|  ¿m:©éoÙåb†D@ øø&ÜvAUµS]ÉYTϲ­jmk+¡&\†ÊéF'íÁØĐ×uQIû>—8–’,®¿ưƯ•¼CU¹‘{ËơW E¤lÍøÖT7“Óí ÁIq¶ŒXºûu[¶̃k)ÊûY ăÂpègjZtœÍEÏn}ÿ`œÂF íGy"M߬̃e៰U3Ljh29öaëoPÊ÷ƒ‘°,”Ÿ†¯vÜ NT‰̃2sjßQc<₫#Tc»&Ïû]ízưγª7u•÷¦ÅÎ4pˆg OÆ&ö€!"‹^xΙ&O£—Đ„„ {́ˆú}p̃Ă5ÇØ»P1ơà$(B\Ïiÿ9î·œ›KÙ¬Ÿ¯+ß7×·˜bF_ôNÉZŸCÊW'¥p¥†0•Ơ½;.ç~¼£)Zî0̃‘Γ‹±¬y¿û¬ñªåâ¡@‰•üM€‰%·mû'₫v²»",ñ}d$©ùŒ¬ÿn8ÑÁ¦kSJÀ-=Z±uüù{ÖRR¡gO¡‹E5\¿bñá'Yû̉1TD5ưºÏÓ³¯U+»º%4r_Ñ×U9Ơê5 k¾́ } É4RÍëñ–-Jñ ™Æˆ'4ØF0É·̃óÚ¾fˆôtj'`)œ&Øđ–ăw₫~æî„ƯÈOqB°ßÙ=“ÅÖ}±¥gjk†G1ÑѲñûY³¥yE1HÍZçy´Èæà3G¢X‹ J8’‹e€»±1ṃ9—ÜôơØzßÈ=UbZ€¡¹)áĂÈ3ơ½>ÑŸLٸܟ†~̃Î9d°y¥ÿBáTtAÑú~¿:‡S76hT =ûñíY|²Ă«êHc‹28çg›¼Ur^Y$Rún÷ï †›:ÑÓ*E=K/_TMÊ#3÷cçĐÉ`<Íbj<ͦ#1Q†¢ô mÛ+Ÿ3D\ {Bù¤́W*’ǛԖ{Kw4hјcx×ÔäåLZEÊ1“’ªkO:EÀá´»/0¼[%Ái¦ a¾̃¹èiËÔÇT ö¯‘Ơ¹¨>èƒLüÔó‹”&£,{i‰§äÀÉô«HÈ“•_ï‡ưlDƒDkè}₫?1räï:•'¯¿¤éΟ3`22Ô₫Ø`²Z¯ö±.ªtôœË1vG~„##5[ÆvjY"6NÑ•«Åi8ÙÔ‡]ó'|£¦bÖ©é!aM@Í”w6Ÿ6«t3·sÙ&üà…éØ̀æHªƒ„5·‹œîœ…¥¥ v'.áYT¦Ô Ư~ụ́qW*̃í«£¿(Ù§ülÓ́„=G°œÙ¶x¸ø"¶ăLv'1ÊÂj]ỵYq:ÔÁ©5xL{i%+vP2?§Ă¼Ä½5vuÿÓ^7Ô…çÊêâÆ²Ë+ij5Óoá!V÷í7”˜ZP’†€—^¿ÊnŒr¯™`v?^œ« Ù_¬CÈKuëâ(­ú¶xÔåÍ»og̣"0†¤Y¶„z4ó@¹÷ư¸óYô¸óŒ­ù¨c4SCpúf‚È 1ơÜ‘NJ]*ó¯“olƠlw¤Î—?h$e1÷„Ơwh^î½ ÛïE¾(ß/Ơä{„#¡¨Î`ú:I€Vă9©BøªÉö#Àl„RÑ|/y€{|€*ØÊ«ñP—Fß!º'€€P€µ%D¤̃ R8'Óï«BUè;sâÿU”×çÎ7Ó–X³-¼mÓ̀Ư œ˜à@]’VÑ ÁĂáëœB[¶Ï" hÚ5JzAFÏÆf¢gƒÖóë°œ©|M9}ó—5% ¢-†øF̉6xơ›½÷PÙ:LSÉ”Ơ4¦‰Ud‰Ja¥”\«eߪ<ƒ» ¾\SÀ£́Î>nè‹Ư)ÅDăùynt&1#¾›PaĐ'Hetß!²(Ño¿i‰!K&uôÙ`'¾ŒT́Ăk×Y¸]€£!ñŒ´«Ưlûex˜¹̃@nö ¼Ck 0ænö9Èës7Á4¬¨A½cˆ¤v`DËĂúS̉BB CPŸ%œ ‰pEơíGV¨¯̉ÁT?6Ă]¨5çI‘IµúÏ h¬,.ẩă¨¯÷x̉0Ö• «KOVO‘½Y—óÀ!ªV>ËÎlSo!I'_‘ªwíó¹ ©HñdÚ¼WI«ôOàKïöHñ/1GBÚÑo×ûaùBQ”F~áÎß‹½́ÑMC©6Øéå Ï'±C¤Đ€«}¿[ă˜]Ê™{ϧ=dr̉[â\50.—„¬ŒNÎ|äÚØ\Nç´ÖÜi{Öè.ZíFĐyÛ5à-×ȯă;¥ñ?rZ i…Ă6ĂœÅÄu“`vT ƠzêMí•·^‰̃`¥Ï̉¿æÍ™²s‡¢¾ç4?S₫x̀ĂƯ_ü¡¿¨u¢*¢¤+¬£™›î+™Ï¢ëuđy»H,±æÊÜw*ƠU< ñŒÄiH ç§®ùyP¶đÀ¥¥É|À|&WØûJ0–Ö–V¦©bb™àÖ¼¥/øyHnO{Ë̀¿5Ûœc€Å¼[‰à¥&¨XSÚ]ư0-?•¦{Åüâ¾­̃ŸgîƒÙÈjAb‘Úhđ9 ]PĐ” –©?ö½Q×Y¥Ư`Ú++m¤ù耦®ÂJw»“ÙJˆ„B¬́Xj×"*#ĐA¿o‡¦}b¹ca…Ów¤·0ä×O”‘‘+)/9ÂöÄU-ÜÍ,y$­ÚjxĐ4w˜?²ÉÁËâæoywYxGøß_éw ´ósÖk¡̀Y³†éÊ}ùiz4zç4Lư1¯Q4̉”Ëû:—ç$;³&ˆĐC_Œ®æ¬R¾Ư¤duøƯimI*uưAÖœ6đ×eƒø¥t÷Mo Û;O ¦¤J 5Ỵ̈L®ºNå«yåưÂÉæ³Î1Z”ă¼iA4€½÷BÇô^xP ưèv"ƯkQd̃øiÖŒc(9̉¸•_xĐE4´OlẮˆaâe{߸/ÍŒq²[…f VJx̃¿[âi”WZ—Á›Ã_DÈÚÄÖ‹r%~Ư@`åjûœÙ® @ơÁé‡Ù{c›ïœ‚Đ`„Æ \•ǴÆ*¥R¦ÂơÚ rUƯ­¯&áj†Ëtđú©å Ï”5Mp´ÈƯ«ĂëWE’ˆï|ÉƯzk9f(#_ª|̃dj̃¾y8ă&ÈÜñøv?â~90'rÜeơ0TOwºVåR¸ü³!Óf„‹¿Ơú–%'>g’‡̀böɶ»ô¬ÂÙëè™!N¤çiçÊøÉn~̣¸Êƒàû0^¶>¼k…óC± ̀g:»×ë£2Óº̃ê½§ÏöaŸËÜ=^7S*–Ç ¿ï©D®†5l̀˜³Í¦ä3ö,é^',.EÑôiE½Ñ„Ÿ¿‘:(+b¾3ˆ=KIÛ}4ÁÎe¹7\¶øñæ*™™]ĐÈ́ăÁ¨Ù]‚o†zjƒ‘æÑ¹¡ëȲjê5°ÙÚf½Â ¹Ü§ôV¹âEåX„BY¬ÜlUd4fú¨Ḯ{̣,pe­‡qRïRùf̉´JA!Çh‘ÎFÄt£ĂáỔÎtLçƠ™]Îv3îèÈpŸ¢ÀX$…;Ù (,(TÖÄ0²§2²‡-v{¶-½RèÊVŒ!»ÛréÅÀî–ö¢ 5»öôsro­VˆF‹ÈHœ7‘Ưïew‘Ư¬™ˆ4I©g”GOç&éV-Zܨˆ®̣ßbÜ‹ăVǦÿœUäs®»Œq†*8đûéÚ„*^wŸ)«ô‰¸̀÷…Ưáë¾æs<ù!c™Î_) T¸Ù| ̃h-æùñ f́z&&F?Ü·Ơ_ÖßP~ø)[ñ&'´2’ª/Ä?‹,ɤÂ+£tZ—…¬ù˜S`mASĐÑp̀7u¢Ë¼kÿØOS¸(Úc-₫IF@öÊ0‰(ñîRÖKVß₫úIöE~J„AEuÀM¨¥(» —ê]TÉ™«³L›é>F¢jávÈ̃°'Øà‡€¢Í‚¦_i;Ø€ûÛ§uUØK%:ZĨ)gÂ:ÁôÍ¡â½x¨̣;´Û [^eºŸ5)7ErWÙï¬~|à¿ê àÁ[¥¢(„35ÚaX>¦]´áñḷ5zEÓ‡(n ˜Dコă{¹½ˆBËߺRk̃྽ß|L»=¿{Ø.é]’›ńN|nƯIKï°‘ØqiÊ’wܲ(7̃-1Uoj/¨/ÏFrV*nȺÔ4á¥é®l²'á<§›đ|›oŸœ’¦èù\—¿­\>„ê5H¿ÖÎ₫nÏè§/ÆvĂYZèám÷­‰ằPêđlÓÀ¬ÑNsÔ2×ä(áÜWS̉Á×—E¼“S9˜…ŸÖ×9B­†U°«Ñ³àhEîÛ^s·ZOÚ>U¶&¯‡¶Xđ¤̀ &¡åöY¬Ëçß/ú*ö3‹bɬ”D¥öu’¦öEé.Qá0`ÏdÅà)sa_Ê¡(/̀ÀĂ–bœXïx<Ø4¯ưt»Á[Ç,hCưp8:å¾…øÆnăzœé!Ôú{ÛO¤cE¾—5øâÖ 8• 賸Ơ¹Ë°_Îây ï6J0¯ çiäƒ+ÓØ î£y½‘*·µÆùLĐ+s‘½lŸ̀·Đ 1lWŸé¹"Mi1ó˜)9C¤HÓQQÀVNC]76œoÆ‹7 ¾V]ñÉ5ÿÈLîø&ó¶+,R¢—„Ÿ₫¼@c“¬qå"AiGk¶̣9À°ÑÅ:,̉…?¨°vç&ྭ‘Œ6‰ø§÷X(°‰SÔöt8’̣dnÑEŒ¿ó₫y.æ̉¼#Ưº—~'•̀V! Çá1®„ưíËñ›DëĐÏ»ßYvơÄƠûÜÅ;‚EDNk“^9’b$S`E©›Ü*Ôén¶,ƯR˜LRÖÊ·Ö/åÉÚ™äƠÈ78Œ¸fœaơR›)ăèmÁºå”(œMà¤Jt}çÛø çà$Y†ơkăng†̣’[ÁṛÜK`)ú棗’Ôñ1Kxæ4¯ *#§/y ­c̉Tdˤ̣Ú’±™̃$s®óÆëYÚJD/èÇA+aiPŒ ̣ …훸¼ØÑ¤́³Äu‡¼#‡ă“WÛ!M=í´8›|I,Å…ëö7L ŒƯŸ”u2ư¹ºÎ6YÖṛÍtÀÄ’₫f]®ª ́ÜƠî|y}¶́W(kqtEñà•3̃?aEóª,çÅøơléÅÊ››WÉ:¶œ¦ùô_pXå†:g3v“:¯ÏµQ^®&¦4>qP "`X¼ÂlÖ¯¼S_@Ñ„AWü9ˆ¦Û#T¿Aö¨—˜Hë÷~yóù/¡ă´±ÀQ†öùñ@–§ă'Tfˆnq¯Ơó¬}úÔy2üÜë9ToJ×ÜẲµü½­ ïzúŒ+q`₫=B½₫¾]köÈ́̃ƒá g¶ ̉t™J¶PăÁ6¡«;-ư ‹NNLí·l~iA÷oúî‰æ\>^~PƯƯœdÖmWRÔ’“°’ ‘ƠxE`pøǽ2+Yúù9c,¬Û3lÆBơĂ;e˜Wö₫.„àP®xÆNÄA94ô(Q5µở,!zßtwÆ·½̃íVÑüB±{OJy%(ä?Tº%€’¥ˆ2æ×` ¿êx„°P“lx\ˈ>ñ°b(b74Ă0}ֱ׳6vw <àXúÛP¥FÏêm™Øøoí®Í°ÎxÑ«ö‘D iêƯư…îf¢œ—qµ}Fȵ±hÊôu;#á{8Ú%)ä—¾ÁµøKK_Kj̀â ^¥é')Éboˆ&MD(ø§–n>'„Ä–û̉èâ{Ơ»˜­}½ñL¦1Ǥ¾K±çµè-¥–œ₫R ûÈ₫>̀ˆñ(ç×»)³ @"ƒF;â\ß. ªƯ£}¤_́—o½ûăF¡§ö-‚wƱâCOl¬>JL+}ÆT“DƠ?W a»+&üDy´•,÷dHe¼5N2§éSCñx¥„Dz‚ £¬ă»öw™t©ƠŸµ—ơ”NsƯưƯE4ß$½”íĐg}´ÖUWÄsº‹qK`|•;Kˆ£r“:£/ê‘Yè¸/¦A±ƒ₫8„®ß!èÈy’ÄÜa;º°!Ü·ặ3”ªd›đ-A’¼‰b‰$àäṬʉG>ø ³xuûŸ â«“û&c(X4“k‚pƠꔯ J‰¬”IQ8²ÈĂ˜ ˆîÅœí-AÛ³¡ào®ÓÅñ~Q‹Ó"40¡k̀'+đC#]7ñÙJ¨8AY9Fqk%·ï'j6~ ô´ï¬‹§6¢MFiç5>‚Ë›ÙǪ†êΧT¾nyŸ¶6|ÖïLCíd |Ο̣m¯é÷*•Æk6»¤=<²Œ<–/*jGŸ¬Ñ8ôÆÇ^9ü>)V¤nZz“¶…<:¢^!VêyäÇ;½E¡™ñơj;‡2Êl¶¶wW%äg´üĐ ¹s[>L®n²“5³à#Ù€»„B/`ëÔ ;^ÀS=ñ&+'ËC̣Á—ñe=ˆ öC‰÷À¯™ËÍN̉~‡"aÈF’½‚sx{i­œ×.·W<™cº`„×PS¦û7̉{‚WóXŸöÛ^îVK&f}¥Ï|î:ô4— £!S92R¯Ö8e:ÂnĐPÁ+áª{¤ÙŒçˆl4½‡–ë]yßLA2@üĐDëŸ)ä_ye‡qöÆă[Ųù§ơ©W÷®ÂƒÂ¢»h³0ü®€U¹.ñ Ë47]sÛ€QwüüRø!#¯br²A=晦øỢÎy l­=-±-ÅAÆ̉jZtJÆÈ1É{‚N¡fDx’÷QøåSßW6ư»á¨¦¾µÚ•©‹²o™­¹"Ï-¶ –4<ø̀hD²l8UYÁWt§uGsM±}ÙƯ¹Ë’±øqq‚l±ªÓxQ…ûÈ´g!®R_$ÄW%QƯwøƯ÷×E½Û×),1V"æ{¦ï ̣FøØhÖ S>´·ƯđƯVó£Llïon…æ’öp4ß&ù:3»H"¾‰v– ¦&̀̃a¼́hâlÁĂ›¯ùº+}5̣¡ ÑÁà#P$÷Éâ-é~óhu瘘Ơ[¨̣ß§Cæ·¹{v¡QiŸ́puÜÖBQ™Ùouq‡J>¸¼BÿAl²…LDôÑDA¬c ưÎ`ir•o= á4."Ug+R̀Ô₫ơµ8/̣ÏŸ#³ïzX+Jèë´œ9̀c ïbÎGƤÙømÛ5vÙˆ’s ïƒn¾1mñ0øˆ:¦àâ–$wäPªà!¨Êvrx‚˜Ơí—êđK™đ'ªúRTưŒ4:‚åWEáÂ…od (æ¦hz¥´Ä)vÑPøn%÷̉Ít»ø›k£OÿTÁÅ–À—̃{5uŒäøæI¡Ư· Ăơ´d©ñˆr‰¹£ÂA5¯f#ÑăÊe‰r¾8\>r9¢7JăµQăưƒ{ Áñ£ ;î^Ÿ[JÎ`aåR¬ÙOƯ.{¨{E?dÔH¹m›ê"’¥Đ¸:̃†Åñ­zåăS=S)ÅÔăèàÓ{¢}‰đB ‚5̉Å#f~û‘́.~Oæ¡j k”«K8»d8ØĐA{ëÅÎÄo?đÆ›aÙâC¥Cđé„l\ö„NBÿZE‹9t /Bä"±ạîfŒ EïÑÏí"ÏđÆ\… âCmù™©Qtm‚üm‹ăÑm;ëè˜(Eù`>ëI"]¤ˆ.hôKÚ¥’ü/Øđ—w[ˆ/»¹˜·U´ÀL5ƒÖ™lË»–́ Ûuq¥W7¯zUÆƯĂ–é.pŸ.²‰w 4dñCÜOWp¦AùUôæmø‚z)ĨF̀pj¡₫„́³NH§cƯ|Nă@ÓäP¢¥%û·5Z(Ơ.–v JO|ÁÀâÔ‰Îđư;]ƠË "VFZ‹¶AEú¸§¸Øåxé§*ô öáää.o¬ œùu ,6_i{‘;Táñ<µC™Çª;ç&3[H€’;—z|ø"́ùqÄ•TÛœÑñç&fï^— MÎÊ¿̉u À́M-„ESP=>p=¹•¸ e†±âëŸ4jÔÆ—×a(,ÄCnÇ̉~7m²‰UhAØ>úØÔkă\—ñtƠ$Ôơʇƒ8FWëîÙ,¸Ơºét£HƠj ¸èĐFÜÀ6ÈØ3a>vÄcfË€‚'>$>¶©n+”«Å^&ë.äơ B³Ë#ỒÎè{6-WÂÅ̉ê "X碆9°-k £Í¹Ư^\kX®_!b\Ÿ…2àï7tÂo¯4̣±·0Îv_Ù³æô¹‡ëGơœß±• G‹¶%åáó™NG©u¹í"²ïi¶•) M¶ưZåÿœ¼·‹mj¯wà/zª¥;ûAk(,?†Ưs„™/OG̀”fÄÏ{ơÉè-Ê´MAÔ.ËA÷­Û¨_ÀÎDÑ©ª6/̣áD€ÎY.]’mZh«];ëîe©ØÍá‘«smĂîY¬3¯'óưĂÀ£ÄHdÀmǪlOª&½ŸP&éô†Û€[79ñ¢‹àQ³ÿĂêÀ"«ÿË|Î:ơ9ÁÑ´½2¸Á}e·̀p036l¼u˜ÙeçHomhƯ¥7(¼uÈ Söḿ¸bÛ7h€P2Úöb₫ÚÄ¢êÓn²¯Sƒ)ä)Î÷ä•鬲vKÉe'na]Ơ¬"1ư.œéî–Èơ$‡¤Aó¥Ü¢Ơ9óĂ!Û°YX¦AÔ‘‰Ø ¦Q”]±4Ñ ¥,ªÓo|Œ»̉[³V¯³SE³³Skp̣¹ –ܽÓF åÓ ™?(}Ô)êéú Jj2H Ư'«`Æ7áDi™$ß¹¦ÓúQ„m‹*@ÇđZ‡Gw[ùåËêyÇ ]Â>ÿYB÷©¿d)A4S,·9~ aê©đ/c…î·œÔ(Ưéö„€4Œoí́€GW6S=ÿ–n¡%Rœ‘í6́Ù«dÖ#ôc»7EDÏTÔL®è“Ù½}|xF¸:W7Ùg0:{ưs3¿D0p×Dy¿ \1ÜrËZÍßN/ºˆùH\9~̃a÷̀üÀgM*iѽrƒ‰x`/Eذ²7â'µç×TZ|ˆæ\ ]}cđ÷Ÿ½¯*јÍưNú¨‹æ}ª̀q)EæhfA`˜¿ÙùÅ[‹â1˜·v§To)öDpÚÖsú‡>M5â€ẹ̈MJ”‡u2ùĐÁ V{­¦CÊ׳Y„á֘ȭ+kØo6Y•m×+@‡EÑgù×½Ï+´ƠÀÑm tn•Í‘É ăø‰ÓÉƠ|w_Æ&F¹Uߣ̣á~ÊÍđ.ùµ ¿Ö÷ä/¢$̀åKLÎFmÁC¬b‚ Ó–e£ë1n§ÅWD7ƒ ØÁ ë›üáûw0FÅWïŒøU¥¨)±X" ữHXxJ@Ê£y3&í.S©xK€X×̣ÔKÓ†mßK'é‡^ƒÆ×´`R76/ÿÉ…]Å4ï7 C̉¯ƒ¨\¹˺c^¹BMXÉ2éû` :µ†£&-µ°fb}’O₫1Â9˜á²R“Ûß(omÔb-ưNØơUW`öp‘2mE¾1£ø­̃«¥7ôºk₫Ú³cæÆEDRµ{,(̀=ĐrËf»VKVLLÙ8[YĂn ’]ë¾ü‡¬±{,+ ÊÙª4¼SàǬ́Zf–ƯdîR5O8+ßđœ’É’~9“bI¾œM~ŒíF*œk̉'˜Â§wåk±˜!óßÅ`Nhî¬ÊợĂ,†1°=Ǿ´ ÜL©¨à»Öz(ÏR+¾ ’øƯG•é‰ z‘Ư‚~.Ôuà¬%ª0¦³àtêxn*¬/Ûéñg·àÁ÷±DŒ.5Ådz‚¶á+†Æ"º£Rä6±Mûd,?>Ü^̣å@K¬ÇUV­ó½†zªjŒ÷aRñ|xÎwüjâ˯b{ˆcXä„U>Đi˜‡\¢5Ôeü °C Ư¿êĆŒG–ÅĂ;ùÈ­B‚>®ÔF%dT‘‡ét©JèdíM¸¤r¸KY·´Û=khRư­?ẈŒdº¼ÛpäMËi 7$Jh§ă¤ÂǴNáụ̈ <¤c0e¨?KÁô^́ïµ~'‘«b†ÀÁ₫&)M©s„×Iƒh¥Æ$ứűµRƒùX[Xư$…T_†±&Hđm¹đó#‰Zzú懯Ễơ¹#,ù;] }{ºá*ȶ½¬V+l@} _( ÑĐjëcüG̉£º/FôẺ: ÎΤbÔâ~E¯ í a×Êî\_µlĂïm/¦ĐúçkToj¢ñ%¦jÜ5Ô8.·}¯Z̀N¹M4'00ÈÁTR3g»hê·Î«•đ“Cöc´¾ ưĐæÀDFܦÏzRư)ÚÚxwJÀ_U^Ztâ%ag£Ç»nû&¿ĂjqÉÑk†ưíÛz5÷²ün›gƠÛ*/ÅnU‡&Œ3̉²$É)p×JÉÜơ;Fåå Ôͨ™fơ5#]Åê–g¦ëµ«ŒDđ`ođ®×g¹AA›&O‚€´)´(;Oa0Q;uKY%œ{½đçÛ³fïª̃BƠÁ¼»r+NS ‰fÇUGT%3hơYdKúŸ[x|óJTë· ¿ŒøÓh<.|}†Yå^*e.M!b“É4¨â$µN8øPƒÚ؆1T³µœđø}÷¤`4ÚlŸ/%^hø”#Szt¥´ƯîáÙ‡́ÜVùÂSHl“‰cïµü4Ë=dº>đ÷Å÷ ¶Q9} ¸~̉Đ8„g˧*Á!tåKZ¢Sñk˜ïĐV̉ Cv±I¨Îë¾èˆ}}gíA7;÷Œ̃Öù¿—ºå*½f₫Û£qƪk÷6¥o²̀׿+nD̀ E,æ¿§Đ¶î)%Rí°d gÏî5× cÇẒúĂb¶ÍÄyØ7Ù•‚Jy¨æ[ºÀw÷ó¯[ .µNߦC_× +·/»½Ăö́ÇIü,?®mû-¢Z»Î€5oj„ïuUƒ…‚Ví’ø,ÙcÜÛ2½»ºÆ.KŒơª½É•̣æ}ë˨M»¬azÑÓ«›[jùmËĉ‹\îÉWŒzS¸¬¡•©‘°óÎVÜ8³+6ï ơ¶ï |N->NµŒ®IÀTÁÅ£Á/!á|zî¡”0rô?¢ ¥×øzœ;øNÀ7®ùgÈ›q¾’81ßpƠĐOüƠ]å³ĐÛr~I «àÿ¹¾~ endstream endobj 609 0 obj << /Type /ObjStm /N 100 /First 906 /Length 3548 /Filter /FlateDecode >> stream xÚí\ës·ÿî¿BÛ¹Ăêưa:I”@ ÊđÁ$ ñűSÛi¡ưưi_̃€ïܹw˜‰µZ­Vç¡ó̉‘6Ö&˜5’IépULi…«fÚ\ 3Năj™ơttïY×À¢Â3™F¬Èb$‹•—¨(&u ͤf “Nâ-k™ôZ“ÁPÏdtôV`Jxj‰LɈ‘jÂ3‹ÇÊ( 逬ƠÀ *‡Q­3Ly¼œe*€pi!0 óLKI¯¦•¦–È´6~d½±D%ĐƠ‰L¯˜Ntzđ!j1LGê-3‚€9#-ơñ̀(ƒŒÔ™11Œl`ŸÄ[A2ăúÅLW-ú™âlÀđÔte ­µxj Ä>ŒLÁÈQh‰’úáƠ0ÀI,Á'1¿NhT€î˜Sà„m†̃B‹#₫Dtö܈x= D¹6Ô90/µD†.hÆ,z€ô¦7‚Zóüd¼Đ"ñÈ[‚ŒGÁÅ‘ƒ€ù) éQ€, R̉[Tñ5@AIE¤Å"d ̀ě1B~$/F¥G ‰* PA~ͳ¥HĐĐ.¥ÊN“p’ä9Đ'•‚Ô; aT&ĐS¡ Øaz¥EîI œ!16˜t‡ÙW‰§Xi4éô@BĂ‘`̃°‡‘hBRˆ$è˜q†́ƒZÍ€1p£»wGüäóeÉø½Ùl¾ñă«w«t8™}ñûóÅY¹`oH_ÅÛ^®ØD!5iM(obA”p…ưî±»w?füÁüdÎø>ûAÙO?đwK˜Á”°‚)£- ¥ĂÂô®pPf0¬Æf˜̣¶0Máaù ˜…Ñ:U(ŒPaª±0¶C¦ôŒ̀Fúv -¨‹}çUAºbfößăÚo¦2ܤt…†‚Bx Đ H‹(z&Sí¦•…!\Ă´à°4›aêÁ4¢pˆ L ¯ä00ëéÔ¢Pđ¢ L ©âF˜qG e„=°-HåaÜ  ¡'>¡ G£‡ wX˜_ahµ•ƒ¨I v6P,P„¯†8ùA‰ô¾P±J'â‰A@VJ‚P­đ#̃®Ç₫H±#˜ÖR´6‘dĂ0 k΀’É´ºĐÁ*?ÚQµ&Q~âf“çwÄXe ­[‹gµ*´ĂrVêÂëV3­’¨8¤³B̉´̀JYéu&&ª‚ÖR LèD™A" fElÉ4ˆJ¢–Ă‚ô²Đ®Măá§u¦…÷­Ơ3.P46,L‹À6´fÏXøi«†…©ca[«g ‚K7hÔe2ÇØZ=£]œÔ¸Iazkö?# 5ƒF]X AvfSÚ‡ÙÜ HMB[„Ö ’d6¶¤If]bAÔ€40­fb%^ ÿ1¤ Ó ½mEVCdc0èIM%®̉µ"«Idă Á¥&‰U­Ơ$±=1ß H\v'SØù!ăY60­ÓTÁ¥ÔCÊ‘…h‰¤•}OÎ`W‘̣Tàct)¯øẠ1 LDĐN´â£°¤Úè)DYƶZ¢$É“29kWÈNÔÜt!B$đyñăAA"Ær¾ó$V}±Ghí@"å#B«˜̉[,â  á­Lë¼`o±ß Ñí"¼UèD?HÓư  µ[óƒ<5r1rHX—È ²$Úû!£¬Il'Á…$‰ïsÏ;J6ÅB©Ö¼Â¾ûTÓõgoÂPÁ3₫êơïØ9Á«ÀfWÓéÛ-»̀g«ï»g!w?ÀúÁWUÚ”©ë´”»àe~´˜Ÿ— ‡ñ£ưÆOÊO+öv-GăåˆïF9[-í•àubÄr~µ8-—ió&5=)Ï&ăûóO™[”“‚ÇcqZR¦£ñCĐ¾Sî¾pÚ{"”hë)_muuƠƠW×P]cº̉¦S¾Êêª̣UVí²j—¹ưíí7°ë•±: ï%|xŸsÓ»ÙàÀ–­s[˜BÁ©‡AÂÎz··©ÿ¦# ·nˆ°³!Ù“$’7NÄÙL%‰(y·¤€¨ArÅ5•ØåE¦¶h)oâư K/±§̉Y›y¬‚µrCÆóŒ¤½Ø$-)zR~W¦XÂÙtvT°¤ès7aWûcHaèÎV–ˆBƯÓi·³o¤á´ƒôØÄ†ë́!s«œ&NE ßɉCO°¿¦½î[åÇiBÉíÛÑ8¨Â¦Ă#ô XÙªL=°¢6)7{Kï‘j@æ9±º3 EÂÈơ»›it¤grs<—¹KÚ­w{jÔ}UV@ºOĐ­v›²‹[.3,9)tUæ–Lºq Ñtf#=sx†""Q’úib2R‰2½­’BĐ©U“ßË#ç2óÄËzôÜ/•Rà¡Zkriđ.¾¬¯1 Wó–jXˆvçÛË® Ư¡A«í™Ÿă`~¶0ơT5O2¹J’½lv¿ÿnÿ7u€‰g©Ạ̈¤q¹¤]ªă f9—¹ÅÛôi ˆ™Jí´™‰³Ôî’æâ=E@€„%ÀY?_µPpqt(ßyÔ\Só6ÉA Ñ¡I&ÎTPqÜ)wL(äN Ä t~/‰œ ]"Ö%È$ṭ &ơªê ñLn>¬Gµ.¬jG vîÓöÎ=L*uBX#—¡×f6åz*¿ óÿ°â$iHWơ}ÿOæ´̉ÖTf=Ïå-â‹˶6%m %Ư#¡˜™*̣i‰jºTf¥©u{ult¾û¬ƒà&Ôú~ê ,ú-= ‚@ƯØy¢‚ÊÑÑO•́¼!«~Ú‘¶:ÓƠlơmy~·]·F¹?Ù)ªOÎ![ø†Đëµ ¾´đ©¾ ©Q¦ṇ̃„Üdá3dHV:Œ[ñ-t@l-nÄïÂö]Ø6 […Ä b†³×EJmeÎ ?^—)Zi ³ƠûÊ`̉RPĂé4IgÖ©Ơ×Ï!h.)ÛÚë±iuE_dˆ¹w®·½Lº7ÚÍ~KYØÁ,Q %1?•tŸi¥UT¨éti…ƒ¤&åx ?êiªÓ‡ àI U›Ă>}‚-IYuÀg$œ.$FR=àLÓ34`+ÆU€qP_UƠ\ºĐÎÁér£K¾Q!-QỷU¦ »3¿Ôº6ë‘ÊÜ’g%½×ôÍÏ%< ̃Ơ,µÏ2‡r=•o;9J?́—ËÓÅär5_ätÄÓñeK~đôѳí=¹/Ú§ăKfr‡û)·~\¸£’R̉–’'÷–§)µÑso|ù°œ|8_Q> ù2?»#éá£Ơx:9½7û0-†?^•/1PñWƠKĐŒq>^Pă¾Ç÷ùÊåÇ|̀Oùé|:Ÿñ’Oùœ_̣%_ñ?ùç3~ŒêtJº¯§€úÉ}yüđÙÁc"÷•T›éEổçH:îˆ̃ØKï=~?Ñü3¨~Ạ̀Gü~ÈŸ$ñçà Á_̣ßøkđă8rn¤¡ø{₫üưỴ÷S₫$ü?ççŸ/ÏËŸđàÛŸñÙdV‚s”—ü²\Lægü¾?—åŸè¹œ|gW狲䫿æü \₫‹âŸùßåb¾În½ »÷^ụ̈đé>ØưäQŸxéF¼Lø »ơḾ¾#MÍp¯:üÖ²ËïLü:EvƯ{ẓ*SÔ#@È"åvD‘³[Qä·¡èèÙ£Ă“‡‰¢¸™ l̀TÁ*ïh̀VÅmzư`ïÙod̉÷É>ªªñ65*îb/9›4üqGÇŸ­iù«¤çăå LX~„¿[ŒO?–«iù~U×IûkÛx:¿¸w¬Byq6^ọ́«ñ´2d#È>Üd*₫Ưc,h5Oµ º± \ÍWåÙ»iêPßä>é®mÏÙâ\L2æ­íYN å ô¥ 2[™üưGûG‡¤±Ï{Ä[7â­ƯN¤áᮥ¡–…ĂÆ̉g Ø‘ÿºqß`ÚÍV¦ưÅ“ư£__‚­Ç‡_¤̉·²±á́MzVó•xz|›ï ˜&öµ|£¸b‘"‹̀­óe+ñôñó§¿¾J|99éăŒ"¤ÓG±à…ë0FÊ5ÆĐmĂ¥Tcn0@Çklø’øZ›IM—·áÇƠ {fËÓù¢́cÍVæààơăW ÷Lå;#}ékc¿ÄĐí·¨b¨¹É´­·•×¹÷́ä`ï÷ºwÖah¢#} ‘½m©ƒrü3?jD_Ă₫c ?1YœNËÓùåçÅ:yv++úâÁÉ̃C»~¡6Y¦­¾•Lÿ3Ÿú¸cIko#freă>+G´½W­ƯéÍöwvuñ3ù0û&z9½ZvÜè:Øñ•=^̣†nt—v+»₫󳃽/ÓD÷øKWÍ36=]>§}«y₫ª·ü¹ă-¯¯ŒÚuÑơy«M]ÇĐƯË|C¸²Æ₫Ê‹®3ºÇQt#P#H¼?^–éHÀơơ÷Ú´¤ÿήLËñ‰‡?W7Ra¬ß&g«óeú7©ïÉüÅ (Ÿ•LnÎơơñu|̀u|h’7ă£E/>ÿ„Ös} endstream endobj 657 0 obj << /Type /ObjStm /N 100 /First 882 /Length 2104 /Filter /FlateDecode >> stream xÚ­Y]o7|ß_1ï‡ƒÈæ7đI‘í³-K¶”Ø̣àÄ‹‹€À $9Èưûg8ÓÓTkl ~0†³"«Å®™Úu.ƒr,Å!``1(À©ûâ1@!! :CE‹€‚’-D ²êÊ!aäbËÎeǗËeü3˜èê<›‚|U" # đ©7fp(Åù„Éÿ¤p¨ÛET碩ó€\iRX¨èw¡Và1 ̃ÔÂêNª‚ÎC]›đw‡Möî\Ơ™0Ùa“u+bzŸÂΤ  5ùˆ;‡̣U^‡m£.Z çq+@IMÂH #)„‘[ ƯQÁyWR‚ aÔB!6„ [&¢ƒê@©„ ©* ¡B†¡BÁ–ë™E5BE[¨°ÅR‚P‘ Rưë. BEÈúÍgL†P1Tv£Ădú ‡A2„9ÔṿH ¡HÑ2iH#)„J#)„J5B%çQ<„J~́8RÀß ¤P „J K*%_jŸ)BaÇ XÅâ¤Ñ×hj8)[ÆÇ0“3ü„–‚ ©́¾ûnwp₫ÿ?÷ĂÁñƠ§ÛƯÁÛÏ¿̃·ơC»;øÏ‡›}ưËppxñßg'Gÿ:|ơê¹5»qúÑ₫æ·ëË?o¯®![„ußàóËë›ÛĂß?\CÿƯÁË«›Ÿ.?̃₫~©ư8ơûïÀ₫ôôÉÉù»‰öüớáá́§gÏ_?ÙË]r(üµä6?œüưÓĂ³ŸÎ@₫FÓ]Ø‘[»"·äW[/ÓÜó«‹O—¿]}Üöáå=?:}YOâ&…ÿB5v¥Å·¨æâƠÑéëQÍÛ—ª:wº²vϪZ©“¾A='/̃œ¼~7Ös~®Vt§S­»·"×Wä^Ñññûïªoß¾Ơê w×›U=~u`d¿@OÎÎ/j9ïƠrh[°*ç^ºxz~ø¬¡Nđ_8œ5}ü‡óĂÙñáÓÇz7…;ƯëÊ}n"óåœ~øß₫fwpxơäq‡ûë}…Ö”/.?̃ ?H O—ñOCn†ñÈk0¨×_遼«™¢]Ëtơ®]c»–Çs„†Vh±}C»æÇs¤¦EjÙ´«o×¶ÏBç(6âR»NukÚu|h!Ù|ñ<́}5+~a­³óäÆ[ăô¤kÛkjgW&ăTW‡ùúóí—Ÿ*́ØÑäí‘[[z̀ØăƯÄ–µ—·́ñ×öôy‚gR{s,û™ï¯÷Ơđ*ZƯ^¼ăê¸±Úæ6ñdÿ7—ÔaÆr«~PæÏ7b₫Â6r“]¿Æo+uæ»IÛÄ”…Ä$Y”¡µ<&(%È«½¾zÄdmµăƠV¬^¶4r×ï:ë ¶RÚô¼AêÌLâJ$ l#‰wKt%ñê°¹Ú­¶ë¦vî±ÄÍƠ^l̃hXlà6±„ôºØÁlay!dĐ,àÙ>mb Í-àư&–°€×,àÙ̃na9a¯YÀ³\̃Äđ[À…M,a§±!mb‰w‚Ó̃ ;6;}₫Ú°œ‚EÜ÷´Ù÷$ú̃i}OÜ÷´Ù÷$ú´¾'î{º§ïÛj­Ó-wºM’oàùÁÖ?s™Óă'™¨|Ïɰ̉$3ƒƠzͲ¬ƯZm„¬æË0yKx@­Ë°LØÄ0 {ÀĐ&–8£yÀ, R6°¨ÅT2cÅM,ác4¬ÀXNÇWÏuu«yW›idH‘ß–2§¾¿è¯Mâ´G]Ú[H&J-U§=ể^¿zmỷ̉qÚ£.íuX"íéuqÚ£.íIéHËwÄùº|׃x‰L/K™ă1P—^|O防óÿL2Qjq‹8øQüúƠ¢`-ø?ê‚_µv¼^Ç@êc`‡%¼£†Å̃ẹ̀]‡’À̉Ïiº´×cy¥9Óui¯ÇĐ̉qÚ£.íuX"í‘–öˆÓui¯Ç†Đ̉qÚ£.íơXë´GZÚ#N{ä7;]¤=̉̉qÚ#wOß·ƠZ§s¾£.ßu6yey€4›ÏeN6Ÿ¿ñÍ)zNvD—–¶{­×8ùQ—üºƠ"ù‘–üˆ“uɯÇPëâäG]̣ë´Ó²qÖ£.ë‘Èz$₫× ›”ŸCø=X„ÔEBù³-ë‚çŸèJ+~ƒ¢ÍW+'BêáB̉~ÉÓº“!u‰°[-!i‰8R—{,áµ.N„Ô%ÂK¼´DHœ©K„=–x?h‰8Ú.J,+!i‰Đr"´]"́±„7´Dh9Ú.ÊV³Z"´…xơ=¿·³Đ HÛĐæÅ6§­Ÿ»S̃H’RxcîYưGF›#SṽḤv¥mv¼Úê«'MsĐV/n°)om7&%ăê¸Ư™Hüư»l²ß endstream endobj 674 0 obj << /Producer (pdfTeX-1.40.25) /Creator (TeX) /CreationDate (D:20260103035509Z) /ModDate (D:20260103035509Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) kpathsea version 6.3.5) >> endobj 660 0 obj << /Type /ObjStm /N 17 /First 140 /Length 772 /Filter /FlateDecode >> stream xÚ¥V_oÚ0çSø±lĐêZEú²K[VơÖØ8­¶Æü‹bH/hE®̉…©Ø¯3OôYầ°3Oö™ˆ‚&y-(ä8R"0Q”8„ƒßƒ¢]غ%ŵû}5`½&p‰jå¢> ă„I")‰1iH4ßD^\ë j¬'ë`V“œä8OŕF¼]‘˜PG$đFBvä€×:r2ÄzÚŸ„-)NÆ%lI J€Ụ&@RŸ¡^«}-¤„•đir œøŒ©scÚû§´²¿yÈïªtn0¸^›rmÍđPưE±|±ù̀…û.@m³Ü±r¹Êj[äÈzk ̉´$ưÅÎÿx™Y› ©¸‚‚¨)øÏ̀3…M^Ơi–̉|†CV¤3gNÓNÇÅÓaÖä½uL<ü:¯ë̉NWµ©đH&û~cO'°vÚôtd&¯=ˆö4~€¹´Yó,—¦Lë+Â~.‹ỞƠGGƠí´LË'»Óm}ø®2¥7267îiN^–®ñ¯mfkÛ@:?Ç{¼Đ©ïgZÚt5lj::1U½[îĂƯïđvù6&¿Ùp᥋ª鑻t›1¤1¢Q|eÿĂán…c"N₫çá|¼¿æ´©˜ôÿ6~+•û±{ÑÂ!d₫E /›b·ë´è̃½^Ơđ r3íuëN‚Ú₫/˜›ïÅ (àt·ƠnvœNMV±Á€ùW«Øă.¾‡^Ÿù?˜?bĂa€s—³ˆ\`÷ø….ÿo,{ endstream endobj 675 0 obj << /Type /XRef /Index [0 676] /Size 676 /W [1 3 1] /Root 673 0 R /Info 674 0 R /ID [<1B27B794FF58E0A190BBDB24506E6C90> <1B27B794FF58E0A190BBDB24506E6C90>] /Length 1547 /Filter /FlateDecode >> stream xÚ%–KLUW†÷ºD@"*oD/AATpë M“&Mc'}Ll̉QCrGíhŤIÛQÓ́:m;j̉M:hl̉¦“&tÔQíư~'_Ö:ç̃sÏYûÛÿ=!„Æ—BM°û¢ˆ̉¥ ¡Ü@±-û²ØæâĂ"ọ̈º̃¡Ư«älä,”èØ~ÚR°”ƒ •ézûùH)Љ²\°4BhzYDxÉ1]ô¨Ơ Ô‚ƒ ơà08‚Đ@3h­  ´ƒc  ] ô€^ĐN€“  €S`œCà 8 †Á8FÁ8ÆÁ0&ÁE0¦Á0 æÀePa¡öuó“4Pl-ÛwÁ.ØÀCæ\ öƒ  T‚jpÔĂ@ă¼ ®ë`,€`,›`¬€Up ¬upl€;`Ü[àØ;`Ü<ÅGÎC;Nz —„s„ó2€„a^PÊQÊQÊQÊeÓŒ…æÏtѺ4Vp t€ tYü˜9§>Đ N°+XZ/Î/WĐ a§¢ƠM¢¨¦Ơ3X?J«ßEVodơ€ëÍ´<´£­·̉2Ç]o§e8À̃AËÀ‹½“–!:*{-ƒu|öZ†íHí}´,€c¶Ÿ¤eQ½}€–…r÷AZÏƯ‡hYPÇv?KË";Êû- ïÎ(-28̣ûyZqv€_ Egø$-"9{Á§h‘ËÙ.åÎÙ >C‹„ÎNñYZÄt¶‹_¥EVÇb¿N‹Àʾ@«JY¤Et×ơn̉êkúñZ6„ëNoÑê7ôXë´lS× 6huCØ&í •¦»E«»×RlÓ^¢̉ºí̉êQµÈ‘–RôU™Yÿel˜……µ˜8_&VuTÊ,l¿¯V^üo|í…Zn-ƠZxkQ¿¡¿;5Ơ[xü‡>ÂÔRƒ…÷«eâ©ÅÂGo¨eñR»…½oƠâAê´đi»Z K=>Óåơ“ UR¿…Ï?Ôç)± ̉…oºu }–¤a ßƠéû(±Ó¨…ŸŸéæ$Iă~y5vr“₫ü^Ç.rz|IÓ₫ùZ'.Y0Så€!Mº ®ƒ9³ª6¸ÆUH´$Ưóf oë#X’Á @‹t `DZÈ6F$H¼’$^N‚¤mÀËIâ5%!H€w•DÂE½m’k1ˆ´XH³(_²Èûd$Ăb ¾â@rÅj@hÅZ@^Å:@TÅz@JÅ#€€ €lM€X-€Dm€0Ç9"(f€ô‰Ư€à‰½€̀‰zS nb? iâ)@ÈÄÓ€|‰gч¹Ç‘'iYóHPÄi@FÄË€¸NËf­kˆ%F·—³üƠ:F‚Ä+€đˆDF3îƠÙ9>¬aD$Aâ< <â @nÄ%@dÄe@ZÄU@PÄ5³±)]oƯlçU·Í>®jẮ‡rUẁ~Pµiöï#Uw-·ơ“ª-Ë=ưJƠ=ËưöêsÛ–¯ZQµcù¾W÷¼kùÙwUƯ·ü'OTEË?ß̉æÔUå_üG[`D* R‘ ˆT@¤"©€HD* R‘ µÅ«”Ëÿ₫(ü ]¯ endstream endobj startxref 254834 %%EOF netcdf-1.0.19/doc/octave-netcdf.qch0000644000000000000000000027000015126111435013755 0ustar00SQLite format 3@ .~Z  o–«A $ § › 3 ½ ? É oX''qtableMetaDataTableMetaDataTableCREATE TABLE MetaDataTable(Name Text, Value BLOB )t ##/tableFolderTableFolderTableCREATE TABLE FolderTable(Id INTEGER PRIMARY KEY, Name Text, NamespaceID INTEGER )| ''7tableFileNameTableFileNameTable CREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER, Title TEXT )t ++tableFileFilterTableFileFilterTable CREATE TABLE FileFilterTable (FilterAttributeId INTEGER, FileId INTEGER )f '' tableFileDataTableFileDataTable CREATE TABLE FileDataTable (Id INTEGER PRIMARY KEY, Data BLOB ) 77#tableFileAttributeSetTableFileAttributeSetTable CREATE TABLE FileAttributeSetTable (Id INTEGER, FilterAttributeId INTEGER )33/tableContentsFilterTableContentsFilterTable CREATE TABLE ContentsFilterTable (FilterAttributeId INTEGER, ContentsId INTEGER ){''5tableContentsTableContentsTableCREATE TABLE ContentsTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Data BLOB )x--#tableIndexFilterTableIndexFilterTableCREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER ) !!‚ tableIndexTableIndexTableCREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT )h##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )h)) tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY,Name TEXT ) ƯƯ!Ioctave.community.octave-netcdf    H.æĐº¤ˆpR.ä®~H Æ   z R *  Ú ° | X 2  ä ¨ € X , ₫ Ê ¢ t < Ô   v H æ®xH 伄Nâ¶`$ú̉ª‚V&₫Đ€V$úÀR."H# +test_netcdftest_005fnetcdf:G; Cnetcdf.getConstantNamesnetcdf_002egetConstantNames0F1 9netcdf.getConstantnetcdf_002egetConstant8E [UtilitiesLow_002dlevel-functions-_002d-Utilities(D) 1netcdf.inqVlennetcdf_002einqVlen0C1 9netcdf.inqUserTypenetcdf_002einqUserType(B) 1netcdf.defVlennetcdf_002edefVlenNA1 uUser-Defined TypesLow_002dlevel-functions-_002d-User_002dDefined-Types,@- 5netcdf.renameAttnetcdf_002erenameAtt&?' /netcdf.putAttnetcdf_002eputAtt.>/ 7netcdf.inqAttNamenetcdf_002einqAttName*=+ 3netcdf.inqAttIDnetcdf_002einqAttID&<' /netcdf.inqAttnetcdf_002einqAtt&;' /netcdf.getAttnetcdf_002egetAtt&:' /netcdf.delAttnetcdf_002edelAtt(9) 1netcdf.copyAttnetcdf_002ecopyAtt:8! ]AttributesLow_002dlevel-functions-_002d-Attributes,7- 5netcdf.renameVarnetcdf_002erenameVar&6' /netcdf.putVarnetcdf_002eputVar*5+ 3netcdf.inqVarIDnetcdf_002einqVarID:4; Cnetcdf.inqVarFletcher32netcdf_002einqVarFletcher32.3/ 7netcdf.inqVarFillnetcdf_002einqVarFill425 =netcdf.inqVarDeflatenetcdf_002einqVarDeflate617 ?netcdf.inqVarChunkingnetcdf_002einqVarChunking&0' /netcdf.inqVarnetcdf_002einqVar&/' /netcdf.getVarnetcdf_002egetVar:.; Cnetcdf.defVarFletcher32netcdf_002edefVarFletcher32.-/ 7netcdf.defVarFillnetcdf_002edefVarFill4,5 =netcdf.defVarDeflatenetcdf_002edefVarDeflate6+7 ?netcdf.defVarChunkingnetcdf_002edefVarChunking&*' /netcdf.defVarnetcdf_002edefVar8) [VariablesLow_002dlevel-functions-_002d-Variables,(- 5netcdf.inqVarIDsnetcdf_002einqVarIDs(') 1netcdf.inqNcidnetcdf_002einqNcid2&3 ;netcdf.inqGrpParentnetcdf_002einqGrpParent6%7 ?netcdf.inqGrpNameFullnetcdf_002einqGrpNameFull.$/ 7netcdf.inqGrpNamenetcdf_002einqGrpName6#7 ?netcdf.inqGrpFullNcidnetcdf_002einqGrpFullNcid,"- 5netcdf.inqDimIDsnetcdf_002einqDimIDs&!' /netcdf.defGrpnetcdf_002edefGrp2  UGroupsLow_002dlevel-functions-_002d-Groups,- 5netcdf.renameDimnetcdf_002erenameDim*+ 3netcdf.inqDimIDnetcdf_002einqDimID&' /netcdf.inqDimnetcdf_002einqDim&' /netcdf.defDimnetcdf_002edefDim:! ]DimensionsLow_002dlevel-functions-_002d-Dimensions"# +netcdf.syncnetcdf_002esync() 1netcdf.setFillnetcdf_002esetFill$% -netcdf.reDefnetcdf_002ereDef"# +netcdf.opennetcdf_002eopen23 ;netcdf.inqUnlimDimsnetcdf_002einqUnlimDims() 1netcdf.inqGrpsnetcdf_002einqGrps,- 5netcdf.inqFormatnetcdf_002einqFormat ! )netcdf.inqnetcdf_002einq&' /netcdf.endDefnetcdf_002eendDef&' /netcdf.createnetcdf_002ecreate$% -netcdf.closenetcdf_002eclose$% -netcdf.abortnetcdf_002eabortD+ gFile OperationsLow_002dlevel-functions-_002d-File-Operations: ; Cnetcdf.setDefaultFormatnetcdf_002esetDefaultFormat4 5 =netcdf.setChunkCachenetcdf_002esetChunkCache. / 7netcdf.inqLibVersnetcdf_002einqLibVers4 5 =netcdf.getChunkCachenetcdf_002egetChunkCacheH / kLibrary FunctionsLow_002dlevel-functions-_002d-Library-Functions"' 'ncwriteschemancwriteschema! !ncwriteattncwriteatt ncwritencwrite ncreadattncreadatt ncreadncread ncinfoncinfo ncdispncdisp nccreatenccreate  mmÛ ¶$octave-netcdf.htmlhOctave NetCDF - A NetCDF interface for Octave ManualRoctave-netcdf.html#Installing-and-loading01 Installing and loadingPoctave-netcdf.html#Online-Direct-install21.1 Online Direct installNoctave-netcdf.html#Off_002dline-install(1.2 Off-line install4octave-netcdf.html#Loading1.3 LoadingNoctave-netcdf.html#Basic-Usage-Overview,2 Basic Usage OverviewVoctave-netcdf.html#High-level-functionality82.1 High level functionalityToctave-netcdf.html#Low-level-functionality62.2 Low level functionalityJoctave-netcdf.html#Function-Reference(3 Function ReferenceVoctave-netcdf.html#High_002dlevel-functions03.1 High-level functions6octave-netcdf.html#nccreate3.1.1 nccreate2octave-netcdf.html#ncdisp3.1.2 ncdisp2octave-netcdf.html#ncinfo3.1.3 ncinfo2octave-netcdf.html#ncread3.1.4 ncread8octave-netcdf.html#ncreadatt3.1.5 ncreadatt4octave-netcdf.html#ncwrite3.1.6 ncwrite:octave-netcdf.html#ncwriteatt 3.1.7 ncwriteatt@octave-netcdf.html#ncwriteschema&3.1.8 ncwriteschemaToctave-netcdf.html#Low_002dlevel-functions.3.2 Low-level functions„octave-netcdf.html#Low_002dlevel-functions-_002d-Library-Functions.3.2.1 Library FunctionsVoctave-netcdf.html#netcdf_002egetChunkCache83.2.1.1 netcdf.getChunkCachePoctave-netcdf.html#netcdf_002einqLibVers23.2.1.2 netcdf.inqLibVersVoctave-netcdf.html#netcdf_002esetChunkCache83.2.1.3 netcdf.setChunkCache\octave-netcdf.html#netcdf_002esetDefaultFormat>3.2.1.4 netcdf.setDefaultFormat€octave-netcdf.html#Low_002dlevel-functions-_002d-File-Operations*3.2.2 File OperationsFoctave-netcdf.html#netcdf_002eabort(3.2.2.1 netcdf.abortFoctave-netcdf.html#netcdf_002eclose(3.2.2    \û „ \‚%„Nßxœ½‘MnÂ0…÷>Å“P7($Aü6,«r'ÄVÛrL ­à,=KOV™HP•J́X̀ffô¾7󜧔z̃:M RI\OÖỤ́0©¸ Ểă“Ù%ï(ÏqBiÅúe U#:«¹W$$µ„qÆ€Êjë Œ–‹U¹mPZ/ÈO₫ pd̀]ÍüæÍpú₫*yơÖx»3b¼ƒ½®_@µ¨—tvà¸Ê4̣tAíx©)­¸vWÉ?-0u}„(Ñó|=_ WܶÛ×ÙË2÷JY`çOv¼"ÁMÕg^|Ï]+j³l C{̣1 ej‹† yƒCºø¡̃ÿ{í#¢œ8Oµơ-ăsư'́;ÈWƒ‘05|xœí½kSÉ’0ü½E-ï9đ¾ø2·ăaˆ`Û<Ë€°g'66¥îªÇ­.Mu7XçÄ₫÷72³®}HŒÇç̀‡1ê®®¬KfṼkÿß/®{wÂ&Ơ4?HöÍ?ÿ6²#-x%26³7çïÙµø,‹±bßï¾°IUÍÊW{{www»7E½«ôÍ^©ÆƠ×b¯¢–{l8„Ï’ư©¨8~6¿×̣ö§­#UT¢¨†×ó™Øb)ưúi«Ÿ«=Å,p]ꧺØ:Hö+Yåâà"­ø­`ç¢::~͆́Đ₫)‹Jè1O+ͨÙ₫}”˜|*~ÚÊD™j9«¤*Đ+u¼uơøÌï”ÎÊ5u§E©ja¯N¦̉z*ªÑ<“e¥å¨nLè&W#7Ú¾…Đ¼R:h8åŸlY£é­w3¥« å̀ªÉO™¸•©â,d%y>,S‹ŸoÁZç²øÄ&ZŒÚú÷k5ÛbZä?m•‡ÎpG~Ú‚çqÓÓ"ŸMcI›Æô¦Ñüêäè£A£̉|•ºŸ å‚©1s [0Ëç¹,n†¼È†¹â™,nLw…ø\c°-/2f[$ûe5σ½2œ–ç߆Äï–ơtÊơ|˜‹ªz8Ó²¨pv́Đx˜‰Ti{÷ªÿ›ḍv7€&¦ ÏåMñÑëL–³œÏÙ?¦\ßÈb˜‹qơ½Ü}!¦Ô@|æÓY.º̀´°= gZŒ•̣ ˆưcUTĂ1ŸÊ|₫Éb"´¬₫7)+­›ƯLŒ‡€fSU¨rÆSñ#ĂçwB̃LªWl¤̣̀<*åßÅ+–s}¨²]¿ Cú¿(*=gÿ¸º’)ÏÍ”Y¥fƯíK‘Â’u~ñ#›ñ 6Ç̀ú9̀¹́ )Ê!𤮠àln@,Ó¾bïN¹₫4Ơy.*ö\–ƠqéúËd™b³J¥Ă¢„Ù¾ [¬@vº‡,²ç¢œ¨ă Ar…“# Bñëe‡1ćßÁđvŸ3óÂ1?¼%Ø̃—¬¸ƠѤ.>ñtàM_P(I\ÑÛ&&,‚+‹ßÏäèƒĐeĐà­øÂBô¯VW̃7Ͳk/-Đ̣¡Ó,Eu,ƼΫר‰ô€ÛèßĐ£-‹‰£}ôÈ\ /f‚T±eñ±ùêƒÇ̀?^'.̣ªäí¢4{øt•ÍHsUvn>½0ư;Lç+ơß8ÔZo ‡VƯ‡Ü"¢ÈŸ „yc@8Ü¡Ç+RfIÚο hqÅû©À¿4P¾  tăư=°̃èYsÁWÎ÷x¾"”÷E.§ÇrÚÊ¿7đ~๗«U3QtĂçÈß,x¸JçZô཰4ø̀öW䈯e u¼²@ ^¬f^¤0à¹àH®ÊUåTå 5øđ’ù'ëd£™Ëi×äÍ‚î)=^ï{@˜7Dxj?Äéq?Óc æe æôx5ŒĂ_ÏtüKêøæÍªxóF«z¶,ΘÆüF¿ÖŒ+oô¬Wà ApåniUËldƒ4/  Í­\•¿Ñ³×uŸ§2ëg₫®…ú2>́ëƠAŸói§¼5 ¿‰A«‡ƒÁ.‰- ØoÛ`áơê ßqV̉>Àæ½û] –^®tÁ–†{çØÄ\÷ăªyi …'9½Y•|àZ‚1vYvàÛă¾eîÁ™Â®{˜¼!àSøÀơ* M_ N4û[/böơê Å8ïÖăđ˰y»:Ü>Ù'xk ~C\U2_å¢J'B¿|±¨oc@Ûí¬2€Qơ`‘yc€9Ö@W'×~Zµ ¾ uu‹µÑ€lđ†‡ *}¹QăđßbÀ@Tú°Qƒ·– <‹A®©æ«…˜Újca?oÀ~ªZ₫½ˆë;ˆ/\H³º(̀ Åñz¾º@ÛÆ¿´m°ûN±Ăb4–>Æ‚pß1ÿdYªfóĂªSH±¯¾?ỀóƠ8m̃ļ10‚³+_Ĩz@˜7ÄË€—®B¿÷€0o ˆPn}ˆ^2£ẁ·1˜Ơ¨Œ¾Y ‹Û·Øw1°UeñYƯ·;æó}@Ó+.Ñfÿ̉ú!&éX÷‘ôûRh¤Ơc1–…È0˜mỴîù÷=ƒ·Có†á›uË®y·}̀¾¢qÄ̉k¾• Lw¥Đá×mö³¯ ´đÔ°ïV=¢zæe_H¡.Û5¯{·¾’¹¬ạ̈»íÚă~`îÁºưT ‚$ºuÎđ5 #öQ™w+̣\û0„N•°ƠÆÀ~Ñܳ‹Ưœ×¢¬Ụ̈»áÄOÀœ7óQÎ̀J”ƠÇgϾÓ|Đæs»ûœácz´À»(LâÍùû!ræĂwơ(—àPME8nÔl’öál&L~f‡0e>cô3ŸEñÍ8% Ä́ Ñ<ÀG¾w²¿—É[ÿÏDÄS>ƒ`Èv,Y_ÜS¬E_/ú`ø|Q¨rísÛ]€8ă ôJÏúƒØbƒ×l¸Ú´.+6rQJ"C˜ƠDXd¬Rđ¾.E¶Kkû³ƒÓ¥¼ˆ¿“Û磑¶ä©VÅ|ºuđæüư₫¼9°!sF_ås6Öj ÀØ•²ƒDéÎyÁ” ¨ªL°[Ég™º+́0¹ñ<÷c g9á•— @*Q¤s¦ Kø̀ră†ßöË[k§"…qău!3^ñƯ:åzWdµ §®ö¶Vj{²3HJÅ:÷BLéLhØ„²NSQ–ă:Ïç¶ NÂL²{æ¶OÜÑ‘°›ªT°™ĐLđt²ô¾•¢—F4¬ºLVe9eljKí h½ḍ²ññ¾ÉËåÈĂ€sp,ög¿Êjx†‘î…¨ ~¼0ñºü–ËŒq\ñO?A¤\ SŸ¸:Vúèè>«¡´§2ŒZL‚;=†(`£́…1å¯ưØÄÙv=îhmc`»÷´¦èVóUù]OŒzÏ/\_ö€Œ¶×|rZÓ“À ¥/¢}† ³_¯ÏNéó]l¢îÄ­ĐËr$S¢d…ªXYÏ §ÁÉ)₫iÇËF5=w˜Å¸^bc¼´»m†³G2¯®¸₫^ÖƠn Œ«; `Y¶Ơ5€hÏür$Ÿ‹bdK·°b”_:‚äY‘«»ĂZAu“ºñwá'¸>½é «0¯îÑéΪơÒ§0$û“oÚŸ´S&ß,7Bß³‘ă†c©KȲCrܸ`Å8ÊU æœư¬²Íâ Èvu‹đœ8€ùđ#½åÚ₫ư·­ƒưrÆ ‡º¼7JÏøÖĂQ~Åö÷ éÁ>åV£ÀË-Ǫ·÷o¹£đ[pIYđû{·\ Zï͈èơ¤ aªîÆ)§Ól¸†EHá/fZÍ„®æøĂ4Ékß@ÄÿûWnđ—ßkUưhgB¿º¾ÉkûÅîîn{½3”)YÅ­ Ga‹á[΃n7§â$Ȉ¦ê‘ÍfÄM|G3A#´ÿÛ˜auNĐ˜¹Ve»Ơ ¢­—̃¤ß¯g©ÈsƵæsT°p’™m‡¹ç¥•¨&Bê„墸©&LivZŒ™7¾“%«!PXV"Ûe§ôÚn¼US ₫€ñ„A²:×~'dÉgPÍ6²ˆ™¯8Đ„?$Û7~́ÖÇ+ ¸8…„m—B°ưLl.]4Cô¤„)øu€2.êºJkQÎZƠ‰êNˆÂö ²‘zL‚pÊ]›–QÚC0̀œ¥gªåfđ­¹QĸÙơDºÍ¦gtÚóÇ/Szȶ Ài½¶¿ûf$M× lZÔcßxdz²C"rÉkÂ>\¬ºÈŒ[LääÔMZ Äíj«{Œ/¹’º‡ÔtÛ®` ­JD!‡2ÙÊ2AQ va E“œÁéç×÷ [1́³j:ÓFd̃ŒĂB$Ḱ.Ê’»mô€*́–Ú˜̃n„vxôŒm* î RưmOùg9­§Ñ»Öœ®&ơxœû…Ó5•¯9µ¾¤FÀ± v̉l̀óRÄăMM>"Sk ă/ä_'V‹7Îơ@=ßÉÛ4)0̉í‰í³é,zĐdgƒĐ¿¹*̀ƒçÏLÓÜÖàųÿ´émĐA;;?&&#³kP;?¶C~m\ 0®•ê•;l̃ û{YÿË» ‹E8Ê]$Àù¼̉åÅ7êuCÂt’đ:…  ]̃ˆÑ£8¥21äú ¶”[÷I#;æDđbĂ₫́àØ”ù€ª,CäN¯[J6XF40K´.âÚĂá¹$¶ơnú‘ا6/ÄÔë†:7qË ´đ†f‹²çOV>Y@Ô|cđ=—êÅW»Tƒ{T‡µ/å˦¥¼¢{ó¥¨j b1=ôlT]́%Jê•X4Û–»b»VªJÁÈ~{†o „HMɉu&it ê•>Iî›v́/+]§U­;¦́äw|̃4[¥È³U Ơ-(¯£#ÑkQµD/»¶{1)²Ô‡*Üç$n—fÉί®N Íϧ×ñ£ó“ë£ă×ß´´óücÔO,鮼¬Y&ɨlÓÄ`ÀꪣƠDhĐmi—Ơ8̉n¯…–̃‰¼P :8il*€0dú6NNêpÔy?§wă@̣0$8o MĐ€4a óP–ø<‹‰hwn„y¦‚÷OËÙÊE]‰G÷öhwka‡aøÂ©öă®ư¢^í6÷ơ¸ „‚Ú87q}wÜÀV¤ä@ù²ô¯¢àùä ÷Ă" ¶$\†LÈaE‚Ñ|}ë}†–¬°kÛZ©›÷ÖÜåz­¼ÙrB±±ü,2f¾f¾Ẫ8T†­ đÚîŒ{ôg̃˜Đ¹3ˆÏđäOdéè7ñ³CÂđßÂZŒÔ­Ø]<0PÅà}‡­ÊĂ[8#c½´6m—̃́ˆ‰·d¢´fŒ˜èÅÚY h΋ç-îÎYĂơg|n¬‚µpv_h’˜6’ŸÆj8 ø=Ü274˜LLgƠÜŒzû¿ÿgç í|ĂŒÍ} C[Á·[ÈæfáË’¸€17,r0Í´’·XØ—¼ÏZƯÆpL,q'KAlâ!MDúéªc€ª•2gïØ¥›YéIY  ËzJ ̀» ‚ö°q/4öp•3Åă%0®K-ç̣ϾHÖåtñ&´ˆ%"éÛ=¤ä~‰?éyŒ =Î¥Å[́\́±B/|¿'%đÔxoJây“L+R¬hdÓ:¯$>Á ÔX1u¿̉ûƠ„Q1ä­oŸư?[¶*5±Új̉zoK›º÷{ĐÉ^eÊcWP‚ƠtœEv8dQưàt̉*[æ“ó£?ÿv}}#H–Y? æûG•Eơü»Ơ^½½¸¼~ÔLơưăÀÊ¢‚lÜU¡?n¦ù₫1@eQ}÷̓æÙølƠ™>êûÇ…U8™Wûú́âđá+LßƠ¡_¼ÿù́áÄ ƠúWzôöđ²äñCøX¯çöª®f5„¾×±D-€(bâyd–‹$ơ$đ²Ptq'Œ¨ú&‚̣–²sU‰WF_ 8 ½̀˶Ut 4é̉åΠ} '^̣q’é”WZ~Æă ¤!÷œ¤#ªX¿2¯äR çF!™̣*ç£][*{5§ Dv¬Ăt-€\=>=áá>* »È'ă‹Å.ï“¡^7ä“Î7ê“ù¼‚iœVæOéeÀuÜ¤Ăæ ^ÇvL̃”Ñ÷2UuÑûôû¬×qAi<[) Íe®àĐ̣Çí¶ËN9ƯÂ)"‹½UƠB³€_TF'I" 8¥hxÆ5Ÿ Đˆ ¯=á²(‡€k̀>E&S°_l? £k§cƒĂYHê€R‰al.pé₫ùá4$ $‰;eæÎe1Ê[á:ÄÙ•ÁüH¥½Ǻ©’ƯMT)\ ,™ø½æ9œñø¼.ײ¯œø˜«¶)œôî‚ơî&2°©à¸–¼ƯzÊ‹9)©h5©²”d®aˆ´Y!E(;ᴦȟ²ÎÂÓTq Xb´üYÎS/<ççl[|NŬ¢ÓsÂ5Oaơvv-̉g8^tóq̀aMÛÄ“‡gÙG5ºWÏv¬ƒ”TÍ‹ü† ;^Vk«ÇLăWn>³Ÿ"À́ÿeŸ?Êâ#ăÿ@¼vF\̣S–˜22S မ%¸³«ÚêüBÂ)*¢ß)>gé¯Ó9RgCѳÇuçû{₫́ù£µÁȰ=Đ_¶H‰/S[QÙ¤*h,­ B&ôrí86«Ùuæ?/Vú¨iù¥h}aÄ-°·₫ -¡Z[צÔCÁ«†én“ªá·÷rÈoÂ"<-NI|‡ÔÁ0 Ê+”¸Hu!+“M‰!iƠºX$ơéø`¹oXwô,ÊÎ́ÊW,ÚỄû©ÚGÿÑ“÷eÅE÷M.bÇ­{(WäÈÆ&™2Á؈ªhg½I-ÈÂè×V1 }É@} ĐG1̃6đ¢8y¨(HƯÈ[(|9·ù2}‰+á¸{´˜…ß8©¶> R¢¬să€º‡Ûí̃%‚ºÀraˆ’J¸© «¾±tđCY‰5bƠTH'‡àW«0áïÖ•’K“A‹¬€ËÍ¥1…ù¹́ßM5ª;|9QuÅŒ¢”BÜ}ŒX_ó„ífzƯe{_P™|)îÁ“²N'°°ɦÎC/mEQÓƒö‘Üíî褣̃Ñ#£Km(ăj™|̉h¾ ƠKpÄwó— n$À¤ª(eªa!L°­ ₫¦e¼/Œ¥ r  (¡ăˆ^¯ºăFù*̉W [XàmÅY}ơÙŸ/¸àx…Úo‹ªcµ -:„W¾ÿ¸ç˜¦ÎV¸.yÙ|åv–[(‡Äµăƒ‡Û<3JƯ¹¼́äđ6#ôL5Èû5Ăû„ÿƯæ‹Xaf¬²÷ơL 2ÄùĐä–ñ2vlÁv—zª•¨ »1¦"¬ªĂRø̉H*LË5úƯÛă×ßÚăËJ»K"Zx™ö½XÖyÏö²(BÚ4~yXkB®¶̣s_ÖưÜ\µ>¬ G1!F£^¶‘±6ƒǻ¦ïîóeq¡|ZvS¶Ø °4J-‰÷́l ­óŒhƯé±,«³€ĂƠƒùh\ >›åP$¯R˜ňMÜhˆ2¿×T4®™†*Ñ:,6·^́=¦ÙØKÂïEào¾] ‡PŸ#ˆdzu®™Ă©<û8êF,Ïçắ0ưö°Â¢‹[';D}V̀s¦Å­TuÙüz̉¢ -S23î́vXÂy“úbK̉™ơÆÖÍÚæ]P°ñ&2«ùºñÛ¸ï6­Ü£;<\ÈSĐđb&4_BÄn5ÆkÓÑœÄüău‰×-h®ùHéû™Ä /TăËOÅô¿iv€`©̀Vá÷Đ/vÜ&ÚïK^@²‡đ]‰çA:áÅ ¸L%ä¢bh//+VÉ©pq£à)P̣›‚fɧ€wó¬ù|HsŨ/Ơ¼đâ-~°ü~›₫7½ßfû?`¿à»V„3³Ê#ŒïsƯ{ÜS_»µÉNt]µ̉öfël7g̉v«alà˜÷;²üÿĐ:Ó0…Å…—>Vœ ¯÷Yö¸×z-êậ!YÿV̉'̉S¸È«ÄU÷U£‘жö¬º®nÀ!,"Êư PO@Á+ëư: Ë›Øû½ ÁwC“z@²B5)Ü7D‘ß VXCÃ|É x…—®]qƯTöâ!{ùHPBNvÛă`qaYÁüi+ùFB–ÎÀ̉¾üp—挀»0oBºªÀ©ĐÙlܬ#YA™Œ¡̉¢Ñ2…ï×åY@|û ¤ôv{ZÛQ¥ÛĐ:w5ívww“¥ØîØỘ¿JŒº°«‚/€iúÇZEwµ.ÁZRE_,ÏZ-„M³Vg ‡¦ă#\¡ÑÛVƠÏ¿¥‘‹†ˆlj¼8qcÇ«,~_Â{™W2 >‰EđA¢Ó²¶æ"“Î4Ó~yËuÿË^U½o±¶&§v_W°CËâ÷uA®JWŒfG~æ&¡ßçêßùEi}×*ă×ơ}°n;.æWföÔr·",}s}¡îÔéÊt}/ÓœƒÊ2|?mÙ¤]öZi{ểÙ>ÀB›Æ‰\C,lܪ^ù áf$È…Ê;³Ü?²C¹~̉^̉lö"º }U{Yç ˆ=°­‡äÛˆV!Ê>£Ø*¤_Ëi‹Fà}¢rP ÖÉÂV@|}qùËáơÇκ°æ]GyXó&ªë]ñÛV­Øơbö=»ß±ÏûíOVÂj‚ñ8 €6‰ÑĐíCœZ0®‡£3˜‹L¨•̀ĐơÀ»1V»ˆ†¶~~éö¨ơC£_ ¿hO€dÚ&1ÍŸºÁ77ÄÇñPư:úÆí:O-oƒËl äú›E.h¿ư2S­w=*¶ëAFzñ=à­™WHŒ7q™çM½¡P₫éºé`^¤ËsÂ+Pv¿qôŸé&¼ƒĐï-L)Á&‹+“å's÷98ƯI çñ†;ø˜̣Å‘a»—èAl^Ñđøø†ÆcB21>–Ó{qù¥m /–Ÿ‡…°it&813wBdN’åz`\›Ó8Wcæ‹ÄË\ é̉J™ ÷”Gè¨`rúÁ[‰t£ ̣̃ÙKƯA°v-|9Dc–WBt á tî¢#&nÄM±óÜơ,«¹V&€Đà~$4eăa¯‹q&"‡k³ËééñFPôôx $}Ùʪh PQO[¨º\µ·§aÇv+ăăâ*n–£ơăàÚƠ{˜Ơr|̣¯á›VṆ̃œÍkúTĂLWEÆ{Í̃ƒÜ¢ă¿Ơè6øC¾+°.$–àä¾_Ÿ[$,Ø ¾â®ûV©'Öé®¶Å‚ºmócQÂKü/ Û¾)œ¿ÑWH7hñ›H8£W¸NÚBxáüu çë6́»1î̉*—/¾¹½lñOà«ÂÓđ~GƠ7MAùôx5/•…ó‡H!›<♺WôhăƠ# ̃'É"Ík4}~;qˆ́,ÿT‹Ơ&P;#3›eåµ@!Íl@]ÖA½¬«Ö_'L8Ÿ::7G$56lâ02ÖëẤù07 /|3e°|;À¶¦w Ïv¾4Á“¸Ùë:ÏÏSÙq·I‹ù¼Œù ưrƠ8 ñiÂ1,¼'9 oốA'a<Ô5Ÿˆ•™31cXong¦x7ßA?öˆÏâÓáÀûrñ F÷pœCVfa§¬ó6ÆÜ̃¡̀°ê}ˆ¾[ñ,´§A;‚¶I¤#‰ë‡/ ñá˜ç}+¡`ùebÛ’_r»²¨÷d2̃ŸA¸ÛœT×–èdU"|,êYitưè÷ëǻa`.}´ Z8O€„jÍ勸~˜̉cÙdx\î+ăgPé÷ïE·vYWî£Ù²%2—˜Cư¸Sà ßl ƠbÛwĐ́%fâ¹ë²€iÿhp}~Á?À%»+ÁÂÁ?pƯ¡̣úđ®©M̃†`ÿÀơúÂU>ÓƠî ¼`‹­t¶J:_ú®vĐôR!*‹Fnc)¸p4¯DœĐT·•¥5~êg²h6j=ÁKºÛÏÆ¹jé¦ăgp‰c\…=®²jr,¹̀éËÉ¿ç ’È́›ù ¤Àêư„˜ VpMÖNß±ñ1̉ÎtÍöÿÏÁøúc‰ˆ&°€ ¸Ÿ5½ˆY“ưrUå!> « à­Á3̃œûZD‚Î[ú_–•̉ü¦—ÿ¤¶ r¹@àêR3_æÎ‡æ/¼’!H¯́¾.(¦Åx¸yÇƯœ€Efi9ºB– :0×Ơ`¹>C`PW°ẵƬ>(UṬ¦VuyϸPậ­Ù_wJB6Sz }S¨ùpUuđ†>=¸µ‘§›øBQµñö bǶđơÇÜ#¿—~ƠîÙBgœ#á5Đo4R$]ÇMy’°c°wn‡c¢BÛË̀ï .˜,*q#´»‰ëÛ.TØ%>øỤ̂ÏrZO£w¡Á¥†¾ơnÿƠªÔ÷4YCV,É#VL¯Đƒ>6M0¥_ÖfæG±Fú+Ü@÷½vóX6̃>RÊOx@Y²!²h´€ÿc—×¹YZ(Ô0ªº÷'.ätÖGj& i;ÿ~ß=Jp K@MËκ¸@bo¯¸§g?³åz÷íA ÅlơE Âư¡ư×ESks[4Z” $}ïĂÁ’!ùr¬!ÈÖÍWâ ÂæÓÎÖ́)Oêc‘‹jYr~R&BËpT&µÇÙ¼„Œˆ\— £—1¯”Èđ$däàüñaÉ_Àɼ0´ØƯÛåta‡₫Í À(0ºïËSLÊÑa¸1·µÎb^VcÆêí+Ă‚ É’„₫:Ơ€ ëw«,G´aµ̉•ˆÖBxÊϾeC V­qW ­Bđħ*²§@ ºơWä<.ơ°ª6Sđ°ª–p~Ơ?ÅoVÅÛ'̣"¤>ÜåUµ¡ZĐóƒœî8̃5"©™â=vç#ôèÚe‰fƠ:bzÄÅh–ï¿äfĂ»T]́ï¢Â±æ«U©öÉêb{X|eb·V„¸̉ÜBÑÚ6W”C“¨§å…VÚ.6đÏ'5nŒ¦I]‚¿Ø•bDrtpÖăưT¶•½¾xâ½T™u&¾Åíº_§´ơ¬É~.“`#₫ÊåHø‡Ø]¹pÆ]¹@ ?T`rÅUáN°đÁZư˜ëƠăb÷DơĂơf«ø:¿‡H—[4KŸk4âQp']ïú¥Úa£m)ĆÆ|»ïKÎüŒ8~6¼Ïîóóö}¼á{o‡æ Ă7ẹ̈ưöÁ}lÑè\÷̣¼ïăªÑhÉY¥́ÂxjWæsÏíàSÇß xÇÖ₫RFç¢X-Úơ½·“¼Çwä$œ£ÎNÎ=#3—AS9Ú¿œ^¿º«GÇ£B“ÇXedzø¡êÈ­‰û¸ÂÓ¾₫U{º»ö4œxá¦l´´,~®u$s/‹ ó́g+™:<¬'°uX`mv³™,½Ùw ÿ¼¦ƯßÀЇc-ôUOÇRä®VGG¶ üm{XÍoWluvwOZ̉;­ne&¢RP$í®¥́®Ÿv¿’é̉ >×x_‡ÆnØ€ÙC4t7¢?iÑ‘k"<&3QTr,éµíÎB]gÑrÇxäjÇ¿ƒñDÇÿŸ…Ẁ¬}àđPJZBJøƒI h'$¯ZÙœQÉ\Ṿ^ÍÁ7ªú¹kÓ<„Ǩ̀p/oøÁ«Ág+E±xXOÊbŸØŒ#1H̃^)¼Åéâ Ûîˆ&áÍZJK&g˜³3 ûºó›Ư//ú†ö ü4PŸI"bꈥ8¸í{đ‘³\–"c{<,ºñ£ƒCw L/²\‹²r<Ñăeă£v¦ør÷%ƒ‡î¸Ùß›¼\?0;Ùnï€+QVdqÅƠí=>`€»Ï6§¦Ë#p ÆFđ·åѹŸÑT»́µ *Å2EÆ™âY‘™>§ §1OEƯ’%Ïf¢Èäç |Wr™Ïd*Rl–́½9ÏL3F͘i¶¿7y±ÜVß8VTs»ÇKfihy3±‡o4ñTÀ̉m|³Î^Ø‹¿±ÿS‚½xö́û®µÊd9Ëùd¦Eăép¦ –•ȶ `³¿À0~ÄNÙk-»Răêj¦¼Vu‘¡ :`§EºËü¤jo±‰ăŸ¶&U5{µ·7.Ç»Jß́m4ĐÔNn…«Ë"Í  đ‡’ §O–ÖJ~+ôˆW*ảâ”,“œ6…e*E§å€ê¥^Ü`:–ƒ(fæ©;cRÑè`„µ ỷDp°ßĐv¼Ó‚OG¹Ø:°²‚p?~`m&6ÖB p&¹Ẁs¬tRÚÅ„)*¨\Á>É‚î»SúS‹ÜæÓ­ÿSUV¬£ƒ™æi%SSXß&¥¼)D–@Jÿ$¿ăs6WµÆÑeP)W±rb{ÂE£+0hŒư<Çên—Ơ ©î6v‘Ñ&̃Ô_ˆb̉¯¶$œ.INiu£ùô/ÓŒ—“+Ŧ0₫²ÖXàC‹)—E™@Ÿ~1`y '(Ä–ÿ¯Tf¤‰đ¾Ü31·îj̀`*âLV ŸÍrÀGÁ0ơ´˜›-5dZäST±ö ¬ÿh#äu5Q8ÆßT€qz‚wĐ .™Y„rÀ*¥C¦³,FY§Ḯn" «äFóJâ² ±³± ³i]Vl–:’@puD*g“¸M†µH̀àÊeDˆÔQÙ«‰˜# ‹v9üÜé°Èü Ê‰ºcˆă¸³ Tl*Y‰CœZU!-®øÅ:áFÍIp£zwÖ…hÆ3t§XY‰Yù*Ù~¾ĂxY ]1'Xà MB†ˆ¾ưb‡©ñXhÂ4`V†$7̣Öb`.nxNg5U,4‡ơ ÜF^d{È1 ÊÄûV'7µ¿ẹ̀÷ZưH₫)âˆö‘™J8ïwg,Í×ùœ‰Ï³O»?ZĐ1ϬÈåëMEÜg—a(ÍHU:#‚$”ü“đ µ0¦$NǸ[#Á¦\‚beBŒ'Đ>Ó%2ôQ.́¥- ”Œ‚8Œ ­U!T]æsV); àÊ×Yx~Q¯ÔWT¦l8 M”ñ4%R«¥/ωu]$í¹Ø"³–gÊ¢+$`ñ€ñ¼¨ú=É”ơ˜§U­…¶¬±TÈ‘¨D̃NZËx‡[ơ'y%Ă$ö„Ë)Í‘6¼¸‰·&8^::q¿¤œ—• iÊf ÎêÂó‘JÓZ—ÖîɵàfV§ÊV‰,2y+³ç¸L5¼›Èt‚*°“Räs`FÚÖC± .`mg%¼øN0dÅ~G°‘̃Í*rá¹ &r$U#Í ƒÅªn¤» ê­áÄ:q •Ï@?e^¥NH É K8xŸ1-xÆPs2£©Ù̉4‚L̀—°f㶸…!õ ÀÏ ‡›=̃ˆ+Á,́Æ©±‘Ç<# rÀ¨–ÏS$¼°XÖ8‘£̀äq¯Q^U‚àʉªó̀‹ø¶9—*-ÓÊr@Dä5ˆc/‰+àå¤Îj=ƒL­+¡K̉(qTi„Láz‚¼-¿U’*¶Ă9(yÎ2@TMí€HT̀¨@I(l$)NY11ܲʹi)*®ç€é^~€MsÜ)á%We /å…á1uI`ÙÁ®y¡!Œ%Ö9 ¶3:­Pbç6UˤLIÑ?Ü/2ĂNRrVŒl‰í»GƠº>¹üåjxx~<<º8?>½>½8¿Ú:À§́đü˜ù§VSÎX"z*4ÔN¦Z1?m=]7— c*hÈ»¨¶ư%Ï€¡\‡Û_4>"aQÆRçK‡ă½_2Ó³S m·¨L/J₫sùI°œß™Ư"±¿R¡&˜XMp`XXÉJ1•°5Öµ™̣2TỪ{g4§ÖÄ@1qƒ *"  í2cµA Y&v~Œ@™Ó„Û,£êÅ0&v®jn—Ùg¦ Qº¥(²Ä¼ó‚™}9½ÎÏ€¡x¾á…ü;¯âïZY $b84!ZnkE@ùdŌϨ:̉p+·3JÁ7 VKórB-8éạ́2“yfŸª §£dÊQ@Wă„ Ư¦$kѹ¨ÎñLĂÁAh2ùóhÁñk§£Æ¨pƒÀ#­6‰B/₫e>¶ƠíGÍ/üªÚORu+ ¶¼vëk&¤™™`uá†e*€@#F×]Û¼‹ßđJôíP†X‰JIxüñj€¿T]%áºßy&Iƒ)påº̉àZæs–“C”ô1́#Vc2ø<8Å~ws~7`â3œáL|i]Ó°´Ä̀ µđ´yËImƯ~gf‹7|i^g¢tl2‰Øä6NVi;Ṃ̀E)~ËeC%&™!û!]¬É«XiÔ›p÷@p¸%ÅŒ—́Näy×Ö¤ª¸Ư”|˜ÜœY‰Æc`%@GFÄm̉(H¤Ëí2ö K`·ädƹS,HRM4’ܶ`$†Á €D_i^”cs Ñ6Ȥ—Đ,dq yáƯ 8qgf́sÎè|…m­Ç°ömƒ̉{ÂI˜¤QfgYÛ‹åø%rfZf́ûơ'…= i¤¨é*v+ÅÙ)k¥e₫D9%¶æ÷ÊÑ“xä\S8ÉTM§­¢©₫4äÉTơ€l´âLV`H"®„=M…@Ư˜.TưÖR. !—(%\‘ê~ª»3îôÔz‹cÏ #i lmpư˜̉ÓđdA6dÈ9$r̉Ă*^^Œ₫¯À“Ăƒ̣ä2 HzØûˆø\ǵÔ®p³¿`퉦‰íÓj<– À&¥íÇÆk ^©º)äßEÆlƒ’T6cÑÀ®~ÊI¼v€J’‹ñ<¡DÖ‘Ö9wfÎ)¬Q΋›ß€í© á%`6•ÈÂ(Ạ̊)ø§¼× çÜ5]Ä­]TÙ™iLÓ¶ Ooàư^62tî)sö'î́ÇV€́n¢¨¤5Đ8ß!c8~íª(àiÉ-$3~â7t”üÂÿ¯̉́HMgªp> §z‚ïE^Qó$h|b´ĂJ¡o;$Q·6ʰQ¼y•´àûPL‚…t%ÖÆ'ÜA/×Öœ|eëØbtlщåí¸°`,³Rac,fg NáÅE%>W‹Çl€0:/!øi²ưIèBäp†™ºcd e*ƒk1¬‰ƒĐ2e€K}jœlK@‰ùÈ4Y:b Ñ5p%Äh/s¡­²•Æîư)Ô®`Ê“:‘âLCw¯¤ƠEd5 Đ÷(3&ÖƠÁ™d 1άZ' ƒe ¼“ \q–LD³Æ4p?y<vp¤Đ[ ­æÊZÿü܉pS-g¨Ÿ'è[R¹Ñ¬½è²ËØ[uÆœ·™D– m·ÆDT&MºÆµnjô•R¤X˜ù<ÀUĐkü·è­êˆĂ²e–]+á&₫ă˜rìÆé́à]{8 #]œ:‹ ‡ ̃•*ÁÁ\aaO|i<+fñí}r ú#O\Ær»lät| ®Ä|ä.§Ó’[+|8…Æ̉.hh|4&ÓAbOmp}•œ‚°ƒ!ïpÆ×…5 Yb †{Y£Â1~O®«2Z̃ˆnº—\1!:9%ÄÚ5O-,E€qZ¡ygIZe{]à–PLºM&If1^‘#œ£b~ÆX‹wNY2Ă<·ôÅf²"ª}måG°ûÀ!Ợ¼³.´Øƒªµ¸U¤QY1̉–î­D–v#h>•µ[ø`̀—©‘™Ç NèÓ¨‹\N%ô;,×ië¨FçVu5«+Ú$]±I¨÷̉ELô{4—OIûI= ؼXá9”h”æárṽœOÁË“‹́FĐ̀ëƯ³1—ä!ñ hæ–çt¬—~IGóXaơh…n+>Gl€«c4R¾£±¯L! p?H¬*́W©Ö:æfCl ƒr—mGc5[œsLơ³¡ĂÀdâ‰%àgZ’hgN¿ÀîŒs»‡øA–äºtæ£pÍ=fîèa‰VB´?#1áùx`h‘‘ÄfÍPH̀87²®‡)‘µ@ÍĐxewƯ4Dæ'®êÊzˆÀ“)rÚ¯‰œÑbÎUíñơÈ-1ɸˆ‰Tê´‚b*Cˆ*€µ_‡|…8  053v…â&æ­ ₫ù‘™>öü¨e,C”`corÖw̃)ơ>tJ‘µà’ù5,ÙaQÉáÎ ôä Ȧ|®¢…s—²₫3! ¹ÙÊ dYă?«D:)T®nàĐI¦‚£GÚ¯Y`ÊÊù×9Ü3…È4Êå!Ó´­\$ÏŸÛ£ê×ÓwG©Àí2gqM‡ê/a3-¬™åÊ+Û"OálÔ•:&jhœ‘}#Ằ#‹èDrÑøƒWÏÙTd²v3÷¢œÉ´&÷:úû½í ÷7Aˆ -t?&Ÿ„˜Án‚ÙŸ“SñÀ“œD‹[ 8óŒ:V°¹u¶̀ x*m{Ă³¾÷¾"B³lÁl‚Q)”²¹3RÄÅ V'A¨L·áÎÜzà2[V·§Ø°0̀ P®Pæo8ưÚ†;ƒ"ˆ¥”)^˜ &߲ͰFíMœ>.Ä-ÀÀ_¬Œhdí.€¢CGKâ5"KÓŒçô|iDÎè#cû±vÁ‰ưYæä »Óßt!°q& ăÆ›€"¾2«Đé…XñŸ¶¸s“>·n̉kËZPºH¹&‡¼1ªvⳋC…¸¢3aBCo!/ăÚTƯ®<…YØ(ʤK}!z W¢"jëˆÇˆå‰ÑJѼe&Qx1ÿÔ0»@oÆ₫̉ ¶¤ˆ¼Ñ\]0™•ñ́)*©RØ ;æ@†GßMđNW²(6Sei.Œu.‘¦ÎFIe#Qˆo B"n‹ÉhyN,ivƒ# Ï"£ˆ[ÔƒL‹®³"@œ§è¶yB`đÄH»h¬À…Đ‹«yáºƠ8 ‚kùÜÄeDæ¡[K@; ă;4ц“”bÆ51}ư‡·`÷Nƒ#wÂË>¥r@,dṣ́$½~¥aIŒ]+:æPBÛ¹‰8Á)¬‚9éÑ­í ¨J¡tOñYf¦{*§€öCc½ṭF,‡ÊĐÂÛÅ3NÈL@Æ]V¿P¹   _QQ$,!#‰{HƠt„₫ë ¶Æ$S¦à6‚#ÇùàÍu|ú·*¯mE?sí9¼‹¼±Vd|ó…5Jó›Àhï–vÔ~¹p!ª2pơ{1Á̀"±¶]ơè`¦p<¥cáKµú¹d$æ ÉXá|̀„QIgO[*b׆bÀCÁǗ< ¥œâL#FË̃÷ë¥ ÛÑ‚ƒø\Cs¿VzÚwÇfC¶;6™=6Ă½Jö nÆ·½§§÷d²)O'²C†C“v§e® ¬á÷„ŸÆw|₫ÀsøÈ-ö ä!¦#•‘ư½“y‰2¸ L¶½}=xÛç;”-§3^Hkưê™üX~&1ˆ³¬Ödá³=Sg,­K°‹Bàá8Z•}Üh%4ÅlFÜơ›*··x%(_$GV dŒ #› ®ÉÎ4)C{XbDÔmÂơiAÑ•,]deáƒ̀®)p·ŸÎxs°q$\ă¢Åpî@>ïÛ7“Óˆáµa8 ®Ê¤Ç :XzÛÑA’ômûÀº{Q₫/À/D‘Æd¥/z)“ÔdØXX ’…rfâDiÄ^'~ظ¯>k<‰è܆™Çw¿PFyéBƠ€ËÆZj¸K&²%ØŸƯL|́­±”u{ ŒpÄsˆaæ(pÈ21ö+2N«4å%h¤ÈB|xRÀ\Aaµè1v́@Qκ‡L'jÁ M4µO—ö|7Z†ŒGF{C¥SÎ,:9‡ĐX7Ë!t»™ĐA;°cf€‹æ âA{/î4W f[Ù#÷Ó~'ăZ“Ư‘ö2@œĐdô(ÄcW7ø†, Åm# âLWI‹ –-́ôc3N&D¬Ö m[„ÔÛdR"ê†3—Ø€æ;ƯD¬ªL‚¥6k̀̉ƒC•”tĐƒÀ9̃Đ\&…ǿLaá̀J=Røœ Î k,é¦$ ƒÈ­?xÚ9yûcZ ®;J lù zÁYèDû2>g}¨d ̉›=:]` é).J+© å—DèhPÑ„®æa(ÄÙX&@:ÛxŒùTæHÅ&ª.ÅDå™ơ•₫œ³¾jçiÇ£7ÏLÄkªôLi†©DB”$è,ƒ`“©, -RШ“ €(’æ” ÊàUă:ÇĐ®̉û/´(U~K›0æ·xă*ÉüÆ&[5ƒ½;‘P* €–3°êW´\!í M£\¢(^P>؉›J keç›'¬›ºv¿aÊƠûºăsĐ|(P³)dAÙ±̉v‰ÏàÀÓ ñ~†®…ĦâÄAE[À[<±t`Ar€˜ àLÏjq©ĐốĐpë»FQ0-L`&‘€ohú,*Ẹ̀&TÓ­™K3+á”b‰%O}%«8p)¤È ôq*ª‰ÊÊla*2p7 L¦ É `ŸÄœÖ›øfX+˰kdä6ë x'E2‰4¾¶íĂÆÂ;@#Đ4¿§|â²_²I8÷‡='͈>£ß"t«eÊåBƒ;°̉p¸¡`Wà>AO¿¦ÜIæ³0[V×CïĹÎÖj“^üKï ñyzZ„±A€₫&¼eµy‚€Î&`ˆ2N(Kc$ Aá ZسÑûév“¼Hă·2*½A4ë5AA4 _¡¬DŸ>gw”}â‡F®($Ę#l²ûµ²Æ ôUỹ9ö„Lå6? ₫u>a“¤«+Kœ¨ x¯”órb̃·ï›^«`Ăđn@n¡\¤¥Á}t@ÙiwÏ`qp™¶ºÂt`.Ü”£ |D‹©2¡;Ư°¬ĂœW&± Ø V?@k— 3c»Ù ;[ulüNêÎ ƒç¨(¢(¤ÆÜÙ 6¢ƠwwL1>7†ªá 1Ls`¼ÎÆÔ‚<8ömÅÑXÀ–Á8ŒÎ8Íï˹ª`C1ÇFéÙ*P6‰¿å¨À"F6^Œ <Ë:Fé¶óŒœíN¬`` ‚?ÊêZ¶ï…,#ÂHzơ0oɱ‰¦B-Ö††€3 l˜I$­hấb6pÛ*ñ!%{₫-2åçß5Ç ŨCSÏ¥ËF IߺăĐ'9y»¶qï¹°mV5±u?¸U2|D¥¶¦̀^Oob|Á´;äü †“n/«æÀßñzSY: /:Ε–7²`ÍmEiÇgF÷A±%7Ü4|U tèåÓËÀfév†À]E°æ,Î́›tH²¢àY »m &0ºMFM,ÖRÑaYr̉X›pEÓJ‚«¬¨y&`r}itLL½Mpß”ôT#JâÊ”ưØÎơi…úysZ{́? î]F“eÛ.Ȱ±²Ú!ư꾡QRMê©9×qØiIÆßS@æˆkcƠR°¾>].·œR$¸Múèœp;|â¡6‚êÁ,x°ƒåCfẸ̀ŒDdü‰‹` ä!X C‰`•°Î'F́íúö4ƒ1@-Ê’Hâ†9t>%Á‰̃ÇIû´r+gÓñ|ƯœÉ´)Sđ@˜aÍ:n|‰ë¢(B¡å®)‰' đeÅ@Vè:<‚Æ3v˜ T}Œ=₫s×1jĐ!j ª{Ưbe9`W}ăoY>p̀$·F¾@Ï ªlT£ Ä èBåÂÜ­ƪđPcªhar\;„dEó9ꢧÀq™"Z%mÇK(^“à åÍ(0P•j̉ÙÀa&Ÿf—Ø GȶNRË£YÛÏxè?̉´G€¬¡×Å̀Ù˜(îx;dÿÍÛdóˆbL0Ï¥Åøe4Yó88!Ë|8́jêaÁ7}+1UAr ´ÄD*…‚A¤b-°8½¬23Qq7rÍD\ …@ö‚¡í®`h3éK¬güFóÙ$beÏûÊÛ J 5¿¤:¨ăw˜•§]¦Pb̀¤©¼)@Rt'1HÁ̃ñB,ú²c™FÓ]QɼS’È PóƯJÆ)L>c˜SÁ†î;OÆ\RI0 ª±ñ¥ûæÜr`ª©E?2cÏ´Ä´êä»g,C¹g\™íÀ¬“*îQZ(\ú(çj©•L‚• &Ö7/¤µ±Œæ₫ hÛ͵wX­Ur*|€¥;ú Ră~´±ÙÅ$Áîx0i×§R¤µñ‰ú^í"³—á"'&È$ræËPă [¢ç6Ë©#áĂ’‰³"z"…es4gS„/TóÜzØØg Sj7̀áh°/4:Ø™‰ÿ¨ÂưĐ`¦úư^óƠ\åÊ´ÀåSQ}a'‘¸ƒ8£~₫¬ml¢âwep®*#Àïæ[̀çkeØàÎÀ?è†^+ƠNéŒ"g‚̉›Pµ0³ñ  ‡E*óœSd¹+^Ó€D_ÊÙÆ­ÛMü^Û”‰{Ü÷I0,3(î…ÜßትGp·LAv;È"èÍJ…ÁÑÀ‰@ăđ讣…Âà™¨Â$¨“I‘V`˰*‹:6!./ ¦>W‰2/i‘[9¶„zF₫0'™_ƒ rP¥j£—=MS#«»¢«ß”]ºÂ0,Zæ8ROfÝ܉Î_Ë¿Ê@,n«§N5˜¤ä“',ñÛCơvfY“G¶h…c¢0vs¡|’å§J\¾Qè’Afă„ÎVuºĂÂ*:`7̀{¤‚à‡Ø—æ|a˜rX1‹( 벑üUD'kY V…°m0„d•vS¡o§Â¢oÈû91¶!́ÚÆ˜¬=G¡OΫ*²&á\Q{đa$ Ä»Äëy¾Í ÷…̀]ÜöL‹ óKɦƒ~X¸aÂ3̉6ê$o à¹)ï=Åø-cM KưÚåëÑxk¢­ĂÚ¨.XYS鈵´dO 9g_Æä†kAăxjFUỹùú±˜ºgB- =Ö¥/résï<»?gËUMlŒG¤‘âdŒº€–c#½5$©œ ¼A±Í¥ë™k¥ĐdªÜù‚Có†”"ufIÂ(³D#Qˆ±töáV¸Ûƒ‘«A·ửA„́+Y‚}µ(\y[=ÉC•Îii>ÂW½ü&Êĵ*AɸŒ\%S%Nk´h é›Q\x̉2×›â¹$ZS 2̀º́JUMâïé sêuöb¯¦hySƯø{ÓOS4ö"« Ar)n…H ‰qÎβæ¼F’|ª ˜MXhë76{̉$ÎasµåC®¥÷ƒơ•hø²l˜ă Ă• Jªù„ IœhÔGo¼«#–sŒ̉͌ܥ.ÀØđ~Dt@3‹øœKÅ×ä;å~à /~`¿pNđÄ(øjâÊ öK—ƒ…uíü™Fåb“P‰‡èQ‰µ7¦kLŒU)*`ob<扗¸!< ;u„еkÙ¯ètøsÅ®Übj̀.°:Ÿ­ ơîo! ÿt̀¥ɪ’™̣slÛ*¥X©°Æª=äµ P?ö¿­g2uD—{qn‹ê‰Ï)̀×Ù´ú¿u®{% át̉`>¥2u%lÎ_)§u^q{%…66k«ÅY[Ææđq§î?3gPKÇ·¹£¬ ¤’çyÓºe¬ö¸´X ÅÇØ”G†˜‚êƠX]‰Ñ¥¾Zv•t\)0ÏLCa¿Àj2‚̀}’Ɔi— o×2=¹ûcâè?«÷£e¬°)¦5ŸÓ@⌾F¹)‡¿ïK^Ôrzªê½¯åÁÑ“NmÖ¨)>vEJZ{TE7­˜đ̃΋fßæó‘D—øÊ(¾ÆoTâ"¾{ÄGíàÆ „0ư!ªøaK.‡±%S%6,Ù°·u†%f7Hœñ%FG¥BS cpy„¿0Âêi>ŒÖ¬‹ ʧ”¶â\[ ¼ëCt¡Uh˜±Y&}7‡Rp°©§Mwæê;đªÚ˜ºä̃k„ ̀@N±L'x)¥‹ÍÉ‚ÂhJ0B‰ª™ỔåZÛ|=k|CơÎ ²„2ÈÜÉq骻GŒDiX÷²a™²È*KS å À­Z–xÚE #[Qq6íË–3â.›>ˆsèº̀a«—™RNFZf¯eÅk<ưc;LBûRÏeWFŸ·gíÑêÄÔÖ‹ÆaQĂpûÉ߉aÍØNÔ§5!9^Ư%JÄäN“t¢¬ïÅv‚ö®Îñ%]ă Í?á0[;:Óêóœn)äNËhÜ·A@&-ÂfK@×̃£FèÉÅ®e¿baLào Ă11«ƒ0́Ö¢Đªqx†l6G˜°Ê7ÆDFœb)̃œ„ AqûBE_²EC‚Z¾Íû‰¼)¼@ü̃i%87{ÿ/":ăI„¤-¶h£ê Å~5qơ†¾=¹;ag‡¿Âåbÿuṭîưúöäœ]@÷¿^°«ëCøàôœưzyz}z₫;<ºx÷Ûåé›·×ÉÛ‹³ă“K¼nïâ’>dï/¯OO®`NOÂ1¹»~®Øé•e¿^¿½x¸‰\¼f‡ç¿±ÿ8=?°“Śôä¿̃]\]³‹KvúË»³Ó“ă;=?:{|z₫fÀ~~ÍÎ/®“³Ó_NàׄlÚÚe‚]¼f¿œ\½=<¿>üùốôú7¼ÚîơéơùÉƠ¬crH³8zvxÉ̃½¿|wqu‡6,çùơéå »<½úvxeù?ßÚ’w'—¯/.9} ûCØ”]œ8ùí*ZĂ«¾€úù„âx®/p¹€9|sr5H ̀7'ç'—‡gvơîäè₫8=?:=>9¿><ƒq]œ_üç{ØăĂ3ÛIrxyz=\¼¿¶ú₫ê1ñÜbĐơ> »íaÿü₫:9¿¸f;ÙÙÅ¢âñáơ!Ă_²ŸO ơåÉùñÉ%̃áÑÑûËĂk–À'ẂêưƠơáé9í̀é₫ộØQ,0{}xzö₫²‰Éơ»xw‚]"&;A-®v¸ù́ô5»zôÖl³ôĐ½=¼b?Ÿœœ³Ăă§H—ÎÅƠƠ©Y“ ÓƒYÇÚW*^µ2€œÆ Ç@ñD—k-ó¥}ƃ6áË₫N’r%+(/ˆ N›Èqì)sÍTßÑRÜ‘ưµ†"cdh ‰×ôÄïlB”UÍ%íB̃Đg¼l£„« ù¨T9=ÀzÚtựVæÁØ;ŒC T;ƯφăFYW>—#^ŸNÊn+`áåU­ûù›CO·¯‡Ưˆœ‚,¸G´§Û·êâưa‡A7Ä4Zxø›ªơđ\Ü Í Ê-–†mĂæ&àîÚ& @sv.î́„K ÚyÓ̀UV¨̉Üù+ÏmD‰¹Ù̃x‹̀êƯ`¶kY%$íOQ̃ñÀx‰Êê`A€å} .zWÙg“èl#¶áƠ¼`₫iL‹ø‚o{³óµÙ›Í£Ë1 o¡ñÜX=½Àmâœ̣b8OÑ[̣1̀†í¾ÚƘ kq]AîƯ`,q—Ú²í£Ö…MÛÖ;„¤l)µJ’ksƯ´ Ù‰ï•5ÓÅ('«øZùDVƯ~̃…z/#µ'Y¤– ¬æ×²ÓøͶy•Ï;mEp·=a?/w7Ü86ïËjúu)Æuz|bV<:­Đú£Ëë†2/ص*{æ·ˆVë|‹M´ÿ´5©ªÙ«½½»»»Ư›¢̃UúfÏFé́m,z»¿Ç$µ8ØßËä­Í+,Q?‹j Aybøè’HÉo ÷E€™U«JªAƠ >ƒh%.ó–= }ËŸ‡v®» ÜÜeÄaUue c”9-¦°CUä +R]ß°Z5jzµInc&cxÀ¹‹‰‡ª #r₫|uqö₫úä́·P!¥jR1{œư%G«Á~ɧ3 ₫̃:(aïö÷à×1.́À&[̣ç1"OƠÔX¯#.el»®̀€³#ư¸Ô`̉x0ád:Đ̀““ù Œ×èªöW¦®6gœÛ#3Dï“Jè²Ô£̉Đ=¦xÆ.Æ(ÑÚX {÷3̣¸ÉL †µ¦ØaõŸúB́æ²ôDÔhñ²'6©Ï­΀]aŒ77#;ÓY®æÇc<-₫̣{]©Đ; f–|Đu‘èĂ…:iaư@K^“KŸ ư:Á]D¯] Ì€̣£+wIÀÄ72ô8&ûî f²)†éª1-8v=“ÂKYP¤°¸‰6ß\p€˜$*“ăbs œ¤"1µß>¤`™*‘s_S½?â2̉az4đßP!11ÓÊƯsÉtníÚÄ"îlÔΉÁÉFM&vùÏ ÈR÷»sÊJđ¬Ă[ùs]%˜XQÿ˜z ágKŸz³‰̀U©f“ù̃Ưd>,T5̀ofùî¤æûºèƒp«'ô2d@áaRÖ,>̀A›R|)S§E&>ĂÑ2yÑn4>ß:À?ö÷&/A˜i¸8̃²t6ô¿ _ºƠ4LgĂ\T•ĐåT:¡£Æû•>د&ÿ§ÎX¥^±¿£rö#Ûß«&ûUvàW¸¬§S®ç¦·°³îÿƒư˜Î>&‡[û£ƒĂư½Ñ¬Yb;OÓéÏØéÏëíô;=Zo§ÇØéñz;=ÁNOÖÛéḱôơz;}ƒ¾Yo§o±Ó·ëíô;=]o§gØéÙz;=ÇNÏ×Ûévz±̃Nßa§ïÖÛé%vz¹̃N¯°Ó«ơvz^¯·Ó_±Ó_;:ƯN½¼|™Ç! ¹@”Í£B—Ç ́Íœ¢Æ'@®9$ÜW¶rT×gƦLŸÀH-lÇ)g¼øiëåÖœ§~2¦ÉĉñárØîÍÎ$kŸ“Cú?Lm¾çYez̀GJW[ø,î½ư˜É†=©»Ï½ÈèÈ·jË!>¾–¹^Øb‘åÖÁ™º#éÀ³-ÙA3æ›ù±¬cÑ~̃‚“sm‹†·,ß—üF /n¡ˆ“¸Û: »—ñ)³Oº¤°…:Úi`m ….ˆ­üçËÇ®‡OSÍæ‡Uµu`₫Ø̀TM8Ñ;KßbDƠ•¦ˆ>t’GTªtëÀü±î¡¢Gdë€₫ự‘î¡”z¼"öÚ(5ăc9Ư: 7³lÇrjî|ë[1ßbÍX‘‰ñ=Ăé½Ñ³ÍLïVơ¬wjôvưÓúSúw3ÓúÀ5¦,ơÎ̀5ØÈä&5f́$íï¯r²Çbœ#÷~~•S}-óÜÎ₫₫:'™‹*ự…›ª{̣N8Í3Åf¦%ññ¯cÈ̃Ùđz>ëŸ+´– [®}̉9Ê}ôï—*ö=TÄ8ÙƒÛÚD QÀ®mĐ¿_¯döz Lk[¶×fÜĂKN¯TlØg̀={èr®Úû:è͘G×¶@7¢B"¤¿T"|̀ôPæ9âéDà,ưÏÍLÖܲæ0¯wΦ!s 70uH¢äm¯ư±¡³¥2ö'¶Áæ¦yu£¹â“¯o¨¶Đ¿_¦ ôPæöv Ü4kcnoåÍdÏCDíÖ¼añ´đÍer|Ô»6’¦ØÜ¹‡Nï¡PÖ§[àe[NÈâ÷­Yü₫å‹P™"éôïWw¦Ó´NíO¿̉)Âée' ÓD»)ưûƠÙMiZQñ¯¯v¥Ÿă†ä­?À@,‹ß_cÀ N₫üº7zöºÎóóTf8çà÷×´«oồñVó÷W8=عpđû+›æ;̀v’ôë+›big·!¾ú¥°39‚2"8[ó÷Wn ‘ÅïÑ~mö}‘Ë鱜̉~º__7 ƒÇ%4góăŸÂ•#‹ßÑ&Eÿ~™6©GNλ̉ăß_åd+=úùUN•\é₫ï¯s’+½ù䫜°Qºñ¯¯t‚¥ŸáW¥rS „ùăŸâô<g^1äE6̀Ñ8đÏ©N =è’<Ê:løg[Ô²6₫™ûÙ¿$˜Ä]·oêLƯ}®©́$³5Óù=069½GYƠ¿»₫&̀Ơ_‰Á|³́W§U¯S@ù“‹F›·j}•V¶§’¿bùtưP_E ÖúơĂ/I?}¨¨¾©ækơ‹Ôæ¤Ù¿₫ȦGL#“å &ÿ₫I§ơs` đïŸt P¦ÿ₫‰§À!¼Ëưù'È–D×øÇŸyf;́ßæ©”éDL¹› ưü3†^lAu’µCă1ÍDb(É>´up1±F¨ỵ§4D]Iú)©Øáÿ_¾nüP·•rÖ†à³è߯Î$5«)k‚₫ưºDîË-(o´6LĐ3 ñŸ/Ÿ|1M(•8ï₫üêĐf†AÖîϯΦJ3C̣v~]~µµÆÖFáeœY₫eE–¢:c^ç• ín>ùú€B^̀_1‡/çEºuÿỵ̈'ùPÎp½ׯ®EY¹ynÀO7—‡.âr}®eøp›ÇÇgϾ¢J³ñÖ> O7ü‡îå¯[P§qm{io/Ø:°=t –«:¶pÚ½%&má±RƠ¿ê wuú¯:Ăÿª3ü¯:Ăÿª3üƠ¦â÷̀UÁ7·q$É₫̃HesxEó’ÿ+Ù¸v.2 netcdf.closeHoctave-netcdf.html#netcdf_002ecreate*3.2.2.3 netcdf.createHoctave-netcdf.html#netcdf_002eendDef*3.2.2.4 netcdf.endDefBoctave-netcdf.html#netcdf_002einq$3.2.2.5 netcdf.inqNoctave-netcdf.html#netcdf_002einqFormat03.2.2.6 netcdf.inqFormatJoctave-netcdf.html#netcdf_002einqGrps,3.2.2.7 netcdf.inqGrpsToctave-netcdf.html#netcdf_002einqUnlimDims63.2.2.8 netcdf.inqUnlimDimsDoctave-netcdf.html#netcdf_002eopen&3.2.2.9 netcdf.openFoctave-netcdf.html#netcdf_002ereDef*3.2.2.10 netcdf.reDefJoctave-netcdf.html#netcdf_002esetFill.3.2.2.11 netcdf.setFillDoctave-netcdf.html#netcdf_002esync(3.2.2.12 netcdf.syncvoctave-netcdf.html#Low_002dlevel-functions-_002d-Dimensions 3.2.3 DimensionsHoctave-netcdf.html#netcdf_002edefDim*3.2.3.1 netcdf.defDimHoctave-netcdf.html#netcdf_002einqDim*3.2.3.2 netcdf.inqDimLoctave-netcdf.html#netcdf_002einqDimID.3.2.3.3 netcdf.inqDimIDNoctave-netcdf.html#netcdf_002erenameDim03.2.3.4 netcdf.renameDimnoctave-netcdf.html#Low_002dlevel-functions-_002d-Groups3.2.4 GroupsHoctave-netcdf.html#netcdf_002edefGrp*3.2.4.1 netcdf.defGrpNoctave-netcdf.html#netcdf_002einqDimIDs03.2.4.2 netcdf.inqDimIDsXoctave-netcdf.html#netcdf_002einqGrpFullNcid:3.2.4.3 netcdf.inqGrpFullNcidPoctave-netcdf.html#netcdf_002einqGrpName23.2.4.4 netcdf.inqGrpNameXoctave-netcdf.html#netcdf_002einqGrpNameFull:3.2.4.5 netcdf.inqGrpNameFullToctave-netcdf.html#netcdf_002einqGrpParent63.2.4.6 netcdf.inqGrpParentJoctave-netcdf.html#netcdf_002einqNcid,3.2.4.7 netcdf.inqNcidNoctave-netcdf.html#netcdf_002einqVarIDs03.2.4.8 netcdf.inqVarIDstoctave-netcdf.html#Low_002dlevel-functions-_002d-Variables3.2.5 VariablesHoctave-netcdf.html#netcdf_002edefVar*3.2.5.1 netcdf.defVarXoctave-netcdf.html#netcdf_002edefVarChunking:3.2.5.2 netcdf.defVarChunkingVoctave-netcdf.html#netcdf_002edefVarDeflate83.2.5.3 netcdf.defVarDeflatePoctave-netcdf.html#netcdf_002edefVarFill23.2.5.4 netcdf.defVarFill\octave-netcdf.html#netcdf_002edefVarFletcher32>3.2.5.5 netcdf.defVarFletcher32Hoctave-netcdf.html#netcdf_002egetVar*3.2.5.6 netcdf.getVarHoctave-netcdf.html#netcdf_002einqVar*3.2.5.7 netcdf.inqVarXoctave-netcdf.html#netcdf_002einqVarChunking:3.2.5.8 netcdf.inqVarChunkingVoctave-netcdf.html#netcdf_002einqVarDeflate83.2.5.9 netcdf.inqVarDeflatePoctave-netcdf.html#netcdf_002einqVarFill43.2.5.10 netcdf.inqVarFill\octave-netcdf.html#netcdf_002einqVarFletcher32@3.2.5.11 netcdf.inqVarFletcher32Loctave-netcdf.html#netcdf_002einqVarID03.2.5.12 netcdf.inqVarIDHoctave-netcdf.html#netcdf_002eputVar,3.2.5.13 netcdf.putVarNoctave-netcdf.html#netcdf_002erenameVar23.2.5.14 netcdf.renameVarvoctave-netcdf.html#Low_002dlevel-functions-_002d-Attributes 3.2.6 AttributesJoctave-netcdf.html#netcdf_002ecopyAtt,3.2.6.1 netcdf.copyAttHoctave-netcdf.html#netcdf_002edelAtt*3.2.6.2 netcdf.delAttHoctave-netcdf.html#netcdf_002egetAtt*3.2.6.3 netcdf.getAttHoctave-netcdf.html#netcdf_002einqAtt*3.2.6.4 netcdf.inqAttLoctave-netcdf.html#netcdf_002einqAttID.3.2.6.5 netcdf.inqAttIDPoctave-netcdf.html#netcdf_002einqAttName23.2.6.6 netcdf.inqAttNameHoctave-netcdf.html#netcdf_002eputAtt*3.2.6.7 netcdf.putAttNoctave-netcdf.html#netcdf_002erenameAtt03.2.6.8 netcdf.renameAttoctave-netcdf.html#Low_002dlevel-functions-_002d-User_002dDefined-Types03.2.7 User-Defined TypesJoctave-netcdf.html#netcdf_002edefVlen,3.2.7.1 netcdf.defVlenRoctave-netcdf.html#netcdf_002einqUserType43.2.7.2 netcdf.inqUserTypeJoctave-netcdf.html#netcdf_002einqVlen,3.2.7.3 netcdf.inqVlentoctave-netcdf.html#Low_002dlevel-functions-_002d-Utilities3.2.8 UtilitiesRoctave-netcdf.html#netcdf_002egetConstant43.2.8.1 netcdf.getConstant\octave-netcdf.html#netcdf_002egetConstantNames>3.2.8.2 netcdf.getConstantNames@octave-netcdf.html#Test-function"3.3 Test functionDoctave-netcdf.html#test_005fnetcdf"3.3.1 test_netcdf4octave-netcdf.html#CopyingJAppendix A GNU General Public License0octave-netcdf.html#Index Indexnetcdf-1.0.19/doc/octave-netcdf.qhc0000644000000000000000000031000015126111435013750 0ustar00SQLite format 3@ ##.~Z ²¨†’$ º  w † ä h ó z ó H¾"¾fó| ¨b''tableVersionFilterVersionFilterCREATE TABLE VersionFilter (Version TEXT, FilterId INTEGER)n++tableComponentFilterComponentFilterCREATE TABLE ComponentFilter (ComponentName TEXT, FilterId INTEGER)u--tableComponentMappingComponentMappingCREATE TABLE ComponentMapping (ComponentId INTEGER, NamespaceId INTEGER)q))tableComponentTableComponentTableCREATE TABLE ComponentTable (ComponentId INTEGER PRIMARY KEY, Name TEXT)VtableFilterFilterCREATE TABLE Filter (FilterId INTEGER PRIMARY KEY, Name TEXT)b%%tableVersionTableVersionTableCREATE TABLE VersionTable (NamespaceId INTEGER, Version TEXT)))mtableTimeStampTableTimeStampTableCREATE TABLE TimeStampTable (NamespaceId INTEGER, FolderId INTEGER, FilePath TEXT, Size INTEGER, TimeStamp TEXT)551tableOptimizedFilterTableOptimizedFilterTableCREATE TABLE OptimizedFilterTable (NamespaceId INTEGER, FilterAttributeId INTEGER)(77otableFileAttributeSetTableFileAttributeSetTableCREATE TABLE FileAttributeSetTable (NamespaceId INTEGER, FilterAttributeSetId INTEGER, FilterAttributeId INTEGER) 33/tableContentsFilterTableContentsFilterTableCREATE TABLE ContentsFilterTable (FilterAttributeId INTEGER, ContentsId INTEGER )w --!tableIndexFilterTableIndexFilterTable CREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER)s ++tableFileFilterTableFileFilterTable CREATE TABLE FileFilterTable (FilterAttributeId INTEGER, FileId INTEGER)z ''3tableContentsTableContentsTable CREATE TABLE ContentsTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Data BLOB) !!‚ tableIndexTableIndexTable CREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT)''MtableFileNameTableFileNameTable CREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER PRIMARY KEY, Title TEXT)e'' tableSettingsTableSettingsTableCREATE TABLE SettingsTable (Key TEXT PRIMARY KEY, Value BLOB )9M'indexsqlite_autoindex_SettingsTable_1SettingsTableh##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )u##1tableFolderTableFolderTableCREATE TABLE FolderTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Name TEXT )x))+tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY, Name TEXT, FilePath TEXT ) ËË3I/octave.community.octave-netcdfoctave-netcdf.qch ÷÷ doc    #Ô¶{fS>#9FullTextSearchFallback%CreationTimeiY ) HideAddressBar- EnableAddressBarA EnableDocumentationManager; HideFilterFunctionality? EnableFilterFunctionality*-;LastRegisterTime2026-01-03T07:35:36.447 ?Z~“Î?k²́9FullTextSearchFallback%CreationTime)HideAddressBar-EnableAddressBarAEnableDocumentationManager;HideFilterFunctionality?EnableFilterFunctionality- LastRegisterTime ‘º‘' //octave-netcdf.cssoctave-netcdf.cssD 1goctave-netcdf.htmlOctave NetCDF - A NetCDF interface for Octave Hvç̉½¨vY6í¸‰T Ô ¯ c <  î Å ’ o J ! ₫ Ă œ u J  ê Ă – _ 0 ù Æ p 7 Ù¤u:́µ€QëÄ—\3 従d=Á˜g>Ô™v!H# +test_netcdftest_005fnetcdf9G; Cnetcdf.getConstantNamesnetcdf_002egetConstantNames/F1 9netcdf.getConstantnetcdf_002egetConstant7E [UtilitiesLow_002dlevel-functions-_002d-Utilities'D) 1netcdf.inqVlennetcdf_002einqVlen/C1 9netcdf.inqUserTypenetcdf_002einqUserType'B) 1netcdf.defVlennetcdf_002edefVlenMA1 uUser-Defined TypesLow_002dlevel-functions-_002d-User_002dDefined-Types+@- 5netcdf.renameAttnetcdf_002erenameAtt%?' /netcdf.putAttnetcdf_002eputAtt->/ 7netcdf.inqAttNamenetcdf_002einqAttName)=+ 3netcdf.inqAttIDnetcdf_002einqAttID%<' /netcdf.inqAttnetcdf_002einqAtt%;' /netcdf.getAttnetcdf_002egetAtt%:' /netcdf.delAttnetcdf_002edelAtt'9) 1netcdf.copyAttnetcdf_002ecopyAtt98! ]AttributesLow_002dlevel-functions-_002d-Attributes+7- 5netcdf.renameVarnetcdf_002erenameVar%6' /netcdf.putVarnetcdf_002eputVar)5+ 3netcdf.inqVarIDnetcdf_002einqVarID94; Cnetcdf.inqVarFletcher32netcdf_002einqVarFletcher32-3/ 7netcdf.inqVarFillnetcdf_002einqVarFill325 =netcdf.inqVarDeflatenetcdf_002einqVarDeflate517 ?netcdf.inqVarChunkingnetcdf_002einqVarChunking%0' /netcdf.inqVarnetcdf_002einqVar%/' /netcdf.getVarnetcdf_002egetVar9.; Cnetcdf.defVarFletcher32netcdf_002edefVarFletcher32--/ 7netcdf.defVarFillnetcdf_002edefVarFill3,5 =netcdf.defVarDeflatenetcdf_002edefVarDeflate5+7 ?netcdf.defVarChunkingnetcdf_002edefVarChunking%*' /netcdf.defVarnetcdf_002edefVar7) [VariablesLow_002dlevel-functions-_002d-Variables+(- 5netcdf.inqVarIDsnetcdf_002einqVarIDs'') 1netcdf.inqNcidnetcdf_002einqNcid1&3 ;netcdf.inqGrpParentnetcdf_002einqGrpParent5%7 ?netcdf.inqGrpNameFullnetcdf_002einqGrpNameFull-$/ 7netcdf.inqGrpNamenetcdf_002einqGrpName5#7 ?netcdf.inqGrpFullNcidnetcdf_002einqGrpFullNcid+"- 5netcdf.inqDimIDsnetcdf_002einqDimIDs%!' /netcdf.defGrpnetcdf_002edefGrp1  UGroupsLow_002dlevel-functions-_002d-Groups+- 5netcdf.renameDimnetcdf_002erenameDim)+ 3netcdf.inqDimIDnetcdf_002einqDimID%' /netcdf.inqDimnetcdf_002einqDim%' /netcdf.defDimnetcdf_002edefDim9! ]DimensionsLow_002dlevel-functions-_002d-Dimensions!# +netcdf.syncnetcdf_002esync') 1netcdf.setFillnetcdf_002esetFill#% -netcdf.reDefnetcdf_002ereDef!# +netcdf.opennetcdf_002eopen13 ;netcdf.inqUnlimDimsnetcdf_002einqUnlimDims') 1netcdf.inqGrpsnetcdf_002einqGrps+- 5netcdf.inqFormatnetcdf_002einqFormat! )netcdf.inqnetcdf_002einq%' /netcdf.endDefnetcdf_002eendDef%' /netcdf.createnetcdf_002ecreate#% -netcdf.closenetcdf_002eclose#% -netcdf.abortnetcdf_002eabortC+ gFile OperationsLow_002dlevel-functions-_002d-File-Operations9 ; Cnetcdf.setDefaultFormatnetcdf_002esetDefaultFormat3 5 =netcdf.setChunkCachenetcdf_002esetChunkCache- / 7netcdf.inqLibVersnetcdf_002einqLibVers3 5 =netcdf.getChunkCachenetcdf_002egetChunkCacheG / kLibrary FunctionsLow_002dlevel-functions-_002d-Library-Functions!' 'ncwriteschemancwriteschema! !ncwriteattncwriteatt ncwritencwrite ncreadattncreadatt ncreadncread ncinfoncinfo ncdispncdisp nccreatenccreate mmÛ ¶$octave-netcdf.htmlhOctave NetCDF - A NetCDF interface for Octave ManualRoctave-netcdf.html#Installing-and-loading01 Installing and loadingPoctave-netcdf.html#Online-Direct-install21.1 Online Direct installNoctave-netcdf.html#Off_002dline-install(1.2 Off-line install4octave-netcdf.html#Loading1.3 LoadingNoctave-netcdf.html#Basic-Usage-Overview,2 Basic Usage OverviewVoctave-netcdf.html#High-level-functionality82.1 High level functionalityToctave-netcdf.html#Low-level-functionality62.2 Low level functionalityJoctave-netcdf.html#Function-Reference(3 Function ReferenceVoctave-netcdf.html#High_002dlevel-functions03.1 High-level functions6octave-netcdf.html#nccreate3.1.1 nccreate2octave-netcdf.html#ncdisp3.1.2 ncdisp2octave-netcdf.html#ncinfo3.1.3 ncinfo2octave-netcdf.html#ncread3.1.4 ncread8octave-netcdf.html#ncreadatt3.1.5 ncreadatt4octave-netcdf.html#ncwrite3.1.6 ncwrite:octave-netcdf.html#ncwriteatt 3.1.7 ncwriteatt@octave-netcdf.html#ncwriteschema&3.1.8 ncwriteschemaToctave-netcdf.html#Low_002dlevel-functions.3.2 Low-level functions„octave-netcdf.html#Low_002dlevel-functions-_002d-Library-Functions.3.2.1 Library FunctionsVoctave-netcdf.html#netcdf_002egetChunkCache83.2.1.1 netcdf.getChunkCachePoctave-netcdf.html#netcdf_002einqLibVers23.2.1.2 netcdf.inqLibVersVoctave-netcdf.html#netcdf_002esetChunkCache83.2.1.3 netcdf.setChunkCache\octave-netcdf.html#netcdf_002esetDefaultFormat>3.2.1.4 netcdf.setDefaultFormat€octave-netcdf.html#Low_002dlevel-functions-_002d-File-Operations*3.2.2 File OperationsFoctave-netcdf.html#netcdf_002eabort(3.2.2.1 netcdf.abortFoctave-netcdf.html#netcdf_002eclose(3.2.2      ÑÑ- /3octave-netcdf.qchp2026-01-03T07:35:36 ûû  øødoc ûû  .2 netcdf.closeHoctave-netcdf.html#netcdf_002ecreate*3.2.2.3 netcdf.createHoctave-netcdf.html#netcdf_002eendDef*3.2.2.4 netcdf.endDefBoctave-netcdf.html#netcdf_002einq$3.2.2.5 netcdf.inqNoctave-netcdf.html#netcdf_002einqFormat03.2.2.6 netcdf.inqFormatJoctave-netcdf.html#netcdf_002einqGrps,3.2.2.7 netcdf.inqGrpsToctave-netcdf.html#netcdf_002einqUnlimDims63.2.2.8 netcdf.inqUnlimDimsDoctave-netcdf.html#netcdf_002eopen&3.2.2.9 netcdf.openFoctave-netcdf.html#netcdf_002ereDef*3.2.2.10 netcdf.reDefJoctave-netcdf.html#netcdf_002esetFill.3.2.2.11 netcdf.setFillDoctave-netcdf.html#netcdf_002esync(3.2.2.12 netcdf.syncvoctave-netcdf.html#Low_002dlevel-functions-_002d-Dimensions 3.2.3 DimensionsHoctave-netcdf.html#netcdf_002edefDim*3.2.3.1 netcdf.defDimHoctave-netcdf.html#netcdf_002einqDim*3.2.3.2 netcdf.inqDimLoctave-netcdf.html#netcdf_002einqDimID.3.2.3.3 netcdf.inqDimIDNoctave-netcdf.html#netcdf_002erenameDim03.2.3.4 netcdf.renameDimnoctave-netcdf.html#Low_002dlevel-functions-_002d-Groups3.2.4 GroupsHoctave-netcdf.html#netcdf_002edefGrp*3.2.4.1 netcdf.defGrpNoctave-netcdf.html#netcdf_002einqDimIDs03.2.4.2 netcdf.inqDimIDsXoctave-netcdf.html#netcdf_002einqGrpFullNcid:3.2.4.3 netcdf.inqGrpFullNcidPoctave-netcdf.html#netcdf_002einqGrpName23.2.4.4 netcdf.inqGrpNameXoctave-netcdf.html#netcdf_002einqGrpNameFull:3.2.4.5 netcdf.inqGrpNameFullToctave-netcdf.html#netcdf_002einqGrpParent63.2.4.6 netcdf.inqGrpParentJoctave-netcdf.html#netcdf_002einqNcid,3.2.4.7 netcdf.inqNcidNoctave-netcdf.html#netcdf_002einqVarIDs03.2.4.8 netcdf.inqVarIDstoctave-netcdf.html#Low_002dlevel-functions-_002d-Variables3.2.5 VariablesHoctave-netcdf.html#netcdf_002edefVar*3.2.5.1 netcdf.defVarXoctave-netcdf.html#netcdf_002edefVarChunking:3.2.5.2 netcdf.defVarChunkingVoctave-netcdf.html#netcdf_002edefVarDeflate83.2.5.3 netcdf.defVarDeflatePoctave-netcdf.html#netcdf_002edefVarFill23.2.5.4 netcdf.defVarFill\octave-netcdf.html#netcdf_002edefVarFletcher32>3.2.5.5 netcdf.defVarFletcher32Hoctave-netcdf.html#netcdf_002egetVar*3.2.5.6 netcdf.getVarHoctave-netcdf.html#netcdf_002einqVar*3.2.5.7 netcdf.inqVarXoctave-netcdf.html#netcdf_002einqVarChunking:3.2.5.8 netcdf.inqVarChunkingVoctave-netcdf.html#netcdf_002einqVarDeflate83.2.5.9 netcdf.inqVarDeflatePoctave-netcdf.html#netcdf_002einqVarFill43.2.5.10 netcdf.inqVarFill\octave-netcdf.html#netcdf_002einqVarFletcher32@3.2.5.11 netcdf.inqVarFletcher32Loctave-netcdf.html#netcdf_002einqVarID03.2.5.12 netcdf.inqVarIDHoctave-netcdf.html#netcdf_002eputVar,3.2.5.13 netcdf.putVarNoctave-netcdf.html#netcdf_002erenameVar23.2.5.14 netcdf.renameVarvoctave-netcdf.html#Low_002dlevel-functions-_002d-Attributes 3.2.6 AttributesJoctave-netcdf.html#netcdf_002ecopyAtt,3.2.6.1 netcdf.copyAttHoctave-netcdf.html#netcdf_002edelAtt*3.2.6.2 netcdf.delAttHoctave-netcdf.html#netcdf_002egetAtt*3.2.6.3 netcdf.getAttHoctave-netcdf.html#netcdf_002einqAtt*3.2.6.4 netcdf.inqAttLoctave-netcdf.html#netcdf_002einqAttID.3.2.6.5 netcdf.inqAttIDPoctave-netcdf.html#netcdf_002einqAttName23.2.6.6 netcdf.inqAttNameHoctave-netcdf.html#netcdf_002eputAtt*3.2.6.7 netcdf.putAttNoctave-netcdf.html#netcdf_002erenameAtt03.2.6.8 netcdf.renameAttoctave-netcdf.html#Low_002dlevel-functions-_002d-User_002dDefined-Types03.2.7 User-Defined TypesJoctave-netcdf.html#netcdf_002edefVlen,3.2.7.1 netcdf.defVlenRoctave-netcdf.html#netcdf_002einqUserType43.2.7.2 netcdf.inqUserTypeJoctave-netcdf.html#netcdf_002einqVlen,3.2.7.3 netcdf.inqVlentoctave-netcdf.html#Low_002dlevel-functions-_002d-Utilities3.2.8 UtilitiesRoctave-netcdf.html#netcdf_002egetConstant43.2.8.1 netcdf.getConstant\octave-netcdf.html#netcdf_002egetConstantNames>3.2.8.2 netcdf.getConstantNames@octave-netcdf.html#Test-function"3.3 Test functionDoctave-netcdf.html#test_005fnetcdf"3.3.1 test_netcdf4octave-netcdf.html#CopyingJAppendix A GNU General Public License0octave-netcdf.html#Index Indexnetcdf-1.0.19/doc/octave-netcdf.texi0000644000000000000000000001316115126111435014156 0ustar00\input texinfo @c -*-texinfo-*- @c Copyright (c) 2022-2025, John Donoghue @c Octave NetCDF - A NetCDF interface for Octave @c For manually generating the documentation use @c LANGUAGE=en makeinfo --html --no-split octave-netcdf.texi @c %*** Start of HEADER @setfilename octave-netcdf.info @settitle Octave NetCDF - A NetCDF interface for Octave @afourpaper @paragraphindent 0 @finalout @set COPYRIGHT_DATE 2022-@value{YEAR} @c @afourwide @c %*** End of the HEADER @include version.texi @include macros.texi @c %*** Start of TITLEPAGE @titlepage @c @center @image{octave-netcdf-logo} @vskip 0pt plus 1filll @title Octave NetCDF Toolkit @value{VERSION} @subtitle NetCDF functions for @acronym{GNU} Octave. @author John Donoghue @page @vskip 0pt plus 1filll Copyright @copyright{} @value{COPYRIGHT_DATE} John Donoghue Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the same conditions as for modified versions. @page @heading Distribution The @acronym{GNU} Octave NetCDF package is @dfn{free} software. Free software is a matter of the users' freedom to run, copy, distribute, study, change and improve the software. This means that everyone is free to use it and free to redistribute it on certain conditions. The @acronym{GNU} Octave NetCDF package is not, however, in the public domain. It is copyrighted and there are restrictions on its distribution, but the restrictions are designed to ensure that others will have the same freedom to use and redistribute Octave that you have. The precise conditions can be found in the @acronym{GNU} General Public License that comes with the @acronym{GNU} Octave NetCDF package and that also appears in @ref{Copying}. To download a copy of the @acronym{GNU} Octave NetCDF package, please visit @url{https://gnu-octave.github.io/octave-netcdf/}. @end titlepage @c %*** End of TITLEPAGE @dircategory Math @direntry * NetCDF for Octave: (netcdf). NetCDF Toolbox for Octave @end direntry @c %*** Start of BODY @contents @ifnottex @node Top @top Introduction The Octave NetCDF toolkit is a set of NetCDF routines for GNU Octave @end ifnottex @menu * Installing and loading:: Installing and loading the toolkit * Basic Usage Overview:: Basic Usage Overview * Function Reference:: Toolkit functions * Copying:: Copying * Index:: Index @end menu @c ------------------------------------------------------------------------- @node Installing and loading @chapter Installing and loading @cindex Installing and loading The toolkit must be installed and then loaded to be used. It can be installed in @acronym{GNU} Octave directly from the website, or can be installed in an off-line mode via a downloaded tarball. The toolkit has a dependency on the netcdf library (@url{https://www.unidata.ucar.edu/software/netcdf/}), so it must be installed in order to successfully install the toolkit. The toolkit must be then be loaded once per each @acronym{GNU} Octave session in order to use its functionality. @section Online Direct install @cindex Online install With an internet connection available, the package can be installed from octave-forge using the following command within @acronym{GNU} Octave: @example pkg install -forge netcdf @end example The latest released version of the toolkit will be downloaded and installed. @section Off-line install @cindex Off-line install With the toolkit package already downloaded, and in the current directory when running @acronym{GNU} Octave, the package can be installed using the following command within @acronym{GNU} Octave: @example pkg install netcdf-@value{VERSION}.tar.gz @end example @section Loading @cindex Loading Regardless of the method of installing the toolkit, in order to use its functions, the toolkit must be loaded using the pkg load command: @example pkg load netcdf @end example The toolkit must be loaded on each @acronym{GNU} Octave session. @c ------------------------------------------------------------------------- @node Basic Usage Overview @chapter Basic Usage Overview @cindex Basic Usage Overview The toolkit provides high and level functionality for reading and writing NetCDF format files. @section High level functionality @cindex High level functionality The toolkit provides the following high level functions: @itemize @bullet @item nccreate @item ncdisp @item ncinfo @item ncreadatt @item ncread @item ncwriteatt @item ncwrite @item ncwriteschema @end itemize @section Low level functionality @cindex Low level functionality The package aims to implement the netcdf interface of MATLAB in GNU Octave, however @acronym{GNU} Octave does not support the import function but the functions are available as netcdf.functionname @c ------------------------------------------------------------------------- @node Function Reference @chapter Function Reference @cindex Function Reference The functions currently available in the toolkit are described below; @include functions.texi @c ------------------------------------------------------------------------- @include gpl.texi @c ------------------------------------------------------------------------- @node Index @unnumbered Index @printindex cp @bye netcdf-1.0.19/doc/version.texi0000644000000000000000000000015315126111435013116 0ustar00@c autogenerated from Makefile @set VERSION 1.0.19 @set PACKAGE netcdf @set DATE 2025-01-03 @set YEAR 2025 netcdf-1.0.19/inst/0000755000000000000000000000000015126111435010747 5ustar00netcdf-1.0.19/inst/+netcdf/0000755000000000000000000000000015126111435012265 5ustar00netcdf-1.0.19/inst/+netcdf/abort.m0000644000000000000000000000177215126111435013561 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.abort(@var{ncid}) ## Aborts all changes since the last time the dataset entered in define mode. ## @end deftypefn function varargout = abort(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_abort (varargin{:}); else netcdf_abort (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/close.m0000644000000000000000000000173515126111435013556 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.close(@var{ncid}) ## Close the NetCDF file with the id @var{ncid}. ## @end deftypefn function varargout = close(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_close (varargin{:}); else netcdf_close (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/copyAtt.m0000644000000000000000000000244415126111435014072 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.copyAtt (@var{ncid},@var{varid},@var{name},@var{ncid_out},@var{varid_out}) ## Copies the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid} ## to the variable @var{varid_out} in the data set @var{ncid_out}. ## To copy a global attribute use netcdf.getConstant("global") for @var{varid} or @var{varid_out}. ## @seealso{netcdf.getAtt,netcdf.getConstant} ## @end deftypefn function varargout = copyAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_copyAtt (varargin{:}); else netcdf_copyAtt (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/create.m0000644000000000000000000000315715126111435013714 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{ncid} =} netcdf.create(@var{filename},@var{mode}) ## Creates the file named @var{filename} in the mode @var{mode} which can have the ## following values: ## "clobber" (overwrite existing files), ## "noclobber" (prevent to overwrite existing files) ## "64bit_offset" (use the 64bit-offset format), ## "netcdf4" (use the NetCDF4, i.e. HDF5 format) or ## "share" (concurrent reading of the dataset). ## @var{mode} can also be the numeric value return by netcdf.getConstant. In the later-case it can be combined with a bitwise-or. ## @end deftypefn ## @subsubheading Example ## @example ## mode = bitor(netcdf.getConstant("classic_model"), ... ## netcdf.getConstant("netcdf4")); ## ncid = netcdf.create("test.nc",mode); ## @end example function varargout = create(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_create (varargin{:}); else netcdf_create (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defDim.m0000644000000000000000000000213415126111435013633 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{dimid} =} netcdf.defDim(@var{ncid},@var{name},@var{len}) ## Define the dimension with the name @var{name} and the length @var{len} in the dataset @var{ncid}. The id of the dimension is returned. ## @end deftypefn function varargout = defDim(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defDim (varargin{:}); else netcdf_defDim (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defGrp.m0000644000000000000000000000201215126111435013645 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{new_ncid} =} netcdf.defGrp(@var{ncid},@var{name}) ## Define a group in a NetCDF file. ## @seealso{netcdf.inqGrps} ## @end deftypefn function varargout = defGrp(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defGrp (varargin{:}); else netcdf_defGrp (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defVar.m0000644000000000000000000000255315126111435013657 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{varid} = } netcdf.defVar(@var{ncid},@var{name},@var{xtype},@var{dimids}) ## Defines a variable with the name @var{name} in the dataset @var{ncid}. @var{xtype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The parameter @var{dimids} define the ids of the dimension. For scalar this parameter is the empty array ([]). The variable id is returned. ## @end deftypefn function varargout = defVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVar (varargin{:}); else netcdf_defVar (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defVarChunking.m0000644000000000000000000000240315126111435015340 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarChunking (@var{ncid},@var{varid},@var{storage},@var{chunkSizes}) ## Define the chunking settings of NetCDF variable @var{varid}. ## If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}. ## If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. ## @end deftypefn function varargout = defVarChunking(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarChunking (varargin{:}); else netcdf_defVarChunking (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defVarDeflate.m0000644000000000000000000000236715126111435015147 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarDeflate (@var{ncid},@var{varid},@var{shuffle},@var{deflate},@var{deflate_level}) ## Define the compression settings NetCDF variable @var{varid}. ## If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). ## @end deftypefn function varargout = defVarDeflate(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarDeflate (varargin{:}); else netcdf_defVarDeflate (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defVarFill.m0000644000000000000000000000233215126111435014461 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarFill(@var{ncid},@var{varid},@var{no_fill},@var{fillvalue}) ## Define the fill-value settings of the NetCDF variable @var{varid}. ## If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true. ## @end deftypefn function varargout = defVarFill(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarFill (varargin{:}); else netcdf_defVarFill (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defVarFletcher32.m0000644000000000000000000000241215126111435015473 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarFletcher32(@var{ncid},@var{varid},@var{checksum}) ## Defines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If @var{checksum} is the string "FLETCHER32", then fletcher32 checksums will be turned on for this variable. If @var{checksum} is "NOCHECKSUM", then checksums will be disabled. ## @end deftypefn function varargout = defVarFletcher32(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarFletcher32 (varargin{:}); else netcdf_defVarFletcher32 (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/defVlen.m0000644000000000000000000000251315126111435014027 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{varid} = } netcdf.defVlen(@var{ncid},@var{typename},@var{basetype}) ## Defines a NC_VLEN variable length array type with the type name @var{typename} and a base datatype of @var{basetype} in the dataset @var{ncid}. @var{basetype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The new data type id is returned. ## @end deftypefn function varargout = defVlen(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVlen (varargin{:}); else netcdf_defVlen (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/delAtt.m0000644000000000000000000000225115126111435013660 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.delAtt(@var{ncid},@var{varid},@var{name}) ## Deletes the attribute named @var{name} of the variable @var{varid} in the data set @var{ncid}. ## To delete a global attribute use netcdf.getConstant("global") for @var{varid}. ## @seealso{netcdf.defAtt,netcdf.getConstant} ## @end deftypefn function varargout = delAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_delAtt (varargin{:}); else netcdf_delAtt (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/endDef.m0000644000000000000000000000174215126111435013634 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.endDef (@var{ncid}) ## Leaves define-mode of NetCDF file @var{ncid}. ## @end deftypefn function varargout = endDef(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_endDef (varargin{:}); else netcdf_endDef (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/getAtt.m0000644000000000000000000000234615126111435013700 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{data} =} netcdf.getAtt (@var{ncid},@var{varid},@var{name}) ## Get the value of a NetCDF attribute. ## This function returns the value of the attribute called @var{name} of the variable ## @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be ## netcdf.getConstant("global"). ## @seealso{netcdf.putAtt} ## @end deftypefn function varargout = getAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getAtt (varargin{:}); else netcdf_getAtt (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/getChunkCache.m0000644000000000000000000000205715126111435015143 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{size}, @var{nelems}, @var{preemption}] =} netcdf.getChunkCache() ## Gets the default chunk cache settings in the HDF5 library. ## @end deftypefn function varargout = getChunkCache(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getChunkCache (varargin{:}); else netcdf_getChunkCache (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/getConstant.m0000644000000000000000000000206215126111435014734 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{value} =} netcdf.getConstant(@var{name}) ## Returns the value of a NetCDF constant called @var{name}. ## @seealso{netcdf.getConstantNames} ## @end deftypefn function varargout = getConstant(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getConstant (varargin{:}); else netcdf_getConstant (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/getConstantNames.m0000644000000000000000000000200415126111435015714 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{value} =} netcdf.getConstantNames() ## Returns a list of all constant names. ## @end deftypefn function varargout = getConstantNames(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getConstantNames (varargin{:}); else netcdf_getConstantNames (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/getVar.m0000644000000000000000000000315215126111435013674 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid}) ## @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start}) ## @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count}) ## @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride}) ## Get the data from a NetCDF variable. ## The data @var{data} is loaded from the variable @var{varid} of the NetCDF file @var{ncid}. ## @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), ## @var{count} is the number of elements of to be written along each dimension (default all elements) ## and @var{stride} is the sampling interval. ## @end deftypefn function varargout = getVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getVar (varargin{:}); else netcdf_getVar (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inq.m0000644000000000000000000000250715126111435013236 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{ndims},@var{nvars},@var{ngatts},@var{unlimdimid}] =} netcdf.inq(@var{ncid}) ## Return the number of dimension (@var{ndims}), the number of variables (@var{nvars}), the number of global attributes (@var{ngatts}) and the id of the unlimited dimension (@var{unlimdimid}). ## If no unlimited dimension is declared -1 is returned. For NetCDF4 files, one should use ## the function netcdf.inqUnlimDims as multiple unlimite dimension exists. ## @end deftypefn function varargout = inq(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inq (varargin{:}); else netcdf_inq (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqAtt.m0000644000000000000000000000204115126111435013700 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{xtype},@var{len}] = } netcdf.inqAtt(@var{ncid},@var{varid},@var{name}) ## Get attribute type and length. ## @seealso{netcdf.inqAttName} ## @end deftypefn function varargout = inqAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqAtt (varargin{:}); else netcdf_inqAtt (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqAttID.m0000644000000000000000000000232115126111435014116 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{attnum} =} netcdf.inqAttID(@var{ncid},@var{varid},@var{attname}) ## Return the attribute id @var{attnum} of the attribute named @var{attname} of the variable @var{varid} in the dataset @var{ncid}. ## For global attributes @var{varid} can be ## netcdf.getConstant("global"). ## @seealso{netcdf.inqAttName} ## @end deftypefn function varargout = inqAttID(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqAttID (varargin{:}); else netcdf_inqAttID (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqAttName.m0000644000000000000000000000240115126111435014501 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{name} =} netcdf.inqAttName (@var{ncid},@var{varid},@var{attnum}) ## Get the name of a NetCDF attribute. ## This function returns the name of the attribute with the id @var{attnum} of the variable ## @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be ## netcdf.getConstant("global"). ## @seealso{netcdf.inqAttName} ## @end deftypefn function varargout = inqAttName(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqAttName (varargin{:}); else netcdf_inqAttName (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqDim.m0000644000000000000000000000205115126111435013662 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{name},@var{length}] =} netcdf.inqDim(@var{ncid},@var{dimid}) ## Returns the name and length of a NetCDF dimension. ## @seealso{netcdf.inqDimID} ## @end deftypefn function varargout = inqDim(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqDim (varargin{:}); else netcdf_inqDim (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqDimID.m0000644000000000000000000000202515126111435014100 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{dimid} =} netcdf.inqDimID(@var{ncid},@var{dimname}) ## Return the id of a NetCDF dimension. ## @seealso{netcdf.inqDim} ## @end deftypefn function varargout = inqDimID(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqDimID (varargin{:}); else netcdf_inqDimID (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqDimIDs.m0000644000000000000000000000241415126111435014265 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{dimids} =} netcdf.inqDimID(@var{ncid}) ## @deftypefnx {} {@var{dimids} =} netcdf.inqDimID(@var{ncid},@var{include_parents}) ## Return the dimension ids defined in a NetCDF file. ## If @var{include_parents} is 1, the dimension ids of the parent group are also returned. ## Per default this is not the case (@var{include_parents} is 0). ## @seealso{netcdf.inqDim} ## @end deftypefn function varargout = inqDimIDs(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqDimIDs (varargin{:}); else netcdf_inqDimIDs (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqFormat.m0000644000000000000000000000217515126111435014410 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{format} =} netcdf.inqFormat(@var{ncid}) ## Return the NetCDF format of the dataset @var{ncid}. ## Format might be one of the following ## "FORMAT_CLASSIC", "FORMAT_64BIT", "FORMAT_NETCDF4" or "FORMAT_NETCDF4_CLASSIC" ## @end deftypefn function varargout = inqFormat(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqFormat (varargin{:}); else netcdf_inqFormat (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqGrpFullNcid.m0000644000000000000000000000207615126111435015331 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{grp_ncid} =} netcdf.inqGrpFullNcid(@var{ncid},@var{name}) ## Return the group id based on the full group name. ## @seealso{netcdf.inqGrpName} ## @end deftypefn function varargout = inqGrpFullNcid(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpFullNcid (varargin{:}); else netcdf_inqGrpFullNcid (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqGrpName.m0000644000000000000000000000201615126111435014503 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{name} =} netcdf.inqGrpName(@var{ncid}) ## Return group name in a NetCDF file. ## @seealso{netcdf.inqGrps} ## @end deftypefn function varargout = inqGrpName(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpName (varargin{:}); else netcdf_inqGrpName (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqGrpNameFull.m0000644000000000000000000000204715126111435015332 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{name} =} netcdf.inqGrpNameFull(@var{ncid}) ## Return full name of group in NetCDF file. ## @seealso{netcdf.inqGrpName} ## @end deftypefn function varargout = inqGrpNameFull(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpNameFull (varargin{:}); else netcdf_inqGrpNameFull (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqGrpParent.m0000644000000000000000000000203215126111435015052 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{parent_ncid} =} netcdf.inqGrpParent(@var{ncid}) ## Return id of the parent group ## @seealso{netcdf.inqGrpName} ## @end deftypefn function varargout = inqGrpParent(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpParent (varargin{:}); else netcdf_inqGrpParent (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqGrps.m0000644000000000000000000000200715126111435014065 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{ncids} =} netcdf.inqGrps(@var{ncid}) ## Return all groups ids in a NetCDF file. ## @seealso{netcdf.inqGrps} ## @end deftypefn function varargout = inqGrps(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrps (varargin{:}); else netcdf_inqGrps (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqLibVers.m0000644000000000000000000000176015126111435014525 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{vers} =} netcdf.inqLibVers() ## Returns the version of the NetCDF library. ## @end deftypefn function varargout = inqLibVers(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqLibVers (varargin{:}); else netcdf_inqLibVers (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqNcid.m0000644000000000000000000000202615126111435014030 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{grp_ncid} =} netcdf.inqNcid(@var{ncid},@var{name}) ## Return group id based on its name ## @seealso{netcdf.inqGrpFullNcid} ## @end deftypefn function varargout = inqNcid(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqNcid (varargin{:}); else netcdf_inqNcid (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqUnlimDims.m0000644000000000000000000000204715126111435015057 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{unlimdimids} =} netcdf.inqUnlimDims(@var{ncid}) ## Return the id of all unlimited dimensions of the NetCDF file @var{ncid}. ## @end deftypefn function varargout = inqUnlimDims(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqUnlimDims (varargin{:}); else netcdf_inqUnlimDims (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqUserType.m0000644000000000000000000000236515126111435014741 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}, @var{numfields}, @var{classid}] = } netcdf.inqUserType(@var{ncid},@var{typeid}) ## Provide information on a user defined type @var{typeid} in the dataset @var{ncid}. ## ## The function returns the typename, bytesize, base type id, number of fields and class identifier of the type. ## ## @end deftypefn function varargout = inqUserType(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqUserType (varargin{:}); else netcdf_inqUserType (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVar.m0000644000000000000000000000250515126111435013705 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{name},@var{nctype},@var{dimids},@var{nattr}] = } netcdf.inqVar (@var{ncid},@var{varid}) ## Inquires information about a NetCDF variable. ## This functions returns the @var{name}, the NetCDF type @var{nctype}, an array of dimension ids ## @var{dimids} and the number of attributes @var{nattr} of the NetCDF variable. @var{nctype} in an ## integer corresponding NetCDF constants. ## @seealso{netcdf.inqVarID,netcdf.getConstant} ## @end deftypefn function varargout = inqVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVar (varargin{:}); else netcdf_inqVar (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVarChunking.m0000644000000000000000000000241315126111435015372 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{storage},@var{chunkSizes}] = } netcdf.inqVarChunking (@var{ncid},@var{varid}) ## Determines the chunking settings of NetCDF variable @var{varid}. ## If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}. ## If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. ## @end deftypefn function varargout = inqVarChunking(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarChunking (varargin{:}); else netcdf_inqVarChunking (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVarDeflate.m0000644000000000000000000000237715126111435015201 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{shuffle},@var{deflate},@var{deflate_level}] = } netcdf.inqVarDeflate (@var{ncid},@var{varid}) ## Determines the compression settings NetCDF variable @var{varid}. ## If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). ## @end deftypefn function varargout = inqVarDeflate(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarDeflate (varargin{:}); else netcdf_inqVarDeflate (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVarFill.m0000644000000000000000000000234215126111435014513 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{no_fill},@var{fillvalue}] = } netcdf.inqVarFill(@var{ncid},@var{varid}) ## Determines the fill-value settings of the NetCDF variable @var{varid}. ## If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true. ## @end deftypefn function varargout = inqVarFill(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarFill (varargin{:}); else netcdf_inqVarFill (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVarFletcher32.m0000644000000000000000000000235615126111435015533 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{checksum} =} netcdf.inqVarFletcher32(@var{ncid},@var{varid}) ## Determines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If fletcher32 checksums is turned on for this variable, then @var{checksum} is the string "FLETCHER32". Otherwise it is the string "NOCHECKSUM". ## @end deftypefn function varargout = inqVarFletcher32(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarFletcher32 (varargin{:}); else netcdf_inqVarFletcher32 (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVarID.m0000644000000000000000000000205715126111435014124 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{varid} = } netcdf.inqVarID (@var{ncid},@var{name}) ## Return the id of a variable based on its name. ## @seealso{netcdf.defVar,netcdf.inqVarIDs} ## @end deftypefn function varargout = inqVarID(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarID (varargin{:}); else netcdf_inqVarID (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVarIDs.m0000644000000000000000000000212015126111435014276 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{varids} = } netcdf.inqVarID (@var{ncid}) ## Return all variable ids. ## This functions returns all variable ids in a NetCDF file or NetCDF group. ## @seealso{netcdf.inqVarID} ## @end deftypefn function varargout = inqVarIDs(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarIDs (varargin{:}); else netcdf_inqVarIDs (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/inqVlen.m0000644000000000000000000000224715126111435014064 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}] = } netcdf.inqVlen(@var{ncid},@var{typeid}) ## Provide information on a NC_VLEN variable length array type @var{typeid} in the dataset @var{ncid}. ## ## The function returns the typename, bytesize, and base type id. ## ## @end deftypefn function varargout = inqVlen(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVlen (varargin{:}); else netcdf_inqVlen (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/open.m0000644000000000000000000000200215126111435013376 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{ncid} =} netcdf.open(@var{filename},@var{mode}) ## Opens the file named @var{filename} in the mode @var{mode}. ## @end deftypefn function varargout = open(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_open (varargin{:}); else netcdf_open (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/putAtt.m0000644000000000000000000000240215126111435013722 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.putAtt (@var{ncid},@var{varid},@var{name},@var{data}) ## Defines a NetCDF attribute. ## This function defines the attribute called @var{name} of the variable ## @var{varid} in the NetCDF file @var{ncid}. The value of the attribute will be @var{data}. ## For global attributes @var{varid} can be ## netcdf.getConstant("global"). ## @seealso{netcdf.getAtt} ## @end deftypefn function varargout = putAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_putAtt (varargin{:}); else netcdf_putAtt (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/putVar.m0000644000000000000000000000313615126111435013727 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.putVar (@var{ncid},@var{varid},@var{data}) ## @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{data}) ## @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{data}) ## @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride},@var{data}) ## Put data in a NetCDF variable. ## The data @var{data} is stored in the variable @var{varid} of the NetCDF file @var{ncid}. ## @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), ## @var{count} is the number of elements of to be written along each dimension (default all elements) ## and @var{stride} is the sampling interval. ## @end deftypefn function varargout = putVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_putVar (varargin{:}); else netcdf_putVar (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/reDef.m0000644000000000000000000000173515126111435013476 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.reDef (@var{ncid}) ## Enter define-mode of NetCDF file @var{ncid}. ## @end deftypefn function varargout = reDef(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_reDef (varargin{:}); else netcdf_reDef (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/renameAtt.m0000644000000000000000000000237515126111435014372 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.renameAtt(@var{ncid},@var{varid},@var{old_name},@var{new_name}) ## Renames the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid}. @var{new_name} is the new name of the attribute. ## To rename a global attribute use netcdf.getConstant("global") for @var{varid}. ## @seealso{netcdf.copyAtt,netcdf.getConstant} ## @end deftypefn function varargout = renameAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_renameAtt (varargin{:}); else netcdf_renameAtt (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/renameDim.m0000644000000000000000000000211515126111435014343 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.renameDim(@var{ncid},@var{dimid},@var{name}) ## Renames the dimension with the id @var{dimid} in the data set @var{ncid}. @var{name} is the new name of the dimension. ## @end deftypefn function varargout = renameDim(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_renameDim (varargin{:}); else netcdf_renameDim (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/renameVar.m0000644000000000000000000000211315126111435014360 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.renameVar(@var{ncid},@var{varid},@var{name}) ## Renames the variable with the id @var{varid} in the data set @var{ncid}. @var{name} is the new name of the variable. ## @end deftypefn function varargout = renameVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_renameVar (varargin{:}); else netcdf_renameVar (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/setChunkCache.m0000644000000000000000000000216615126111435015160 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.setChunkCache(@var{size}, @var{nelems}, @var{preemption}) ## Sets the default chunk cache settings in the HDF5 library. The settings applies to all files which are subsequently opened or created. ## @end deftypefn function varargout = setChunkCache(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_setChunkCache (varargin{:}); else netcdf_setChunkCache (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/setDefaultFormat.m0000644000000000000000000000230415126111435015713 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{old_format} =} netcdf.setDefaultFormat(@var{format}) ## Sets the default format of the NetCDF library and returns the previous default format (as a numeric value). @var{format} can be ## "format_classic", "format_64bit", "format_netcdf4" or "format_netcdf4_classic". ## @end deftypefn function varargout = setDefaultFormat(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_setDefaultFormat (varargin{:}); else netcdf_setDefaultFormat (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/setFill.m0000644000000000000000000000217215126111435014047 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {@var{old_mode} =} netcdf.setFill(@var{ncid},@var{fillmode}) ## Change the fill mode (@var{fillmode}) of the data set @var{ncid}. The previous value of the fill mode is returned. @var{fillmode} can be either "fill" or "nofill". ## @end deftypefn function varargout = setFill(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_setFill (varargin{:}); else netcdf_setFill (varargin{:}); endif endfunction netcdf-1.0.19/inst/+netcdf/sync.m0000644000000000000000000000174415126111435013425 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.sync(@var{ncid}) ## Writes all changes to the disk and leaves the file open. ## @end deftypefn function varargout = sync(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_sync (varargin{:}); else netcdf_sync (varargin{:}); endif endfunction netcdf-1.0.19/inst/PKG_ADD0000644000000000000000000000071615126111435011767 0ustar00# on package load, attempt to load docs try pkg_dir = fileparts (fullfile (mfilename ("fullpath"))); doc_file = fullfile (pkg_dir, "doc", "octave-netcdf.qch"); if exist(doc_file, "file") if exist("__event_manager_register_documentation__") __event_manager_register_documentation__ (doc_file); elseif exist("__event_manager_register_doc__") __event_manager_register_doc__ (doc_file); endif endif catch # do nothing end_try_catch netcdf-1.0.19/inst/PKG_DEL0000644000000000000000000000073215126111435012001 0ustar00# on package unload, attempt to unload docs try pkg_dir = fileparts (fullfile (mfilename ("fullpath"))); doc_file = fullfile (pkg_dir, "doc", "octave-netcdf.qch"); if exist(doc_file, "file") if exist("__event_manager_unregister_documentation__") __event_manager_unregister_documentation__ (doc_file); elseif exist("__event_manager_unregister_doc__") __event_manager_unregister_doc__ (doc_file); endif endif catch # do nothing end_try_catch netcdf-1.0.19/inst/import_netcdf.m0000644000000000000000000000173615126111435013771 0ustar00## Copyright (C) 2023 John Donoghue ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} import_fits ## Dummy function provided to provide compatibility with older versions of GNU Octave netcdf ## ## Function is deprecated. ## @end deftypefn function import_netcdf # doesnt do anything anymore as package files are provided in inst/+netcdf endfunction netcdf-1.0.19/inst/nccreate.m0000644000000000000000000001030715126111435012712 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {} nccreate(@var{filename},@var{varname}) ## @deftypefnx {Function File} {} nccreate(@var{filename},@var{varname},"property",@var{value},...) ## ## Create the variable @var{varname} in the file @var{filename}. ## ## @subsubheading Properties ## The following properties can be used: ## @itemize ## @item "Dimensions": a cell array with the dimension names followed by their ## length or Inf if the dimension is unlimited. If the property is omitted, a ## scalar variable is created. ## @item "Datatype": a string with the Octave data type name ## (see @code{ncinfo} for the correspondence between Octave and NetCDF data ## types). The default data type is a "double". ## @item "Format": This can be "netcdf4_classic" (default), "classic", "64bit" ## or "netcdf4". ## @item "FillValue": the value used for undefined elements of the NetCDF ## variable. ## @item "ChunkSize": the size of the data chunks. If omitted, the variable is ## not chunked. ## @item "DeflateLevel": The deflate level for compression. It can be the string ## "disable" (default) for no compression or an integer between 0 (no ## compression) and 9 (maximum compression). ## @item "Shuffle": true for enabling the shuffle filter or false (default) for ## disabling it. ## @end itemize ## ## @subsubheading Example ## @example ## nccreate("test.nc","temp","Dimensions",@{"lon",10,"lat",20@},"Format","classic"); ## ncdisp("test.nc"); ## @end example ## @seealso{ncwrite} ## @end deftypefn function nccreate (filename, varname, varargin) dimensions = {}; datatype = 'double'; ncformat = 'netcdf4_classic'; FillValue = []; ChunkSize = []; DeflateLevel = 'disable'; Shuffle = false; for i = 1:2:length(varargin) if strcmp(varargin{i},'Dimensions') dimensions = varargin{i+1}; elseif strcmp(varargin{i},'Datatype') datatype = varargin{i+1}; elseif strcmp(varargin{i},'Format') ncformat = varargin{i+1}; elseif strcmp(varargin{i},'FillValue') FillValue = varargin{i+1}; elseif strcmp(varargin{i},'ChunkSize') ChunkSize = varargin{i+1}; elseif strcmp(varargin{i},'DeflateLevel') DeflateLevel = varargin{i+1}; elseif strcmp(varargin{i},'Shuffle') Shuffle = varargin{i+1}; else error(['unknown keyword ' varargin{i} '.']); endif endfor if ~isempty(stat(filename)) ncid = netcdf_open(filename,'NC_WRITE'); netcdf_reDef(ncid); else mode = format2mode(ncformat); ncid = netcdf_create(filename,mode); endif % create dimensions dimids = []; i = 1; while i <= length(dimensions) if i == length(dimensions) dimids(end+1) = netcdf_inqDimID(ncid,dimensions{i}); i = i+1; elseif ischar(dimensions{i+1}) dimids(end+1) = netcdf_inqDimID(ncid,dimensions{i}); i = i+1; else try if isinf(dimensions{i+1}) dimensions{i+1} = netcdf_getConstant('NC_UNLIMITED'); endif dimids(end+1) = netcdf_defDim(ncid,dimensions{i},dimensions{i+1}); catch dimids(end+1) = netcdf_inqDimID(ncid,dimensions{i}); end_try_catch i = i+2; endif endwhile varid = netcdf_defVar(ncid,varname,oct2nctype(datatype),dimids); if ~isempty(ChunkSize) netcdf_defVarChunking(ncid,varid,'chunked',ChunkSize); endif if ~isempty(FillValue) % value of nofill? netcdf_defVarFill(ncid,varid,false,FillValue); endif if isnumeric(DeflateLevel) netcdf_defVarDeflate(ncid,varid,Shuffle,true,DeflateLevel); endif netcdf_close(ncid); endfunction netcdf-1.0.19/inst/ncdisp.m0000644000000000000000000001060715126111435012411 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {} ncdisp (@var{filename}) ## Display meta-data of the NetCDF file @var{filename} ## ## @subsubheading Example ## @example ## ncdisp("test.nc"); ## @end example ## @seealso{ncinfo} ## @end deftypefn function ncdisp (filename) info = ncinfo(filename); fprintf("Source:\n"); indent = repmat(" ",[1 11]); fprintf("%s%s\n",indent,fullfile(filename)); fprintf("Format:\n"); fprintf("%s%s\n",indent,info.Format); colors.var = "red"; colors.att = "cyan"; colors.dim = "blue"; group_color = "green"; printgroup("",info,colors); endfunction function s = fmtattr(val) if ischar(val) s = sprintf("""%s""",val); else s = num2str(val); endif endfunction function s = fmtsize(sz) s = sprintf("%gx",sz); s = s(1:end-1); endfunction function printgroup(indent1,info,colors) indent2 = [indent1 repmat(" ",[1 11])]; indent3 = [indent2 repmat(" ",[1 11])]; % attributes if ~isempty(info.Attributes) fprintf("%sGlobal Attributes:\n",indent1); printattr(indent2,info.Attributes,colors); endif % dimensions if ~isempty(info.Dimensions) % length of the longest attribute name dim = info.Dimensions; maxlen = max(cellfun(@length,{dim.Name})); fprintf("%sDimensions:\n",indent1); for i = 1:length(dim) space = repmat(" ",[maxlen-length(dim(i).Name) 1]); fprintf("%s",indent2); colormsg(sprintf("%s %s= %d",dim(i).Name,space,dim(i).Length),colors.dim); fprintf("\n"); endfor endif % variables if isfield(info,"Variables") if ~isempty(info.Variables) % length of the longest attribute name vars = info.Variables; fprintf("%sVariables:\n",indent1); for i = 1:length(vars) %fprintf("%s%s\n",indent2(1:end-7),vars(i).Name); colormsg(sprintf("%s%s\n",indent2(1:end-7),vars(i).Name),colors.var); if ~isempty(vars(i).Size) sz = fmtsize(vars(i).Size); dimname = sprintf("%s,",vars(i).Dimensions.Name); dimname = dimname(1:end-1); else sz = "1x1"; dimname = ""; endif fprintf("%sSize: %s\n",indent2,sz); fprintf("%sDimensions: %s\n",indent2,dimname); fprintf("%sDatatype: %s\n",indent2,vars(i).Datatype); if ~isempty(vars(i).Attributes); fprintf("%sAttributes:\n",indent2); printattr(indent3,vars(i).Attributes,colors); endif endfor endif endif % groups if ~isempty(info.Groups) % length of the longest attribute name grps = info.Groups; fprintf("%sGroups:\n",indent1); for i = 1:length(grps) fprintf("%s%s\n",indent2(1:end-7),grps(i).Name); printgroup(indent2,grps(i),colors); endfor endif endfunction function printattr(indent,attr,colors) % length of the longest attribute name maxlen = max(cellfun(@length,{attr.Name})); for i = 1:length(attr) space = repmat(" ",[maxlen-length(attr(i).Name) 1]); %fprintf("%s%s %s= %s\n",indent,attr(i).Name,space,fmtattr(attr(i).Value)); fprintf("%s",indent); colormsg(sprintf("%s %s= %s\n",attr(i).Name,space,fmtattr(attr(i).Value)),colors.att); endfor endfunction function colormsg (msg,color) if strcmp(getenv("TERM"),"xterm") esc = char(27); % ANSI escape codes colors.black = [esc, "[30m"]; colors.red = [esc, "[31m"]; colors.green = [esc, "[32m"]; colors.yellow = [esc, "[33m"]; colors.blue = [esc, "[34m"]; colors.magenta = [esc, "[35m"]; colors.cyan = [esc, "[36m"]; colors.white = [esc, "[37m"]; reset = [esc, "[0m"]; c = getfield(colors,color); fprintf('%s',[c, msg, reset]); else fprintf('%s',msg); endif endfunction netcdf-1.0.19/inst/ncinfo.m0000644000000000000000000002007115126111435012401 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{info} =} ncinfo (@var{filename}) ## @deftypefnx {Function File} {@var{info} =} ncinfo (@var{filename}, @var{varname}) ## @deftypefnx {Function File} {@var{info} =} ncinfo (@var{filename}, @var{groupname}) ## Return information about an entire NetCDF file @var{filename} (i.e. the root ## group "/"), about the variable called @var{varname} or the group called ## @var{groupname}. ## ## The structure @var{info} has always the following fields: ## @itemize ## @item @var{Filename}: the name of the NetCDF file ## @item @var{Format}: one of the strings "CLASSIC", "64BIT", "NETCDF4" ## or "NETCDF4_CLASSIC" ## @end itemize ## ## The structure @var{info} has additional fields depending on whether a ## group of variable is queried. ## ## @subsubheading Groups ## ## Groups are returned as an array structure with the following fields: ## ## @itemize ## @item @var{Name}: the group name. The root group is named "/". ## @item @var{Dimensions}: a array structure with the dimensions. ## @item @var{Variables}: a array structure with the variables. ## @item @var{Attributes}: a array structure with global attributes. ## @item @var{Groups}: a array structure (one for each group) with the ## same fields as this structure. ## @end itemize ## ## @subsubheading Dimensions ## ## Dimensions are returned as an array structure with the following fields: ## @itemize ## @item @var{Name}: the name of the dimension ## @item @var{Length}: the length of the dimension ## @item @var{Unlimited}: true of the dimension has no fixed limited, false ## @end itemize ## ## @subsubheading Variables ## ## Variables are returned as an array structure with the following fields: ## @itemize ## @item @var{Name}: the name of the dimension ## @item @var{Dimensions}: array structure of all dimensions of this variable ## with the same structure as above. ## @item @var{Size}: array with the size of the variable ## @item @var{Datatype}: string with the corresponding octave data-type ## (see below) ## @item @var{Attributes}: a array structure of attributes ## @item @var{FillValue}: the NetCDF fill value of the variable. If the fill ## value is not defined, then this attribute is an empty array ([]). ## @item @var{DeflateLevel}: the NetCDF deflate level between 0 (no ## compression) and 9 (maximum compression). ## @item @var{Shuffle}: is true if the shuffle filter is activated to improve ## compression, otherwise false. ## @item @var{CheckSum}: is set to "fletcher32", if check-sums are used, ## otherwise this field is not defined. ## @end itemize ## ## @subsubheading Attributes ## ## Attributes are returned as an array structure with the following fields: ## @itemize ## @item @var{Name}: the name of the attribute ## @item @var{Value}: the value of the attribute (with the corresponding type) ## @item @var{Unlimited}: true of the dimension has no fixed limited, false ## @end itemize ## ## @subsubheading Data-types ## ## The following the the correspondence between the Octave and NetCDF ## data-types: ## ## @multitable @columnfractions .5 .5 ## @headitem Octave type @tab NetCDF type ## @item @code{int8} @tab @code{NC_BYTE} ## @item @code{uint8} @tab @code{NC_UBYTE} ## @item @code{int16} @tab @code{NC_SHORT} ## @item @code{uint16} @tab @code{NC_USHORT} ## @item @code{int32} @tab @code{NC_INT} ## @item @code{uint32} @tab @code{NC_UINT} ## @item @code{int64} @tab @code{NC_INT64} ## @item @code{uint64} @tab @code{NC_UINT64} ## @item @code{single} @tab @code{NC_FLOAT} ## @item @code{double} @tab @code{NC_DOUBLE} ## @item @code{char} @tab @code{NC_CHAR} ## @end multitable ## ## The output of @code{ncinfo} can be used to create a NetCDF file with the same ## meta-data using @code{ncwriteschema}. ## ## Note: If there are no attributes (or variable or groups), the corresponding ## field is an empty matrix and not an empty struct array for compatibility ## with matlab. ## ## @seealso{ncread,nccreate,ncwriteschema,ncdisp} ## ## @end deftypefn function info = ncinfo (filename, name) ncid = netcdf_open(filename,"NC_NOWRITE"); info.Filename = filename; if nargin == 1 name = "/"; endif [gid,varid] = ncloc(ncid,name); if isempty(varid) info = ncinfo_group(info,gid); else unlimdimIDs = netcdf_inqUnlimDims(gid); info = ncinfo_var(info,gid,varid,unlimdimIDs); endif # NetCDF format ncformat = netcdf_inqFormat(ncid); info.Format = lower(strrep(ncformat,'FORMAT_','')); netcdf_close(ncid); endfunction function dims = ncinfo_dim(ncid,dimids,unlimdimIDs) dims = []; for i=1:length(dimids) tmp = struct(); [tmp.Name, tmp.Length] = netcdf_inqDim(ncid,dimids(i)); tmp.Unlimited = any(unlimdimIDs == dimids(i)); if isempty(dims) dims = [tmp]; else dims(i) = tmp; endif endfor endfunction function vinfo = ncinfo_var(vinfo,ncid,varid,unlimdimIDs) [vinfo.Name,xtype,dimids,natts] = netcdf_inqVar(ncid,varid); % Information about dimension vinfo.Dimensions = ncinfo_dim(ncid,dimids,unlimdimIDs); if isempty(vinfo.Dimensions) vinfo.Size = []; else vinfo.Size = cat(2,vinfo.Dimensions.Length); endif % Data type if xtype >= netcdf_getConstant("NC_FIRSTUSERTYPEID") [utype_name, utype_bsize, utype_typeid, utype_nfields, utype_classid] = netcdf_inqUserType(ncid, xtype); vinfo.Datatype = nc2octtype(utype_typeid); if utype_classid == netcdf_getConstant("NC_VLEN") vinfo.Datatype = [vinfo.Datatype '*']; endif else vinfo.Datatype = nc2octtype(xtype); endif % Attributes vinfo.Attributes = []; for i = 0:natts-1 tmp = struct(); tmp.Name = netcdf_inqAttName(ncid,varid,i); tmp.Value = netcdf_getAtt(ncid,varid,tmp.Name); if isempty(vinfo.Attributes) vinfo.Attributes = [tmp]; else vinfo.Attributes(i+1) = tmp; endif endfor % chunking, fillvalue, compression [storage,vinfo.ChunkSize] = netcdf_inqVarChunking(ncid,varid); [nofill,vinfo.FillValue] = netcdf_inqVarFill(ncid,varid); if nofill vinfo.FillValue = []; endif [shuffle,deflate,vinfo.DeflateLevel] = ... netcdf_inqVarDeflate(ncid,varid); if ~deflate vinfo.DeflateLevel = []; endif vinfo.Shuffle = shuffle; # add checksum information if defined (unlike matlab) checksum = netcdf_inqVarFletcher32(ncid,varid); if ~strcmp(checksum,'nochecksum'); vinfo.Checksum = checksum; endif endfunction function info = ncinfo_group (info, ncid) info.Name = netcdf_inqGrpName(ncid); unlimdimIDs = netcdf_inqUnlimDims(ncid); [ndims,nvars,ngatts] = netcdf_inq(ncid); % dimensions dimids = netcdf_inqDimIDs(ncid); info.Dimensions = ncinfo_dim(ncid,dimids,unlimdimIDs); % variables for i=1:nvars info.Variables(i) = ncinfo_var(struct(),ncid,i-1,unlimdimIDs); endfor % global attributes info.Attributes = []; gid = netcdf_getConstant('NC_GLOBAL'); for i = 0:ngatts-1 tmp = struct(); tmp.Name = netcdf_inqAttName(ncid,gid,i); tmp.Value = netcdf_getAtt(ncid,gid,tmp.Name); if isempty(info.Attributes) info.Attributes = [tmp]; else info.Attributes(i+1) = tmp; endif endfor info.Groups = []; gids = netcdf_inqGrps(ncid); for i = 1:length(gids) tmp = ncinfo_group(struct(),gids(i)); if isempty(info.Groups) info.Groups = [tmp]; else info.Groups(i) = tmp; endif endfor endfunction netcdf-1.0.19/inst/ncread.m0000644000000000000000000001045015126111435012361 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{x} =} ncread (@var{filename}, @var{varname}) ## @deftypefnx {Function File} {@var{x} =} ncread (@var{filename}, @var{varname},@var{start},@var{count},@var{stride}) ## ## Read the variable @var{varname} from the NetCDF file @var{filename}. ## ## If @var{start},@var{count} and @var{stride} are present, a subset of the ## variable is loaded. The parameter @var{start} contains the starting indices ## (1-based), @var{count} is the number of elements and @var{stride} the ## increment between two successive elements. These parameters are vectors whose ## length is equal to the number of dimension of the variable. Elements of ## @var{count} might be Inf which means that as many values as possible are ## loaded. ## ## If the variable has the _FillValue attribute, then the corresponding values ## are replaced by NaN (except for characters). NetCDF attributes scale_factor ## (default 1) and add_offset (default 0) are use the transform the variable ## during the loading: ## ## x = scale_factor * x_in_file + add_offset ## ## The output data type matches the NetCDF datatype, except when the attributes ## _FillValue, add_offset or scale_factor are defined in which case the output ## is a array in double precision. ## ## Note that values equal to the attribute missing_value are not replaced by ## NaN (for compatibility). ## ## @subsubheading Example ## Read the data from variable 'mydata' in the file test.nc. ## @example ## data = ncread('test.nc','mydata'); ## @end example ## ## @seealso{ncwrite,ncinfo,ncdisp} ## ## @end deftypefn function x = ncread (filename, varname, start, count, stride) ncid = netcdf_open(filename,'NC_NOWRITE'); [gid,varid] = ncvarid(ncid,varname); [varname_,xtype,dimids,natts] = netcdf_inqVar(gid,varid); % number of dimenions nd = length(dimids); sz = zeros(1,nd); for i=1:length(dimids) [dimname, sz(i)] = netcdf_inqDim(gid,dimids(i)); endfor if nargin < 3 start = ones(1,nd); endif if nargin < 4 count = inf*ones(1,nd); endif if nargin < 5 stride = ones(1,nd); endif % replace inf in count i = count == inf; count(i) = (sz(i)-start(i))./stride(i) + 1; x = netcdf_getVar(gid,varid,start-1,count,stride); % apply attributes factor = []; offset = []; fv = []; for i = 0:natts-1 attname = netcdf_inqAttName(gid,varid,i); if strcmp(attname,'scale_factor') factor = netcdf_getAtt(gid,varid,'scale_factor'); elseif strcmp(attname,'add_offset') offset = netcdf_getAtt(gid,varid,'add_offset'); elseif strcmp(attname,'_FillValue') fv = netcdf_getAtt(gid,varid,'_FillValue'); endif endfor netcdf_close(ncid); # the scaling does not make sense of characters if xtype == netcdf_getConstant('char') || ... xtype == netcdf_getConstant('string') return; endif # special handling for vlen if iscell(x) if !isempty(fv) || !isempty(factor) || !isempty(offset) for k=1:length(x) v = x{k}; if !isa(x{k}, 'double') v = double(v); endif if !isempty(fv) v(v == fv) = NaN; endif if !isempty(factor) v = v * factor; endif if !isempty(offset) v = v + offset; endif x{k} = v; endfor endif else if !isempty(fv) || !isempty(factor) || !isempty(offset) if !isa(x, 'double') x = double(x); endif if !isempty(fv) x(x == fv) = NaN; endif if !isempty(factor) x = x * factor; endif if !isempty(offset) x = x + offset; endif endif endif endfunction netcdf-1.0.19/inst/ncreadatt.m0000644000000000000000000000325015126111435013072 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {@var{val} =} ncreadatt(@var{filename},@var{varname},@var{attname}) ## ## Return the attribute @var{attname} of the variable @var{varname} in the file ## @var{filename}. ## ## Global attributes can be accessed by using "/" or the group name as ## @var{varname}. The type of attribute is mapped to the Octave data types. ## (see @code{ncinfo}). ## ## @subsubheading Example ## Read global attribute 'creation_date' ## @example ## d = ncreadatt('test.nc','/','creation_date') ## @end example ## Read atribute 'myattr' assigned to variable mydata. ## @example ## d = ncreadattr('test.nc', 'mydata', 'myattr'); ## @end example ## @seealso{ncinfo,ncwriteatt} ## @end deftypefn function val = ncreadatt(filename,varname,attname) ncid = netcdf_open(filename,'NC_NOWRITE'); [gid,varid] = ncloc(ncid,varname); if isempty(varid) varid = netcdf_getConstant('NC_GLOBAL'); endif val = netcdf_getAtt(gid,varid,attname); netcdf_close(ncid); endfunction netcdf-1.0.19/inst/ncwrite.m0000644000000000000000000000621215126111435012601 0ustar00## Copyright (C) 2013-2023 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {} ncwrite (@var{filename}, @var{varname}, @var{x}) ## @deftypefnx {Function File} {} ncwrite (@var{filename}, @var{varname}, @var{x}, @var{start}, @var{stride}) ## ## Write array @var{x} to the the variable @var{varname} in the NetCDF file ## @var{filename}. ## ## The variable with the name @var{varname} and the appropriate dimension must ## already exist in the NetCDF file. ## ## If @var{start} and @var{stride} are present, a subset of the ## variable is written. The parameter @var{start} contains the starting indices ## (1-based) and @var{stride} the ## increment between two successive elements. These parameters are vectors whose ## length is equal to the number of dimension of the variable. ## ## If the variable has the _FillValue attribute, then the values equal to NaN ## are replaced by corresponding fill value NetCDF attributes scale_factor ## (default 1) and add_oddset (default 0) are use the transform the variable ## during writing: ## ## x_in_file = (x - add_offset)/scale_factor ## ## @subsubheading Example ## Create a netcdf file with a variable of 'mydata' and then write ## data to that variable. ## @example ## nccreate('myfile.nc','mydata'); ## ncwrite('myfile.nc','mydata', 101); ## @end example ## ## @seealso{ncread,nccreate} ## ## @end deftypefn function ncwrite (filename, varname, x, start, stride) ncid = netcdf_open(filename,'NC_WRITE'); [gid,varid] = ncvarid(ncid,varname); [varname_,xtype,dimids,natts] = netcdf_inqVar(gid,varid); % number of dimenions nd = length(dimids); sz = zeros(1,nd); count = zeros(1,nd); for i=1:length(dimids) [dimname, sz(i)] = netcdf_inqDim(gid,dimids(i)); count(i) = size(x,i); endfor if nargin < 4 start = ones(1,nd); endif if nargin < 5 stride = ones(1,nd); endif % apply attributes factor = []; offset = []; fv = []; for i = 0:natts-1 attname = netcdf_inqAttName(gid,varid,i); if strcmp(attname,'scale_factor') factor = netcdf_getAtt(gid,varid,'scale_factor'); elseif strcmp(attname,'add_offset') offset = netcdf_getAtt(gid,varid,'add_offset'); elseif strcmp(attname,'_FillValue') fv = netcdf_getAtt(gid,varid,'_FillValue'); endif endfor if ~isempty(offset) x = x - offset; endif if ~isempty(factor) x = x / factor; endif if ~isempty(fv) x(isnan(x)) = fv; endif netcdf_putVar(gid,varid,start-1,count,stride,x); netcdf_close(ncid); endfunction netcdf-1.0.19/inst/ncwriteatt.m0000644000000000000000000000327015126111435013313 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {} ncwriteatt(@var{filename},@var{varname},@var{attname},@var{val}) ## ## Defines the attribute @var{attname} of the variable @var{varname} in the file ## @var{filename} with the value @var{val}. ## ## Global attributes can be defined by using "/" or the group name as ## @var{varname}. The type of value is mapped to the NetCDF data types. ## (see @code{ncinfo}). ## ## @subsubheading Example ## Create a netcdf4 format file with a variable mydata and assign an attribute "units" to it. ## @example ## nccreate("myfile.nc", "mydata", "Format", "netcdf4"); ## ncwriteatt("myfile.nc", "mydata", "Units", "K"); ## @end example ## ## @seealso{ncinfo} ## @end deftypefn function ncwriteatt (filename, varname, attname, val) ncid = netcdf_open(filename,'NC_WRITE'); netcdf_reDef(ncid); [gid,varid] = ncloc(ncid,varname); if isempty(varid) varid = netcdf_getConstant('NC_GLOBAL'); endif netcdf_putAtt(ncid,varid,attname,val); netcdf_close(ncid); endfunction netcdf-1.0.19/inst/ncwriteschema.m0000644000000000000000000001100515126111435013756 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {Function File} {} ncwriteschema (@var{filename}, @var{schema}) ## ## Create a NetCDF called @var{filename} with the dimensions, attributes, ## variables and groups given by the structure @var{schema}. ## ## The variable @var{schema} has the same structure as the results of ## @code{ncinfo}. @code{ncinfo} and @code{ncwriteschema} can be used together to ## create a NetCDF using another file as a template: ## ## @subsubheading Example ## @example ## schema = ncinfo("template.nc"); ## # the new file should be named "new_file.nc" ## ncwriteschema("new_file.nc",schema); ## @end example ## ## Unused field in @var{schema} such as @var{ChunkSize}, @var{Shuffle}, ## @var{DeflateLevel}, @var{FillValue}, @var{Checksum} can be left-out if the ## corresponding feature is not used. ## ## Dimensions are considered as limited if the field @var{Unlimited} is missing, ## unless the dimension length is Inf. ## ## @seealso{ncinfo} ## ## @end deftypefn function ncwriteschema (filename, s) mode = format2mode(s.Format); ncid = netcdf_create(filename,mode); write_group(ncid,s) netcdf_close(ncid); endfunction function write_group(ncid,s) % normalize schema if ~isfield(s,'Dimensions') s.Dimensions = []; endif if isempty(s.Dimensions) s.Dimensions = struct('Name',{},'Length',{},'Unlimited',{}); endif if ~isfield(s,'Attributes') s.Attributes = struct('Name',{},'Value',{}); endif if ~isfield(s,'Variables') s.Variables = struct('Name',{},'Dimensions',{},'Datatype',{});; endif % dimension for i = 1:length(s.Dimensions) dim = s.Dimensions(i); if ~isfield(dim,'Unlimited') dim.Unlimited = false; endif len = dim.Length; if dim.Unlimited || isinf(len) len = netcdf_getConstant('NC_UNLIMITED'); endif s.Dimensions(i).id = netcdf_defDim(ncid,dim.Name,len); endfor % global attributes gid = netcdf_getConstant('NC_GLOBAL'); for j = 1:length(s.Attributes) netcdf_putAtt(ncid,gid,s.Attributes(j).Name,s.Attributes(j).Value); endfor % variables for i = 1:length(s.Variables) v = s.Variables(i); %v.Name % get dimension id dimids = zeros(length(v.Dimensions),1); for j = 1:length(v.Dimensions) dimids(j) = netcdf_inqDimID(ncid,v.Dimensions(j).Name); endfor % define variable dtype = oct2nctype(v.Datatype); varid = netcdf_defVar(ncid,v.Name,dtype,dimids); % define attributes for j = 1:length(v.Attributes) netcdf_putAtt(ncid,varid,v.Attributes(j).Name,v.Attributes(j).Value); endfor % define chunk size if isfield(v,'ChunkSize') if ~isempty(v.ChunkSize) netcdf_defVarChunking(ncid,varid,'chunked',v.ChunkSize); endif endif % define compression shuffle = false; deflatelevel = 0; if isfield(v,'Shuffle') if ~isempty(v.Shuffle) shuffle = v.Shuffle; endif endif if isfield(v,'DeflateLevel') if ~isempty(v.DeflateLevel) deflatelevel = v.DeflateLevel; endif endif if shuffle && defaltelevel != 0 deflate = defaltelevel != 0; netcdf_defVarDeflate(ncid,varid,shuffle,deflate,deflatelevel); endif % define fill value if isfield(v,'FillValue') if ~isempty(v.FillValue) % leave nofill setting unchanged [nofill,fillval] = netcdf_inqVarFill(ncid,varid); netcdf_defVarFill(ncid,varid,nofill,v.FillValue); endif endif % define checksum if isfield(v,'Checksum') if ~isempty(v.Checksum) netcdf_defVarFletcher32(ncid,varid,v.Checksum); endif endif endfor % groups if isfield(s,'Groups') if ~isempty(s.Groups) for i=1:length(s.Groups) g = s.Groups(i); gid = netcdf_defGrp(ncid,g.Name); write_group(gid,g); endfor endif endif endfunction netcdf-1.0.19/inst/private/0000755000000000000000000000000015126111435012421 5ustar00netcdf-1.0.19/inst/private/bug_47014.m0000644000000000000000000000054215126111435014114 0ustar00% test case for bug 47014 % https://savannah.gnu.org/bugs/?func=detailitem&item_id=47014 fname = [tempname '-octave-netcdf.nc']; nccreate(fname,'var','Dimensions',{'x',10},... 'FillValue',-32767,'Datatype','int16') var = ones(10,1); var(1) = NaN; ncwrite(fname,'var',var); var2 = ncread(fname,'var'); assert(isequaln(var,var2)) delete(fname) netcdf-1.0.19/inst/private/format2mode.m0000644000000000000000000000236115126111435015020 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function mode = format2mode(format) mode = netcdf_getConstant("NC_NOCLOBBER"); switch lower(format) case "classic" % do nothing case "64bit" mode = bitor(mode,netcdf_getConstant("NC_64BIT_OFFSET")); case "netcdf4_classic" mode = bitor(bitor(mode,netcdf_getConstant("NC_NETCDF4")),... netcdf_getConstant("NC_CLASSIC_MODEL")); case "netcdf4" mode = bitor(mode,netcdf_getConstant("NC_NETCDF4")); otherwise error("netcdf:unknownFormat","unknown format %s",format); endswitch endfunction netcdf-1.0.19/inst/private/nc2octtype.m0000644000000000000000000000333215126111435014672 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function otype = nc2octtype(nctype) if nctype == netcdf_getConstant("NC_CHAR") otype = "char"; elseif nctype == netcdf_getConstant("NC_FLOAT") otype = "single"; elseif nctype == netcdf_getConstant("NC_DOUBLE") otype = "double"; elseif nctype == netcdf_getConstant("NC_BYTE") otype = "int8"; elseif nctype == netcdf_getConstant("NC_SHORT") otype = "int16"; elseif nctype == netcdf_getConstant("NC_INT") otype = "int32"; elseif nctype == netcdf_getConstant("NC_INT64") otype = "int64"; elseif nctype == netcdf_getConstant("NC_UBYTE") otype = "uint8"; elseif nctype == netcdf_getConstant("NC_USHORT") otype = "uint16"; elseif nctype == netcdf_getConstant("NC_UINT") otype = "uint32"; elseif nctype == netcdf_getConstant("NC_UINT64") otype = "uint64"; elseif nctype == netcdf_getConstant("NC_STRING") otype = "string"; elseif nctype >= netcdf_getConstant("NC_FIRSTUSERTYPEID") otype = "user"; else error("netcdf:unknownDataType","unknown data type %d",nctype) endif endfunction netcdf-1.0.19/inst/private/ncloc.m0000644000000000000000000000173715126111435013705 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . % resolves a location (variable or group) by name function [gid,varid] = ncloc(ncid,name) try # try if name is a group gid = netcdf_inqGrpFullNcid(ncid,name); varid = []; catch # assume that name is a variable [gid,varid] = ncvarid(ncid,name); end_try_catch endfunction netcdf-1.0.19/inst/private/ncvarid.m0000644000000000000000000000175615126111435014236 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function [gid,varid] = ncvarid(ncid,varname) if strcmp(varname(1), '/') i = find(varname == '/',1,'last'); groupname = varname(1:i-1); varname = varname(i+1:end); gid = netcdf_inqGrpFullNcid(ncid,groupname); else gid = ncid; endif varid = netcdf_inqVarID(gid, varname); endfunction netcdf-1.0.19/inst/private/oct2nctype.m0000644000000000000000000000317415126111435014676 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function nctype = oct2nctype(otype) typemap.int8 = 'byte'; typemap.uint8 = 'ubyte'; typemap.int16 = 'short'; typemap.uint16 = 'ushort'; typemap.int32 = 'int'; typemap.uint32 = 'uint'; typemap.int64 = 'int64'; typemap.uint64 = 'uint64'; typemap.single = 'float'; typemap.double = 'double'; typemap.char = 'char'; typemap.string = 'string'; if ischar(otype) otype = lower(otype); if isfield(typemap,otype) nctype = typemap.(otype); else error('netcdf:unkownType','unknown type %s',otype); endif else nctype = otype; endif %typemap.byte = 'int8'; %typemap.ubyte = 'uint8'; %typemap.short = 'int16'; %typemap.ushort = 'uint16'; %typemap.int = 'int32'; %typemap.uint = 'uint32'; %typemap.int64 = 'int64'; %typemap.uint64 = 'uint64'; %typemap.float = 'single'; %typemap.double = 'double'; %typemap.char = 'char'; %typemap.string = 'string'; endfunction netcdf-1.0.19/inst/private/test_netcdf_attributes.m0000644000000000000000000002335215126111435017354 0ustar00%% Copyright (C) 2013-2025 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_netcdf_attributes() % rename attributes fname = [tempname '-octave-netcdf-rename-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); name = netcdf.inqAttName(ncid,gid,0); assert(strcmp(name,'toto')); netcdf.renameAtt(ncid,gid,'toto','lala'); name = netcdf.inqAttName(ncid,gid,0); assert(strcmp(name,'lala')); netcdf.close(ncid); delete(fname) % delete attributes fname = [tempname '-octave-netcdf-delete-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); varid = netcdf.defVar(ncid,'double_var','double',[]); [ndims,nvars,natts] = netcdf.inq(ncid); assert(natts == 1); netcdf.delAtt(ncid,gid,'toto'); [ndims,nvars,natts] = netcdf.inq(ncid); assert(natts == 0); netcdf.close(ncid); delete(fname) % copy attributes fname = [tempname '-octave-netcdf-copy-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); varid = netcdf.defVar(ncid,'double_var','double',[]); netcdf.copyAtt(ncid,gid,'toto',ncid,varid); [ndims,nvars,natts] = netcdf.inq(ncid); assert(natts == 1); [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varid); val = netcdf.getAtt(ncid,varid,'toto'); assert(isequal(val,123)); netcdf.close(ncid); delete(fname) % attributes id fname = [tempname '-octave-netcdf-delete-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); attnum = netcdf.inqAttID(ncid,gid,'toto'); name = netcdf.inqAttName(ncid,gid,attnum); assert(strcmp(name,'toto')) netcdf.close(ncid); delete(fname) % test one unlimited dimensions fname = [tempname '-octave-netcdf-unlimdim.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); dimID = netcdf.defDim(ncid,'time',netcdf.getConstant('NC_UNLIMITED')); unlimdimIDs = netcdf.inqUnlimDims(ncid); assert(dimID == unlimdimIDs); netcdf.close(ncid); delete(fname) % test netcdf_classic format fname = [tempname '-octave-netcdf-classic-model.nc']; mode = bitor(netcdf.getConstant('classic_model'),netcdf.getConstant('netcdf4')); ncid = netcdf.create(fname,mode); netcdf.close(ncid); info = ncinfo(fname); assert(strcmp(info.Format,'netcdf4_classic')); delete(fname); % test two unlimited dimensions fname = [tempname '-octave-netcdf-2unlimdim.nc']; mode = bitor(netcdf.getConstant('NC_CLOBBER'),netcdf.getConstant('NC_NETCDF4')); ncid = netcdf.create(fname,mode); dimID = netcdf.defDim(ncid,'time',netcdf.getConstant('NC_UNLIMITED')); dimID2 = netcdf.defDim(ncid,'time2',netcdf.getConstant('NC_UNLIMITED')); unlimdimIDs = netcdf.inqUnlimDims(ncid); assert(isequal(sort([dimID,dimID2]),sort(unlimdimIDs))); netcdf.close(ncid); delete(fname); % test fill mode fname = [tempname '-octave-netcdf-fill-mode.nc']; mode = bitor(netcdf.getConstant('NC_CLOBBER'),netcdf.getConstant('NC_NETCDF4')); ncid = netcdf.create(fname,mode); old_mode = netcdf.setFill(ncid,'nofill'); old_mode = netcdf.setFill(ncid,'nofill'); assert(old_mode == netcdf.getConstant('nofill')) netcdf.close(ncid); delete(fname); % deflate for 64bit_offset files fname = [tempname '-octave-netcdf-deflate.nc']; ncid = netcdf.create(fname,'64BIT_OFFSET'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); [shuffle,deflate,deflateLevel] = netcdf.inqVarDeflate(ncid,varid); assert(shuffle == 0) assert(deflate == 0) assert(deflateLevel == 0) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % deflate fname = [tempname '-octave-netcdf-deflate.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarDeflate(ncid,varid,true,true,9); [shuffle,deflate,deflateLevel] = netcdf.inqVarDeflate(ncid,varid); assert(shuffle) assert(deflate) assert(deflateLevel == 9) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % chunking - contiguous storage fname = [tempname '-octave-netcdf-chunking.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarChunking(ncid,varid,'contiguous'); [storage,chunksize] = netcdf.inqVarChunking(ncid,varid); assert(strcmp(storage,'contiguous')) assert(isempty(chunksize)) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % chunking - chunked storage fname = [tempname '-octave-netcdf-chunking.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarChunking(ncid,varid,'chunked',[3 4]); [storage,chunksize] = netcdf.inqVarChunking(ncid,varid); assert(strcmp(storage,'chunked')) assert(isequal(chunksize,[3 4])) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % checksum fname = [tempname '-octave-netcdf-checksum.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); checksum = netcdf.inqVarFletcher32(ncid,varid); assert(strcmp(checksum,'NOCHECKSUM')) netcdf.defVarFletcher32(ncid,varid,'fletcher32'); checksum = netcdf.inqVarFletcher32(ncid,varid); assert(strcmp(checksum,'FLETCHER32')) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarFill(ncid,varid,false,-99999.); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) assert(fillval == -99999.) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill single fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'single_var','float',dimids); netcdf.defVarFill(ncid,varid,false,single(-99999.)); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) assert(fillval == -99999.) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill char fname = [tempname '-octave-netcdf-fill-char.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','char',dimids); netcdf.defVarFill(ncid,varid,false,'X'); [fill,fillval] = netcdf.inqVarFill(ncid,varid); assert(~fill) assert(fillval == 'X') netcdf.close(ncid); delete(fname); % check default state of fill fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % create groups fname = [tempname '-octave-netcdf-groups.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); id1 = netcdf.defGrp(ncid,'group1'); id2 = netcdf.defGrp(ncid,'group2'); id3 = netcdf.defGrp(id1,'subgroup'); ids = netcdf.inqGrps(ncid); assert(isequal(sort([id1,id2]),sort(ids))); id4 = netcdf.inqNcid(ncid,'group1'); assert(id1 == id4) name = netcdf.inqGrpName(id3); assert(strcmp(name,'subgroup')) name = netcdf.inqGrpNameFull(id3); assert(strcmp(name,'/group1/subgroup')) parentid = netcdf.inqGrpParent(id3); assert(id1 == parentid); if 0 id3bis = netcdf.inqGrpFullNcid(ncid,'/group1/subgroup'); assert(id3 == id3bis); endif netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % check rename dimension fname = [tempname '-octave-rename-dim.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimid = netcdf.defDim(ncid,'x',123); [name,len] = netcdf.inqDim(ncid,dimid); assert(strcmp(name,'x')); netcdf.renameDim(ncid,dimid,'y'); [name,len] = netcdf.inqDim(ncid,dimid); assert(strcmp(name,'y')); netcdf.close(ncid); delete(fname); % rename variable fname = [tempname '-octave-netcdf-rename-var.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','char',dimids); [varname] = netcdf.inqVar(ncid,varid); assert(strcmp(varname,'double_var')); netcdf.renameVar(ncid,varid,'doublev'); [varname] = netcdf.inqVar(ncid,varid); assert(strcmp(varname,'doublev')); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.19/inst/private/test_netcdf_constant.m0000644000000000000000000000270515126111435017016 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . % test netcdf constants function test_netcdf_constant() names = netcdf.getConstantNames(); assert(any(strcmp(names,'NC_WRITE'))); assert(netcdf.getConstant('NC_NOWRITE') == 0) assert(netcdf.getConstant('NC_WRITE') == 1) assert(netcdf.getConstant('NC_64BIT_OFFSET') == ... netcdf.getConstant('64BIT_OFFSET')) assert(netcdf.getConstant('NC_64BIT_OFFSET') == ... netcdf.getConstant('64bit_offset')) assert(isa(netcdf.getConstant('fill_byte'),'int8')) assert(isa(netcdf.getConstant('fill_ubyte'),'uint8')) assert(isa(netcdf.getConstant('fill_float'),'single')) failed = 0; try % should trow exception netcdf.getConstant('not_found') % should never be reached failed = 1; catch end_try_catch assert(~failed); endfunction netcdf-1.0.19/inst/private/test_netcdf_create.m0000644000000000000000000000162615126111435016431 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_netcdf_create fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); assert(strcmp(netcdf.inqFormat(ncid),'FORMAT_CLASSIC')); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.19/inst/private/test_netcdf_datatypes.m0000644000000000000000000000217415126111435017163 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_netcdf_datatypes() test_netcdf_type('byte','int8'); test_netcdf_type('ubyte','uint8'); test_netcdf_type('short','int16'); test_netcdf_type('ushort','uint16'); test_netcdf_type('int','int32'); test_netcdf_type('uint','uint32'); test_netcdf_type('int64','int64'); test_netcdf_type('uint64','uint64'); test_netcdf_type('double','double'); test_netcdf_type('float','single'); test_netcdf_type('char','char'); endfunction netcdf-1.0.19/inst/private/test_netcdf_high_level_interface.m0000644000000000000000000000714715126111435021320 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . fname = [tempname '-octave-netcdf.nc']; nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20}); nccreate(fname,'salt','Dimensions',{'lon',10,'lat',20}); nccreate(fname,'u','Dimensions',{'lon','lat'}); u = randn(10,20); ncwrite(fname,'u',u); % for octave prior to 3.8.0 if isempty(which('isequaln')) isequaln = @(x,y) isequalwithequalnans(x,y); endif u2 = ncread(fname,'u'); assert(isequaln(u,u2)); u2 = ncread(fname,'u',[10 5],[inf inf],[1 1]); assert(isequaln(u(10:end,5:end),u2)); ncwriteatt(fname,'temp','units','degree Celsius'); assert(strcmp(ncreadatt(fname,'temp','units'),'degree Celsius')); ncwriteatt(fname,'temp','range',[0 10]); assert(isequal(ncreadatt(fname,'temp','range'),[0 10])); ncwriteatt(fname,'temp','float_range',single([0 10])); assert(isequal(ncreadatt(fname,'temp','float_range'),[0 10])); ncwriteatt(fname,'temp','int_range',int32([0 10])); assert(isequal(ncreadatt(fname,'temp','int_range'),[0 10])); info = ncinfo(fname); assert(length(info.Variables) == 3) assert(strcmp(info.Variables(1).Name,'temp')); assert(isequal(info.Variables(1).Size,[10 20])); delete(fname); nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','64bit'); delete(fname); nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','classic'); info = ncinfo(fname); assert(strcmp(info.Format,'classic')); delete(fname); % netcdf4 nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','netcdf4'); ncwriteatt(fname,'temp','uint_range',uint32([0 10])); assert(isequal(ncreadatt(fname,'temp','uint_range'),[0 10])); info = ncinfo(fname); assert(strcmp(info.Format,'netcdf4')); delete(fname) % scalar variable nccreate(fname,'temp','Format','netcdf4','Datatype','double'); ncwrite(fname,'temp',123); assert(ncread(fname,'temp') == 123) delete(fname) % test unlimited dimension with nccreate fname = [tempname '-octave-netcdf.nc']; nccreate(fname,'temp','Dimensions',{'lon',10,'lat',inf}); %system(['ncdump -h ' fname]) info = ncinfo(fname); assert(~info.Dimensions(1).Unlimited) assert(info.Dimensions(2).Unlimited) delete(fname) % test double with _FillValue fname = [tempname '-octave-netcdf.nc']; fv = 99999.; nccreate(fname,'flag','Dimensions',{'lon',10,'lat',10},'Datatype','double',... 'FillValue',fv); %system(['ncdump -h ' fname]) data = zeros(10,10); data(1,2) = fv; ncid = netcdf.open(fname,'NC_WRITE'); varid = netcdf.inqVarID(ncid, 'flag'); netcdf.putVar(ncid,varid,data); netcdf.close(ncid) data2 = ncread(fname,'flag'); data(data == fv) = NaN; assert(isequaln(data,data2)) delete(fname) % test char with _FillValue fname = [tempname '-octave-netcdf.nc']; fv = '*'; nccreate(fname,'flag','Dimensions',{'lon',10,'lat',10},'Datatype','char',... 'FillValue',fv); data = repmat('.',[10 10]); data(1,2) = fv; ncid = netcdf.open(fname,'NC_WRITE'); varid = netcdf.inqVarID(ncid, 'flag'); netcdf.putVar(ncid,varid,data); netcdf.close(ncid) data2 = ncread(fname,'flag'); assert(isequal(data,data2)) delete(fname) netcdf-1.0.19/inst/private/test_netcdf_low_level_interface.m0000644000000000000000000001243215126111435021173 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_netcdf_low_level_interface % 2 dimensions fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); assert(strcmp(netcdf.inqFormat(ncid),'FORMAT_CLASSIC')); n = 10; m = 5; dimid_lon = netcdf.defDim(ncid,'lon',m); dimid = netcdf.defDim(ncid,'time',n); varidd = netcdf.defVar(ncid,'double_var','double',[dimid_lon,dimid]); varid = netcdf.defVar(ncid,'byte_var','byte',[dimid]); varidf = netcdf.defVar(ncid,'float_var','float',[dimid]); varidi = netcdf.defVar(ncid,'int_var','int',[dimid]); varids = netcdf.defVar(ncid,'short_var','short',[dimid]); assert(varidd == netcdf.inqVarID(ncid,'double_var')) [numdims, numvars, numglobalatts, unlimdimID] = netcdf.inq(ncid); assert(numvars == 5) [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varidd); assert(strcmp(varname,'double_var')); [dimname,len] = netcdf.inqDim(ncid,dimid); assert(len == n); assert(strcmp(dimname,'time')); types = {'double','float','byte','short','int'}; for i=1:length(types) vid{i} = netcdf.defVar(ncid,[types{i} '_variable'],types{i},[dimid_lon,dimid]); end netcdf.endDef(ncid) z = randn(m,n); netcdf.putVar(ncid,varidd,z); varf = randn(n,1); netcdf.putVar(ncid,varidf,varf); vari = floor(randn(n,1)); netcdf.putVar(ncid,varidi,vari); netcdf.putVar(ncid,varids,[1:n]) z2 = netcdf.getVar(ncid,varidd); assert(all(all(abs(z2 - z) < 1e-5))) z2 = netcdf.getVar(ncid,varidd,[0 0]); assert(z2 == z(1,1)) z2 = netcdf.getVar(ncid,varidd,[2 2],[3 5]); assert(isequal(z2,z(3:5,3:7))) z2 = netcdf.getVar(ncid,varidd,[2 2],[3 4],[1 2]); assert(isequal(z2,z(3:5,3:2:9))) netcdf.putVar(ncid,varidd,[0 0],123.); z(1,1) = 123; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) netcdf.putVar(ncid,varidd,[2 2],[3 3],ones(3,3)); z(3:5,3:5) = 1; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) netcdf.putVar(ncid,varidd,[0 0],[3 5],[2 2],zeros(3,5)); z(1:2:5,1:2:9) = 0; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) z2 = netcdf.getVar(ncid,varidf); assert(all(z2 - varf < 1e-5)) vari2 = netcdf.getVar(ncid,varidi); assert(all(vari2 == vari)) netcdf.close(ncid); delete(fname); % test with different dimensions for i = 1:5 nc_test_ndims(i); endfor endfunction function nc_test_ndims(ndims) fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); sz = ones(1,ndims); dimids = ones(1,ndims); for i = 1:ndims sz(i) = 10+i; dimids(i) = netcdf.defDim(ncid,sprintf('dim%g',i),sz(i)); endfor varid = netcdf.defVar(ncid,'double_var','double',dimids); [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varid); assert(strcmp(varname,'double_var')); for i = 1:ndims [dimname,len] = netcdf.inqDim(ncid,dimids(i)); assert(len == sz(i)); assert(strcmp(dimname,sprintf('dim%g',i))); endfor netcdf.endDef(ncid) if ndims == 1 z = randn(sz,1); else z = randn(sz); endif netcdf.putVar(ncid,varid,z); z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) z2 = netcdf.getVar(ncid,varid,zeros(ndims,1)); assert(z2 == z(1)) start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); z2 = netcdf.getVar(ncid,varid,start,count); idx = scs(start,count); assert(isequal(z2,z(idx{:}))) start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); stride = 2 * ones(1,ndims); z2 = netcdf.getVar(ncid,varid,start,count,stride); idx = scs(start,count,stride); assert(isequal(z2,z(idx{:}))) % put with start start = zeros(1,ndims); netcdf.putVar(ncid,varid,start,123.); z(1) = 123; z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) % put with start and count start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); if ndims == 1 data = ones(count,1); else data = ones(count); endif netcdf.putVar(ncid,varid,start,count,data); idx = scs(start,count); z(idx{:}) = 1; z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) % put with start, count and stride start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); stride = 2 * ones(1,ndims); if ndims == 1 data = zeros(count,1); else data = zeros(count); endif netcdf.putVar(ncid,varid,start,count,stride,data); idx = scs(start,count,stride); z (idx{:}) = 0; z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) netcdf.close(ncid); delete(fname); endfunction function idx = scs(start,count,stride) idx = cell(length(start),1); if nargin == 2 stride = ones(length(start),1); endif for i = 1:length(start) idx{i} = start(i) + 1 + stride(i) * [0:count(i)-1]; endfor endfunction netcdf-1.0.19/inst/private/test_netcdf_ncwriteschema.m0000644000000000000000000000255515126111435020024 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . fname = [tempname '-octave-netcdf-scheme-unlim.nc']; clear s s.Name = '/'; s.Format = 'classic'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; ncwriteschema(fname,s); info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) delete(fname); netcdf-1.0.19/inst/private/test_netcdf_ncwriteschema_chunking.m0000644000000000000000000000272615126111435021712 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . fname = [tempname '-octave-netcdf-scheme-chunk.nc']; clear s s.Name = '/'; s.Format = 'netcdf4'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; s.Variables(1).ChunkSize = [2 3]; ncwriteschema(fname,s); info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) assert(isequal(info.Variables(1).ChunkSize,s.Variables(1).ChunkSize)); delete(fname); netcdf-1.0.19/inst/private/test_netcdf_ncwriteschema_group.m0000644000000000000000000000444415126111435021237 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . fname = [tempname '-octave-netcdf-scheme-group.nc']; clear s s.Name = '/'; s.Format = 'netcdf4'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp_diff'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; s.Groups(1).Name = 'forecast'; s.Groups(1).Variables(1).Name = 'temp'; s.Groups(1).Variables(1).Dimensions = s.Dimensions; s.Groups(1).Variables(1).Datatype = 'double'; s.Groups(1).Variables(1).Attributes(1).Name = 'long_name'; s.Groups(1).Variables(1).Attributes(1).Value = 'temperature'; s.Groups(1).Attributes(1).Name = 'institution'; s.Groups(1).Attributes(1).Value = 'ULg'; s.Groups(2) = s.Groups(1); s.Groups(2).Name = 'analysis'; ncwriteschema(fname,s); %system(['ncdump -h ' fname]) info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) assert(strcmp(s.Groups(1).Name,info.Groups(1).Name)) z = randn(20,10); ncwrite(fname,'/forecast/temp',z); z2 = ncread(fname,'/forecast/temp'); assert(isequal(z,z2)) ginfo = ncinfo(fname,'forecast'); assert(strcmp(ginfo.Name,'forecast')); % read global attribute of root group val = ncreadatt(fname,'/','institution'); assert(strcmp(val,'GHER, ULg')); % read global attribute of group forecast val = ncreadatt(fname,'/forecast','institution'); assert(strcmp(val,'ULg')); delete(fname); netcdf-1.0.19/inst/private/test_netcdf_ncwriteschema_unlim.m0000644000000000000000000000276515126111435021233 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . fname = [tempname '-octave-netcdf-scheme-unlim.nc']; clear s s.Name = '/'; s.Format = 'classic'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Dimensions(3).Name = 'time'; s.Dimensions(3).Length = Inf; %s.Dimensions(3).Unlimited = true; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; ncwriteschema(fname,s); info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) assert(info.Dimensions(3).Unlimited); delete(fname); netcdf-1.0.19/inst/private/test_netcdf_scalar_variable.m0000644000000000000000000000164715126111435020303 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_netcdf_scalar_variable() fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); varidd_scalar = netcdf.defVar(ncid,'double_scalar','double',[]); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.19/inst/private/test_netcdf_type.m0000644000000000000000000000431215126111435016142 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_netcdf_type(nctype,octtype) m = 5; n = 10; fname = [tempname '-octave-netcdf- ' nctype '.nc']; mode = bitor(netcdf.getConstant('NC_CLOBBER'),... netcdf.getConstant('NC_NETCDF4')); ncid = netcdf.create(fname,mode); dimids = [netcdf.defDim(ncid,'lon',m) ... netcdf.defDim(ncid,'time',n)]; varid = netcdf.defVar(ncid,'variable',nctype,dimids); netcdf.endDef(ncid) if strcmp(octtype,'char') z = char(floor(26*rand(m,n)) + 65); testvals = 'a'; testvalv = 'this is a name'; else z = zeros(m,n,octtype); z(:) = randn(m,n); testvals = zeros(1,1,octtype); testvals(:) = rand(1,1); testvalv = zeros(1,5,octtype); testvalv(:) = rand(size(testvalv)); endif netcdf.putVar(ncid,varid,z); z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) netcdf.putAtt(ncid,varid,'scalar_attribute',testvals); val = netcdf.getAtt(ncid,varid,'scalar_attribute'); assert(isequal(val,testvals)); assert(strcmp(class(val),octtype)) [xtype,len] = netcdf.inqAtt(ncid,varid,'scalar_attribute'); assert(xtype == netcdf.getConstant(nctype)) assert(len == numel(testvals)); netcdf.putAtt(ncid,varid,'vector_attribute',testvalv); val = netcdf.getAtt(ncid,varid,'vector_attribute'); assert(isequal(val,testvalv)); assert(strcmp(class(val),octtype)) [xtype,len] = netcdf.inqAtt(ncid,varid,'vector_attribute'); assert(xtype == netcdf.getConstant(nctype)) assert(len == numel(testvalv)); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.19/inst/private/test_netcdf_unlim.m0000644000000000000000000000201215126111435016300 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . % 2 dimensions fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); dimid = netcdf.defDim(ncid,'time',0); varidd = netcdf.defVar(ncid,'time','double',[dimid]); netcdf.close(ncid) ncid = netcdf.open(fname,'NC_NOWRITE'); varid = netcdf.inqVarID(ncid, 'time'); x = netcdf.getVar(ncid,varid); netcdf.close(ncid) netcdf-1.0.19/inst/private/test_netcdf_user_types.m0000644000000000000000000000527715126111435017376 0ustar00%% Copyright (C) 2022 John Donoghue %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_netcdf_user_types() fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,netcdf.getConstant('NETCDF4')); my_dtype_id = netcdf.defVlen(ncid,"mytype_dtype", 'double'); [dtype_name, dtype_bsize, dtype_typeid] = netcdf.inqVlen(ncid, my_dtype_id); assert(dtype_name, 'mytype_dtype'); #assert(dtype_bsize, 16); assert(dtype_typeid, netcdf.getConstant("NC_DOUBLE")); [dtype_name, dtype_bsize, dtype_typeid, dtype_nfields, dtype_classid] = netcdf.inqUserType(ncid, my_dtype_id); assert(dtype_name, 'mytype_dtype'); #assert(dtype_bsize, 16); assert(dtype_typeid, netcdf.getConstant("NC_DOUBLE")); assert(dtype_nfields, 0); assert(dtype_classid, netcdf.getConstant("NC_VLEN")); my_stype_id = netcdf.defVlen(ncid,"mytype_stype", netcdf.getConstant("NC_USHORT")); [stype_name, stype_bsize, stype_typeid] = netcdf.inqVlen(ncid, my_stype_id); assert(stype_name, 'mytype_stype'); #assert(stype_bsize, 2); assert(stype_typeid, netcdf.getConstant("NC_USHORT")); # create a variable dimid = netcdf.defDim(ncid,'m',5); varid = netcdf.defVar(ncid,'myarray', my_dtype_id, dimid); netcdf.defVarFill(ncid, varid, false, -999); netcdf.putAtt(ncid, varid, "myattr", 1) netcdf.endDef(ncid); # get var info [varname vartype vardimid varattr] = netcdf.inqVar(ncid,varid); assert(varname, "myarray"); assert(vardimid, dimid); assert(vartype, my_dtype_id); netcdf.putVar(ncid, varid, {0, [0.1,0.2],[3,0,4.0,5.0,6.0]}); data = netcdf.getVar(ncid,varid); assert(iscell(data)); assert(length(data), 5); assert(data{1}, [0]); assert(data{2}, [0.1,0.2]); assert(data{3}, [3,0,4.0,5.0,6.0]); assert(data{4}, -999); netcdf.close(ncid); # ncinfo doesnt error a = ncinfo(fname); assert(a.Variables(1).Name, "myarray"); assert(a.Variables(1).Size, 5); assert(a.Variables(1).FillValue, -999); # attr 1 is the fill value, 2nd is my added one assert(a.Variables(1).Attributes(2).Name, "myattr"); assert(a.Variables(1).Attributes(2).Value, 1); delete(fname); endfunction netcdf-1.0.19/inst/private/test_scalar_variable.m0000644000000000000000000000164015126111435016751 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . function test_scalar_variable() fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); varidd_scalar = netcdf.defVar(ncid,'double_scalar','double',[]); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.19/inst/test_netcdf.m0000644000000000000000000000355415126111435013436 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 3 of the License, or %% (at your option) any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; If not, see . ## -*- texinfo -*- ## @deftypefn {} {} test_netcdf ## Function to do a basic test of the netcdf interface ## @end deftypefn function test_netcdf() import_netcdf tests = {'test_netcdf_constant',... 'test_netcdf_create'... 'test_netcdf_low_level_interface'... 'test_netcdf_unlim',... 'test_netcdf_datatypes',... 'test_netcdf_scalar_variable',... 'test_netcdf_attributes',... 'test_netcdf_high_level_interface',... 'test_netcdf_ncwriteschema',... 'test_netcdf_ncwriteschema_unlim',... 'test_netcdf_ncwriteschema_chunking',... 'test_netcdf_ncwriteschema_group',... 'test_netcdf_user_types',... 'bug_47014'... }; maxlen = max(cellfun(@(s) length(s),tests)); libver = netcdf.inqLibVers(); fprintf('Using NetCDF library version "%s"\n',libver) for iindex=1:length(tests); dots = repmat('.',1,maxlen - length(tests{iindex})); fprintf('run %s%s ',tests{iindex},dots); try eval(tests{iindex}); disp(' OK '); catch disp(' FAIL '); disp(lasterr) end_try_catch endfor endfunction %!test %! fprintf ("\n"); %! test_netcdf (); netcdf-1.0.19/octave-netcdf.metainfo.xml0000644000000000000000000000202215126111435015033 0ustar00 octave-netcdf www.octave.org-octave.desktop NetCDF Toolkit Octave NetCDF toolkit

Toolkit for Network Common Form (NetCDF) File I/O.

NetCDF scientific https://gnu-octave.github.io/octave-netcdf/ https://github.com/gnu-octave/octave-netcdf/issues GPL-3.0+ Octave-Forge Community octave-maintainers@gnu.org FSFAP
netcdf-1.0.19/src/0000755000000000000000000000000015126111435010561 5ustar00netcdf-1.0.19/src/Makefile.in0000644000000000000000000000175215126111435012633 0ustar00 SHELL = @SHELL@ AWK = @AWK@ AWK ?= awk MKOCTFILE = @MKOCTFILE@ -v NC_CONFIG = @NC_CONFIG@ %.oct: %.cc ; $(MKOCTFILE) $< NCHEADER=$(shell $(NC_CONFIG) --includedir)/netcdf.h NETCDF_CPPFLAGS=@NETCDF_CPPFLAGS@ NETCDF_LIBS=@NETCDF_LIBS@ SRC = __netcdf__.cc all: __netcdf__.oct ../PKG_ADD netcdf_constants.h: $(info generating netcdf_constants.h) @if [ -f $(NCHEADER) ]; then \ $(AWK) -f netcdf_constants.awk $(NCHEADER) > netcdf_constants.h; \ elif [ -f /usr/include/netcdf.h ]; then \ $(AWK) -f netcdf_constants.awk /usr/include/netcdf.h > netcdf_constants.h; \ else \ echo >&2 "Couldnt find netcdf.h"; \ false; \ fi; clean: rm -f __netcdf__.o __netcdf__.oct netcdf_constants.h distclean: clean -rm -f oct-alt-includes.h -rm -f config.status config.log config.h -rm -f Makefile realclean: distclean rm -f ../PKG_ADD ../PKG_DEL __netcdf__.oct: $(SRC) netcdf_constants.h $(MKOCTFILE) $(NETCDF_CPPFLAGS) $(SRC) $(NETCDF_LIBS) ../PKG_ADD: $(SRC) $(shell sh ./PKG_ADD.sh) netcdf-1.0.19/src/PKG_ADD.sh0000644000000000000000000000254515126111435012214 0ustar00#!/bin/sh # Copyright (C) 2013-2022 Alexander Barth # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; If not, see . if [ "x$AWK" = "x" ]; then AWK=awk fi netcdf_functions=$($AWK -F'[(,]' '/DEFUN_DLD/ { print $2 } ' __netcdf__.cc) outfile_add=../PKG_ADD outfile_del=../PKG_DEL rm -f $outfile_add $outfile_del echo '% File automatically generated by PKG_ADD.sh' > $outfile_add for i in $netcdf_functions; do #echo ${i#netcdf_} cat >> $outfile_add < $outfile_del for i in $netcdf_functions; do #echo ${i#netcdf_} cat >> $outfile_del < // // This program is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the Free Software // Foundation; either version 3 of the License, or (at your option) any later // version. // // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more // details. // // You should have received a copy of the GNU General Public License along with // this program; if not, see . #include #include #include #include #include #include #include #include #include #include "config.h" // Octave constructor to hold an array of ints #define NETCDF_INT_ARRAY int32NDArray static std::map netcdf_constants; void init() { #include "netcdf_constants.h" } int check_err(int status) { if (status != NC_NOERR) error("%s", nc_strerror(status)); return status; } // convert name to upper-case and add "NC_" prefix if it is missing std::string normalize_ncname(std::string name) { std::string prefix = "NC_"; std::string ncname = name; // to upper case std::transform(ncname.begin(), ncname.end(),ncname.begin(), ::toupper); // add prefix if it is missing if (ncname.substr(0, prefix.size()) != prefix) { ncname = prefix + ncname; } return ncname; } octave_value netcdf_get_constant(octave_value ov) { if (netcdf_constants.empty()) { init(); } if (ov.is_scalar_type()) { return ov.scalar_value(); } std::string name = ov.string_value(); name = normalize_ncname(name); std::map::const_iterator cst = netcdf_constants.find(name); if (cst != netcdf_constants.end ()) { return cst->second; } else { error("unknown netcdf constant: %s",name.c_str()); return octave_value(); } } size_t to_size_t(octave_value ov) { size_t sz; sz = static_cast(ov.uint64_scalar_value()); return sz; } void to_size_t_vector(octave_value ov, int len, size_t *vec) { uint64NDArray tmp = ov.uint64_array_value(); for (int i=0; i(tmp(len-i-1)); } } void to_ptrdiff_t_vector(octave_value ov, int len, ptrdiff_t *vec) { int64NDArray tmp = ov.int64_array_value(); for (int i=0; i(tmp(len-i-1)); } } void start_count_stride(int ncid, int varid, octave_value_list args,int len, int ndims, size_t* start,size_t* count,ptrdiff_t* stride) { OCTAVE_LOCAL_BUFFER (int, dimids, ndims); check_err(nc_inq_vardimid (ncid, varid, dimids)); // default values for start, count and stride // i.e. all variable is loaded for (int i=0; i 2) { if (args(2).numel() != ndims) { error("number of elements of argument %s should match the number " "of dimension of the netCDF variable", "start"); } to_size_t_vector(args(2),ndims,start); // if start is specified, the default for count is 1 (how odd!) for (int i=0; i 3) { if (args(3).numel() != ndims) { error("number of elements of argument %s should match the number " "of dimension of the netCDF variable", "count"); } to_size_t_vector(args(3),ndims,count); } // stride argument if (len > 4) { if (args(4).numel() != ndims) { error("number of elements of argument %s should match the number " "of dimension of the netCDF variable", "stride"); } to_ptrdiff_t_vector(args(4),ndims,stride); } } DEFUN_DLD(netcdf_getConstant, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{value} =} netcdf_getConstant(@var{name}) \n\ Returns the value of a NetCDF constant called @var{name}.\n\ @seealso{netcdf_getConstantNames}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } return netcdf_get_constant(args(0)); } DEFUN_DLD(netcdf_getConstantNames, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{value} =} netcdf_getConstantNames() \n\ Returns a list of all constant names.\n\ @end deftypefn\n\ @seealso{netcdf_getConstant}\n") { if (args.length() != 0) { print_usage (); return octave_value(); } if (netcdf_constants.empty()) { init(); } Cell c = Cell (dim_vector(1,netcdf_constants.size())); int i = 0; for (std::map::const_iterator p = netcdf_constants.begin (); p != netcdf_constants.end (); p++) { c(i++) = octave_value(p->first); } return octave_value(c); } DEFUN_DLD(netcdf_inqLibVers, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{vers} =} netcdf_inqLibVers() \n\ Returns the version of the NetCDF library.\n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 0) { print_usage (); return octave_value (); } return octave_value(std::string(nc_inq_libvers())); } DEFUN_DLD(netcdf_setDefaultFormat, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{old_format} =} netcdf_setDefaultFormat(@var{format}) \n\ Sets the default format of the NetCDF library and returns the previous default format (as a numeric value). @var{format} can be \n\ \"format_classic\", \"format_64bit\", \"format_netcdf4\" or \"format_netcdf4_classic\". \n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 1) { print_usage (); return octave_value (); } int format = netcdf_get_constant(args(0)).int_value(); int old_format; check_err(nc_set_default_format(format, &old_format)); return octave_value(old_format); } // int nc_set_chunk_cache(size_t size, size_t nelems, float preemption); DEFUN_DLD(netcdf_setChunkCache, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_setChunkCache(@var{size}, @var{nelems}, @var{preemption}) \n\ Sets the default chunk cache settings in the HDF5 library. The settings applies to all files which are subsequently opened or created.\n\ @end deftypefn\n\ @seealso{netcdf_getChunkCache}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } size_t size = to_size_t(args(0)); size_t nelems = to_size_t(args(1)); float preemption = args(2).scalar_value(); check_err(nc_set_chunk_cache(size, nelems, preemption)); return octave_value(); } // int nc_get_chunk_cache(size_t *sizep, size_t *nelemsp, float *preemptionp); DEFUN_DLD(netcdf_getChunkCache, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{size}, @var{nelems}, @var{preemption}] =} netcdf_getChunkCache() \n\ Gets the default chunk cache settings in the HDF5 library. \n\ @end deftypefn\n\ @seealso{netcdf_setChunkCache}\n") { if (args.length() != 0) { print_usage (); return octave_value (); } size_t size; size_t nelems; float preemption; check_err(nc_get_chunk_cache(&size, &nelems, &preemption)); octave_value_list retval; retval(0) = octave_value(size); retval(1) = octave_value(nelems); retval(2) = octave_value(preemption); return retval; } DEFUN_DLD(netcdf_create, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{ncid} =} netcdf_create(@var{filename},@var{mode}) \n\ Creates the file named @var{filename} in the mode @var{mode} which can have the \n\ following values: \n\ \"clobber\" (overwrite existing files), \n\ \"noclobber\" (prevent to overwrite existing files) \n\ \"64bit_offset\" (use the 64bit-offset format), \n\ \"netcdf4\" (use the NetCDF4, i.e. HDF5 format) or \n\ \"share\" (concurrent reading of the dataset). \n\ @var{mode} can also be the numeric value return by netcdf_getConstant. In the later-case it can be combined with a bitwise-or. \n\ @end deftypefn\n\ @subsubheading Example\n\ @example \n\ mode = bitor(netcdf.getConstant(\"classic_model\"), ...\n\ netcdf.getConstant(\"netcdf4\")); \n\ ncid = netcdf.create(\"test.nc\",mode); \n\ @end example \n\ @seealso{netcdf_close}\n") { if (args.length() != 2) { print_usage (); return octave_value (); } std::string filename = args(0).string_value(); int mode = netcdf_get_constant(args(1)).int_value(); int ncid; check_err(nc_create(filename.c_str(), mode, &ncid)); return octave_value(ncid); } DEFUN_DLD(netcdf_open, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{ncid} =} netcdf_open(@var{filename},@var{mode}) \n\ Opens the file named @var{filename} in the mode @var{mode}.\n\ @end deftypefn\n\ @seealso{netcdf_close}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } std::string filename = args(0).string_value(); int mode = netcdf_get_constant(args(1)).int_value(); int ncid; check_err(nc_open(filename.c_str(), mode, &ncid)); return octave_value(ncid); } DEFUN_DLD(netcdf_abort, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_abort(@var{ncid}) \n\ Aborts all changes since the last time the dataset entered in define mode.\n\ @end deftypefn\n\ @seealso{netcdf_reDef}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_abort(ncid)); return octave_value(); } DEFUN_DLD(netcdf_sync, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_sync(@var{ncid}) \n\ Writes all changes to the disk and leaves the file open.\n\ @end deftypefn\n\ @seealso{netcdf_close}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_sync(ncid)); return octave_value(); } DEFUN_DLD(netcdf_setFill, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{old_mode} =} netcdf_setFill(@var{ncid},@var{fillmode}) \n\ Change the fill mode (@var{fillmode}) of the data set @var{ncid}. The previous value of the fill mode is returned. @var{fillmode} can be either \"fill\" or \"nofill\".\n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int fillmode = netcdf_get_constant(args(1)).int_value(); int old_mode; check_err (nc_set_fill (ncid, fillmode, &old_mode)); return octave_value(old_mode); } //int nc_inq (int ncid, int *ndimsp, int *nvarsp, int *ngattsp, // int *unlimdimidp); DEFUN_DLD(netcdf_inq, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{ndims},@var{nvars},@var{ngatts},@var{unlimdimid}] =} netcdf_inq(@var{ncid}) \n\ Return the number of dimension (@var{ndims}), the number of variables (@var{nvars}), the number of global attributes (@var{ngatts}) and the id of the unlimited dimension (@var{unlimdimid}). \n\ If no unlimited dimension is declared -1 is returned. For NetCDF4 files, one should use \n\ the function netcdf_inqUnlimDims as multiple unlimite dimension exists. \n\ @end deftypefn\n\ @seealso{netcdf_inqUnlimDims}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int ndims, nvars, ngatts, unlimdimid; octave_value_list retval; check_err(nc_inq(ncid,&ndims,&nvars,&ngatts,&unlimdimid)); retval(0) = octave_value(ndims); retval(1) = octave_value(nvars); retval(2) = octave_value(ngatts); retval(3) = octave_value(unlimdimid); return retval; } // int nc_inq_unlimdims(int ncid, int *nunlimdimsp, int *unlimdimidsp); DEFUN_DLD(netcdf_inqUnlimDims, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{unlimdimids} =} netcdf_inqUnlimDims(@var{ncid}) \n\ Return the id of all unlimited dimensions of the NetCDF file @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_inq}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int nunlimdims; check_err(nc_inq_unlimdims(ncid, &nunlimdims, NULL)); OCTAVE_LOCAL_BUFFER(int,tmp,nunlimdims); NETCDF_INT_ARRAY unlimdimids = NETCDF_INT_ARRAY(dim_vector(1,nunlimdims)); check_err(nc_inq_unlimdims(ncid, &nunlimdims, tmp)); for (int i=0; i < nunlimdims; i++) { unlimdimids(i) = tmp[i]; } return octave_value(unlimdimids); } // int nc_inq_format (int ncid, int *formatp); DEFUN_DLD(netcdf_inqFormat, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{format} =} netcdf_inqFormat(@var{ncid}) \n\ Return the NetCDF format of the dataset @var{ncid}.\n\ Format might be one of the following \n\ \"FORMAT_CLASSIC\", \"FORMAT_64BIT\", \"FORMAT_NETCDF4\" or \"FORMAT_NETCDF4_CLASSIC\" \n\ @end deftypefn\n\ @seealso{netcdf_inq}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int format; check_err(nc_inq_format(ncid, &format)); if (format == NC_FORMAT_CLASSIC) { return octave_value("FORMAT_CLASSIC"); } if (format == NC_FORMAT_64BIT) { return octave_value("FORMAT_64BIT"); } if (format == NC_FORMAT_NETCDF4) { return octave_value("FORMAT_NETCDF4"); } return octave_value("FORMAT_NETCDF4_CLASSIC"); } // int nc_def_dim (int ncid, const char *name, size_t len, int *dimidp); DEFUN_DLD(netcdf_defDim, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{dimid} =} netcdf_defDim(@var{ncid},@var{name},@var{len}) \n\ Define the dimension with the name @var{name} and the length @var{len} in the dataset @var{ncid}. The id of the dimension is returned.\n\ @end deftypefn\n\ @seealso{netcdf_defVar}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value(); size_t len = to_size_t(args(2)); int dimid; check_err(nc_def_dim (ncid, name.c_str(), len, &dimid)); return octave_value(dimid); } // int nc_rename_dim(int ncid, int dimid, const char* name); DEFUN_DLD(netcdf_renameDim, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_renameDim(@var{ncid},@var{dimid},@var{name}) \n\ Renames the dimension with the id @var{dimid} in the data set @var{ncid}. @var{name} is the new name of the dimension.\n\ @end deftypefn\n\ @seealso{netcdf_defDim}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int dimid = args(1).scalar_value(); std::string name = args(2).string_value(); check_err(nc_rename_dim (ncid, dimid, name.c_str())); return octave_value(); } // int nc_def_var (int ncid, const char *name, nc_type xtype, // int ndims, const int dimids[], int *varidp); DEFUN_DLD(netcdf_defVar, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{varid} = } netcdf_defVar(@var{ncid},@var{name},@var{xtype},@var{dimids}) \n\ Defines a variable with the name @var{name} in the dataset @var{ncid}. @var{xtype} can be \"byte\", \"ubyte\", \"short\", \"ushort\", \"int\", \"uint\", \"int64\", \"uint64\", \"float\", \"double\", \"char\" or the corresponding number as returned by netcdf_getConstant. The parameter @var{dimids} define the ids of the dimension. For scalar this parameter is the empty array ([]). The variable id is returned. \n\ @end deftypefn\n\ @seealso{netcdf_open,netcdf_defDim}\n") { if (args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value (); int xtype = netcdf_get_constant(args(2)).int_value();; Array tmp; if (!args(3).OV_ISEMPTY()) { tmp = args(3).vector_value (); } OCTAVE_LOCAL_BUFFER (int, dimids, tmp.numel()); for (int i = 0; i < tmp.numel(); i++) { dimids[i] = tmp(tmp.numel()-i-1); } int varid; check_err(nc_def_var (ncid, name.c_str(), xtype, tmp.numel(), dimids, &varid)); return octave_value(varid); } // int nc_rename_var(int ncid, int varid, const char* name); DEFUN_DLD(netcdf_renameVar, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_renameVar(@var{ncid},@var{varid},@var{name}) \n\ Renames the variable with the id @var{varid} in the data set @var{ncid}. @var{name} is the new name of the variable.\n\ @end deftypefn\n\ @seealso{netcdf_defVar}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); check_err(nc_rename_var (ncid, varid, name.c_str())); return octave_value(); } // int nc_def_var_fill(int ncid, int varid, int no_fill, void *fill_value); DEFUN_DLD(netcdf_defVarFill, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_defVarFill(@var{ncid},@var{varid},@var{no_fill},@var{fillvalue}) \n\ Define the fill-value settings of the NetCDF variable @var{varid}.\n\ If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true.\n\ @end deftypefn\n\ @seealso{netcdf_inqVarFill}\n") { if (args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int no_fill = args(2).scalar_value(); // boolean octave_value fill_value = args(3); nc_type xtype, basetype; check_err(nc_inq_vartype (ncid, varid, &xtype)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); } } if (xtype >= NC_FIRSTUSERTYPEID) { switch (basetype) { #define OV_NETCDF_DEF_VARV_FILL(netcdf_type,c_type,method) \ case netcdf_type: \ { \ c_type val; \ memcpy(&val, fill_value.method().fortran_vec(), sizeof(val)); \ nc_vlen_t vlendata = {1,(void*)&val}; \ check_err(nc_def_var_fill(ncid, varid, no_fill, &vlendata)); \ break; \ } OV_NETCDF_DEF_VARV_FILL(NC_BYTE, signed char, int8_array_value) OV_NETCDF_DEF_VARV_FILL(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_DEF_VARV_FILL(NC_SHORT, short, int16_array_value) OV_NETCDF_DEF_VARV_FILL(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_DEF_VARV_FILL(NC_INT, int, int32_array_value) OV_NETCDF_DEF_VARV_FILL(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_DEF_VARV_FILL(NC_INT64, long long, int64_array_value) OV_NETCDF_DEF_VARV_FILL(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_DEF_VARV_FILL(NC_FLOAT, float, float_array_value) OV_NETCDF_DEF_VARV_FILL(NC_DOUBLE,double,array_value) OV_NETCDF_DEF_VARV_FILL(NC_CHAR, char, char_array_value) } } else { switch (xtype) { #define OV_NETCDF_DEF_VAR_FILL(netcdf_type,c_type,method) \ case netcdf_type: \ { \ check_err(nc_def_var_fill(ncid, varid, no_fill, fill_value.method().fortran_vec())); \ break; \ } OV_NETCDF_DEF_VAR_FILL(NC_BYTE, signed char, int8_array_value) OV_NETCDF_DEF_VAR_FILL(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_DEF_VAR_FILL(NC_SHORT, short, int16_array_value) OV_NETCDF_DEF_VAR_FILL(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_DEF_VAR_FILL(NC_INT, int, int32_array_value) OV_NETCDF_DEF_VAR_FILL(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_DEF_VAR_FILL(NC_INT64, long long, int64_array_value) OV_NETCDF_DEF_VAR_FILL(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_DEF_VAR_FILL(NC_FLOAT, float, float_array_value) OV_NETCDF_DEF_VAR_FILL(NC_DOUBLE,double,array_value) OV_NETCDF_DEF_VAR_FILL(NC_CHAR, char, char_array_value) } } return octave_value(); } // int nc_def_var_fill(int ncid, int varid, int no_fill, void *fill_value); DEFUN_DLD(netcdf_inqVarFill, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{no_fill},@var{fillvalue}] = } netcdf_inqVarFill(@var{ncid},@var{varid}) \n\ Determines the fill-value settings of the NetCDF variable @var{varid}.\n\ If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true.\n\ @end deftypefn\n\ @seealso{netcdf_defVarFill}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int no_fill; nc_type xtype, basetype; octave_value_list retval; octave_value data; check_err(nc_inq_vartype (ncid, varid, &xtype)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); } } if (xtype >= NC_FIRSTUSERTYPEID) { switch (basetype) { #define OV_NETCDF_INQ_VARV_FILL(netcdf_type,c_type) \ case netcdf_type: \ { \ c_type val = 0; \ nc_vlen_t vlendata = {1,(void*)&val}; \ check_err(nc_inq_var_fill(ncid, varid, &no_fill,&vlendata)); \ Array< c_type > fill_value = Array< c_type >(dim_vector(1,1)); \ memcpy(fill_value.fortran_vec(), vlendata.p, sizeof(c_type)); \ data = octave_value(fill_value); \ break; \ } OV_NETCDF_INQ_VARV_FILL(NC_BYTE,octave_int8) OV_NETCDF_INQ_VARV_FILL(NC_UBYTE,octave_uint8) OV_NETCDF_INQ_VARV_FILL(NC_SHORT,octave_int16) OV_NETCDF_INQ_VARV_FILL(NC_USHORT,octave_uint16) OV_NETCDF_INQ_VARV_FILL(NC_INT,octave_int32) OV_NETCDF_INQ_VARV_FILL(NC_UINT,octave_uint32) OV_NETCDF_INQ_VARV_FILL(NC_INT64,octave_int64) OV_NETCDF_INQ_VARV_FILL(NC_UINT64,octave_uint64) OV_NETCDF_INQ_VARV_FILL(NC_FLOAT,float) OV_NETCDF_INQ_VARV_FILL(NC_DOUBLE,double) OV_NETCDF_INQ_VARV_FILL(NC_CHAR,char) } } else { switch (xtype) { #define OV_NETCDF_INQ_VAR_FILL(netcdf_type,c_type) \ case netcdf_type: \ { \ Array< c_type > fill_value = Array< c_type >(dim_vector(1,1)); \ check_err(nc_inq_var_fill(ncid, varid, &no_fill, \ fill_value.fortran_vec())); \ data = octave_value(fill_value); \ break; \ } OV_NETCDF_INQ_VAR_FILL(NC_BYTE,octave_int8) OV_NETCDF_INQ_VAR_FILL(NC_UBYTE,octave_uint8) OV_NETCDF_INQ_VAR_FILL(NC_SHORT,octave_int16) OV_NETCDF_INQ_VAR_FILL(NC_USHORT,octave_uint16) OV_NETCDF_INQ_VAR_FILL(NC_INT,octave_int32) OV_NETCDF_INQ_VAR_FILL(NC_UINT,octave_uint32) OV_NETCDF_INQ_VAR_FILL(NC_INT64,octave_int64) OV_NETCDF_INQ_VAR_FILL(NC_UINT64,octave_uint64) OV_NETCDF_INQ_VAR_FILL(NC_FLOAT,float) OV_NETCDF_INQ_VAR_FILL(NC_DOUBLE,double) OV_NETCDF_INQ_VAR_FILL(NC_CHAR,char) } } //cout << "xtype3 " << xtype << " " << NC_DOUBLE << std::endl; retval(0) = octave_value(no_fill); retval(1) = data; return retval; } //nc_def_var_deflate(int ncid, int varid, int shuffle, int deflate, // int deflate_level); DEFUN_DLD(netcdf_defVarDeflate, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_defVarDeflate (@var{ncid},@var{varid},@var{shuffle},@var{deflate},@var{deflate_level}) \n\ Define the compression settings NetCDF variable @var{varid}.\n\ If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression).\n\ @end deftypefn\n\ @seealso{netcdf_inqVarDeflate}\n") { if (args.length() != 5) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int shuffle = args(2).scalar_value(); // boolean int deflate = args(3).scalar_value(); // boolean int deflate_level = args(4).scalar_value(); check_err(nc_def_var_deflate (ncid, varid, shuffle, deflate, deflate_level)); return octave_value(); } //nc_inq_var_deflate(int ncid, int varid, int *shufflep, // int *deflatep, int *deflate_levelp); DEFUN_DLD(netcdf_inqVarDeflate, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{shuffle},@var{deflate},@var{deflate_level}] = } netcdf_inqVarDeflate (@var{ncid},@var{varid}) \n\ Determines the compression settings NetCDF variable @var{varid}.\n\ If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression).\n\ @end deftypefn\n\ @seealso{netcdf_defVarDeflate}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int shuffle, deflate, deflate_level; octave_value_list retval; int format; check_err(nc_inq_format(ncid, &format)); // nc_inq_var_deflate returns garbage for classic or 64bit files if (format == NC_FORMAT_CLASSIC || format == NC_FORMAT_64BIT) { shuffle = 0; deflate = 0; deflate_level = 0; } else { check_err(nc_inq_var_deflate(ncid, varid, &shuffle,&deflate,&deflate_level)); } retval(0) = octave_value(shuffle); retval(1) = octave_value(deflate); retval(2) = octave_value(deflate_level); return retval; } //int nc_def_var_chunking(int ncid, int varid, int storage, size_t *chunksizesp); //chunksizes can be ommited if storage is \"CONTIGUOUS\" DEFUN_DLD(netcdf_defVarChunking, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_defVarChunking (@var{ncid},@var{varid},@var{storage},@var{chunkSizes}) \n\ Define the chunking settings of NetCDF variable @var{varid}.\n\ If @var{storage} is the string \"chunked\", the variable is stored by chunk of the size @var{chunkSizes}.\n\ If @var{storage} is the string \"contiguous\", the variable is stored in a contiguous way.\n\ @end deftypefn\n\ @seealso{netcdf_inqVarChunking}\n") { if (args.length() != 3 && args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string storagestr = args(2).string_value(); int storage; std::transform(storagestr.begin(), storagestr.end(),storagestr.begin(), ::toupper); if (storagestr == "CHUNKED") { storage = NC_CHUNKED; } else if (storagestr == "CONTIGUOUS") { storage = NC_CONTIGUOUS; } else { error("unknown storage %s",storagestr.c_str()); return octave_value(); } if (args.length() == 4) { OCTAVE_LOCAL_BUFFER (size_t, chunksizes, args(3).numel()); to_size_t_vector(args(3), args(3).numel(),chunksizes); check_err(nc_def_var_chunking(ncid, varid, storage, chunksizes)); } else { check_err(nc_def_var_chunking(ncid, varid, storage, NULL)); } return octave_value(); } //int nc_inq_var_chunking(int ncid, int varid, int *storagep, size_t *chunksizesp); DEFUN_DLD(netcdf_inqVarChunking, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{storage},@var{chunkSizes}] = } netcdf_inqVarChunking (@var{ncid},@var{varid}) \n\ Determines the chunking settings of NetCDF variable @var{varid}.\n\ If @var{storage} is the string \"chunked\", the variable is stored by chunk of the size @var{chunkSizes}.\n\ If @var{storage} is the string \"contiguous\", the variable is stored in a contiguous way.\n\ @end deftypefn\n\ @seealso{netcdf_defVarChunking}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int storage; int ndims; octave_value_list retval; check_err(nc_inq_varndims (ncid, varid, &ndims)); OCTAVE_LOCAL_BUFFER (size_t, chunksizes, ndims); check_err(nc_inq_var_chunking(ncid, varid, &storage, chunksizes)); if (storage == NC_CHUNKED) { retval(0) = octave_value("chunked"); // should use uint32NDArray on 32-bit? uint64NDArray chunkSizes = uint64NDArray(dim_vector(1,ndims)); for (int i = 0; i < ndims; i++) { chunkSizes(ndims-i-1) = chunksizes[i]; } retval(1) = octave_value(chunkSizes); } else { retval(0) = octave_value("contiguous"); retval(1) = octave_value(Array()); } return retval; } // nc_def_var_fletcher32(int ncid, int varid, int checksum); DEFUN_DLD(netcdf_defVarFletcher32, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_defVarFletcher32(@var{ncid},@var{varid},@var{checksum}) \n\ Defines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If @var{checksum} is the string \"FLETCHER32\", then fletcher32 checksums will be turned on for this variable. If @var{checksum} is \"NOCHECKSUM\", then checksums will be disabled. \n\ @end deftypefn\n\ @seealso{netcdf_defVar,netcdf_inqVarFletcher32}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int checksum = netcdf_get_constant(args(2)).int_value(); check_err(nc_def_var_fletcher32(ncid, varid, checksum)); return octave_value(); } DEFUN_DLD(netcdf_inqVarFletcher32, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{checksum} =} netcdf_inqVarFletcher32(@var{ncid},@var{varid}) \n\ Determines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If fletcher32 checksums is turned on for this variable, then @var{checksum} is the string \"FLETCHER32\". Otherwise it is the string \"NOCHECKSUM\". \n\ @end deftypefn\n\ @seealso{netcdf_defVar,netcdf_inqVarFletcher32}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int checksum; check_err(nc_inq_var_fletcher32(ncid, varid, &checksum)); if (checksum == NC_FLETCHER32) { return octave_value("FLETCHER32"); } else { return octave_value("NOCHECKSUM"); } } DEFUN_DLD(netcdf_endDef, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_endDef (@var{ncid}) \n\ Leaves define-mode of NetCDF file @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_reDef}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_enddef (ncid)); return octave_value(); } DEFUN_DLD(netcdf_reDef, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_reDef (@var{ncid}) \n\ Enter define-mode of NetCDF file @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_endDef}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_redef (ncid)); return octave_value(); } // http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c/nc_005fput_005fvar_005f-type.html#nc_005fput_005fvar_005f-type DEFUN_DLD(netcdf_putVar, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_putVar (@var{ncid},@var{varid},@var{data}) \n\ @deftypefnx {Loadable Function} {} netcdf_putVar (@var{ncid},@var{varid},@var{start},@var{data}) \n\ @deftypefnx {Loadable Function} {} netcdf_putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{data}) \n\ @deftypefnx {Loadable Function} {} netcdf_putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride},@var{data}) \n\ Put data in a NetCDF variable.\n\ The data @var{data} is stored in the variable @var{varid} of the NetCDF file @var{ncid}. \n\ @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), \n\ @var{count} is the number of elements of to be written along each dimension (default all elements)\n\ and @var{stride} is the sampling interval.\n\ @end deftypefn\n\ @seealso{netcdf_endDef}\n") { if (args.length() < 3 || args.length() > 6) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value (); octave_value data = args(args.length()-1); int ndims; check_err(nc_inq_varndims (ncid, varid, &ndims)); OCTAVE_LOCAL_BUFFER (size_t, start, ndims); OCTAVE_LOCAL_BUFFER (size_t, count, ndims); OCTAVE_LOCAL_BUFFER (ptrdiff_t, stride, ndims); nc_type xtype, basetype; check_err(nc_inq_vartype (ncid, varid, &xtype)); //int sliced_numel = tmp.numel(); if (xtype >= NC_FIRSTUSERTYPEID) { size_t datasz=0; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant write it", classid); return octave_value(); } if (!data.OV_ISCELL()) { error ("Expected data to be cell array"); return octave_value(); } } else { basetype = xtype; } start_count_stride(ncid, varid, args, args.length()-1, ndims, start, count, stride); // check if count matched size(data) if (xtype >= NC_FIRSTUSERTYPEID) { Cell ar = data.cell_value(); switch (basetype) { #define OV_NETCDF_PUT_VARA(netcdf_type,c_type,method) \ case netcdf_type: \ { \ for(octave_idx_type i=0;i v = ar(i).method(); \ nc_vlen_t ncl; \ ncl.len = v.numel(); \ ncl.p = (c_type*)v.fortran_vec(); \ count[0] = 1; \ check_err(nc_put_vars (ncid, varid, start, count, stride, &ncl)); \ start[0] = start[0]+1; \ } \ break; \ } OV_NETCDF_PUT_VARA(NC_BYTE, octave_int8, int8_array_value) OV_NETCDF_PUT_VARA(NC_UBYTE, octave_uint8, uint8_array_value) OV_NETCDF_PUT_VARA(NC_SHORT, octave_int16, int16_array_value) OV_NETCDF_PUT_VARA(NC_USHORT, octave_uint16, uint16_array_value) OV_NETCDF_PUT_VARA(NC_INT, octave_int32, int32_array_value) OV_NETCDF_PUT_VARA(NC_UINT, octave_uint32, uint32_array_value) OV_NETCDF_PUT_VARA(NC_INT64, octave_int64, int64_array_value) OV_NETCDF_PUT_VARA(NC_UINT64, octave_uint64, uint64_array_value) OV_NETCDF_PUT_VARA(NC_FLOAT, float, float_array_value) OV_NETCDF_PUT_VARA(NC_DOUBLE,double,array_value) OV_NETCDF_PUT_VARA(NC_CHAR, char, char_array_value) default: { error("unknown type %d" ,basetype); } } } else { switch (xtype) { #define OV_NETCDF_PUT_VAR(netcdf_type,c_type,method) \ case netcdf_type: \ { \ check_err(nc_put_vars (ncid, varid, start, count, stride, (c_type*)data.method().fortran_vec())); \ break; \ } OV_NETCDF_PUT_VAR(NC_BYTE, signed char, int8_array_value) OV_NETCDF_PUT_VAR(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_PUT_VAR(NC_SHORT, short, int16_array_value) OV_NETCDF_PUT_VAR(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_PUT_VAR(NC_INT, int, int32_array_value) OV_NETCDF_PUT_VAR(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_PUT_VAR(NC_INT64, long long, int64_array_value) OV_NETCDF_PUT_VAR(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_PUT_VAR(NC_FLOAT, float, float_array_value) OV_NETCDF_PUT_VAR(NC_DOUBLE,double,array_value) OV_NETCDF_PUT_VAR(NC_CHAR, char, char_array_value) default: { error("unknown type %d" ,xtype); } } } return octave_value(); } DEFUN_DLD(netcdf_getVar, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid}) \n\ @deftypefnx {Loadable Function} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid},@var{start}) \n\ @deftypefnx {Loadable Function} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid},@var{start},@var{count}) \n\ @deftypefnx {Loadable Function} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride}) \n\ Get the data from a NetCDF variable.\n\ The data @var{data} is loaded from the variable @var{varid} of the NetCDF file @var{ncid}. \n\ @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), \n\ @var{count} is the number of elements of to be written along each dimension (default all elements)\n\ and @var{stride} is the sampling interval.\n\ @end deftypefn\n\ @seealso{netcdf_putVar}\n") { if (args.length() < 2 || args.length() > 5) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value (); int ndims; octave_value data; nc_type xtype, basetype; check_err(nc_inq_vartype (ncid, varid, &xtype)); check_err(nc_inq_varndims (ncid, varid, &ndims)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); return octave_value(); } } //std::cout << "ndims " << ndims << std::endl; OCTAVE_LOCAL_BUFFER (size_t, start, ndims); OCTAVE_LOCAL_BUFFER (size_t, count, ndims); OCTAVE_LOCAL_BUFFER (ptrdiff_t, stride, ndims); size_t sz = 1; dim_vector sliced_dim_vector; if (ndims < 2) { sliced_dim_vector.resize(2); sliced_dim_vector(0) = 1; sliced_dim_vector(1) = 1; } else { sliced_dim_vector.resize(ndims); } start_count_stride(ncid, varid, args, args.length(), ndims, start, count, stride); // std::cout << "count " << count[0] << std::endl; // std::cout << "start " << start[0] << std::endl; // std::cout << "stide " << stride[0] << std::endl; // total size sz for (int i=0; i arr = Array < float >(sliced_dim_vector); // float* time; // time = (float*)malloc(10 * sizeof(float)); // check_err(nc_get_vars(ncid, varid, start, count, stride, time)); // data = octave_value(arr); // return data; // user type if (xtype >= NC_FIRSTUSERTYPEID) { switch (basetype) { #define OV_NETCDF_GET_VARA_CASE(netcdf_type,c_type) \ case netcdf_type: \ { \ Cell arr = Cell(sliced_dim_vector); \ /* necessary for netcdf 4.1.3 */ \ if (sz > 0) { \ OCTAVE_LOCAL_BUFFER (nc_vlen_t, vlendata, sz); \ check_err(nc_get_vars(ncid, varid, start, count, stride, vlendata)); \ dim_vector dv; \ dv.resize(2); \ for (size_t vi=0; vi a = Array < c_type >(dv); \ memcpy(a.fortran_vec(), vlendata[vi].p, vlendata[vi].len*sizeof(c_type)); \ arr(vi) = a; \ } \ nc_free_vlens(sz, vlendata); \ } else { \ warning_with_id("netcdf:variable-size-zero", "variable size 0 or currently too large to process"); \ } \ data = octave_value(arr); \ break; \ } OV_NETCDF_GET_VARA_CASE(NC_BYTE,octave_int8) OV_NETCDF_GET_VARA_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GET_VARA_CASE(NC_SHORT,octave_int16) OV_NETCDF_GET_VARA_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GET_VARA_CASE(NC_INT,octave_int32) OV_NETCDF_GET_VARA_CASE(NC_UINT,octave_uint32) OV_NETCDF_GET_VARA_CASE(NC_INT64,octave_int64) OV_NETCDF_GET_VARA_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GET_VARA_CASE(NC_FLOAT,float) OV_NETCDF_GET_VARA_CASE(NC_DOUBLE,double) OV_NETCDF_GET_VARA_CASE(NC_CHAR, char) default: { error("unknown type %d" ,xtype); } } } else { switch (xtype) { #define OV_NETCDF_GET_VAR_CASE(netcdf_type,c_type) \ case netcdf_type: \ { \ Array < c_type > arr = Array < c_type >(sliced_dim_vector); \ /* necessary for netcdf 4.1.3 */ \ if (sz > 0) { \ check_err(nc_get_vars(ncid, varid, start, count, stride, arr.fortran_vec())); \ } else { \ warning_with_id("netcdf:variable-size-zero", "variable size 0 or currently too large to process"); \ } \ data = octave_value(arr); \ break; \ } OV_NETCDF_GET_VAR_CASE(NC_BYTE,octave_int8) OV_NETCDF_GET_VAR_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GET_VAR_CASE(NC_SHORT,octave_int16) OV_NETCDF_GET_VAR_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GET_VAR_CASE(NC_INT,octave_int32) OV_NETCDF_GET_VAR_CASE(NC_UINT,octave_uint32) OV_NETCDF_GET_VAR_CASE(NC_INT64,octave_int64) OV_NETCDF_GET_VAR_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GET_VAR_CASE(NC_FLOAT,float) OV_NETCDF_GET_VAR_CASE(NC_DOUBLE,double) OV_NETCDF_GET_VAR_CASE(NC_CHAR, char) default: { error("unknown type %d" ,xtype); } } } return data; } DEFUN_DLD(netcdf_close, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_close(@var{ncid}) \n\ Close the NetCDF file with the id @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_close(ncid)); return octave_value (); } // int nc_inq_attname(int ncid, int varid, int attnum, char *name); DEFUN_DLD(netcdf_inqAttName, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{name} =} netcdf_inqAttName (@var{ncid},@var{varid},@var{attnum}) \n\ Get the name of a NetCDF attribute.\n\ This function returns the name of the attribute with the id @var{attnum} of the variable \n\ @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_inqAttName}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int attnum = args(2).scalar_value(); char name[NC_MAX_NAME+1]; check_err(nc_inq_attname(ncid, varid, attnum, name)); return octave_value(std::string(name)); } DEFUN_DLD(netcdf_inqAttID, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{attnum} =} netcdf_inqAttID(@var{ncid},@var{varid},@var{attname}) \n\ Return the attribute id @var{attnum} of the attribute named @var{attname} of the variable @var{varid} in the dataset @var{ncid}. \n\ For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_inqAttName}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string attname = args(2).string_value(); int attnum; check_err (nc_inq_attid (ncid, varid, attname.c_str(), &attnum)); return octave_value(attnum); } //int nc_inq_att (int ncid, int varid, const char *name, // nc_type *xtypep, size_t *lenp); DEFUN_DLD(netcdf_inqAtt, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{xtype},@var{len}] = } netcdf_inqAtt(@var{ncid},@var{varid},@var{name}) \n\ Get attribute type and length.\n\ @seealso{netcdf_inqAttName}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); int xtype; size_t len; octave_value_list retval; check_err(nc_inq_att(ncid, varid, name.c_str(), &xtype, &len)); retval(0) = octave_value(xtype); retval(1) = octave_value(len); return retval; } DEFUN_DLD(netcdf_getAtt, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{data} =} netcdf_getAtt (@var{ncid},@var{varid},@var{name}) \n\ Get the value of a NetCDF attribute.\n\ This function returns the value of the attribute called @var{name} of the variable \n\ @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_putAtt}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string attname = args(2).string_value(); nc_type xtype, basetype; size_t len; octave_value data; check_err(nc_inq_att(ncid, varid, attname.c_str(), &xtype, &len)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); } } #define OV_NETCDF_GET_ATT_CASE(netcdf_type,c_type) \ if (basetype == netcdf_type) \ { \ Array< c_type > arr = Array< c_type >(dim_vector(1,len)); \ check_err(nc_get_att(ncid, varid, attname.c_str(), arr.fortran_vec())); \ data = octave_value(arr); \ } #define OV_NETCDF_GETVLEN_ATT_CASE(netcdf_type,c_type) \ if(basetype == netcdf_type) \ { \ OCTAVE_LOCAL_BUFFER (nc_vlen_t, vlendata, len); \ Array< c_type > arr = Array< c_type >(dim_vector(1,len)); \ check_err(nc_get_att(ncid, varid, attname.c_str(), vlendata)); \ for (size_t vi=0; vi= NC_FIRSTUSERTYPEID) { OV_NETCDF_GETVLEN_ATT_CASE(NC_BYTE,octave_int8) OV_NETCDF_GETVLEN_ATT_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GETVLEN_ATT_CASE(NC_SHORT,octave_int16) OV_NETCDF_GETVLEN_ATT_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GETVLEN_ATT_CASE(NC_INT,octave_int32) OV_NETCDF_GETVLEN_ATT_CASE(NC_UINT,octave_uint32) OV_NETCDF_GETVLEN_ATT_CASE(NC_INT64,octave_int64) OV_NETCDF_GETVLEN_ATT_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GETVLEN_ATT_CASE(NC_FLOAT,float) OV_NETCDF_GETVLEN_ATT_CASE(NC_DOUBLE,double) OV_NETCDF_GETVLEN_ATT_CASE(NC_CHAR, char) } else { OV_NETCDF_GET_ATT_CASE(NC_BYTE,octave_int8) OV_NETCDF_GET_ATT_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GET_ATT_CASE(NC_SHORT,octave_int16) OV_NETCDF_GET_ATT_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GET_ATT_CASE(NC_INT,octave_int32) OV_NETCDF_GET_ATT_CASE(NC_UINT,octave_uint32) OV_NETCDF_GET_ATT_CASE(NC_INT64,octave_int64) OV_NETCDF_GET_ATT_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GET_ATT_CASE(NC_FLOAT,float) OV_NETCDF_GET_ATT_CASE(NC_DOUBLE,double) OV_NETCDF_GET_ATT_CASE(NC_CHAR, char) } return data; } DEFUN_DLD(netcdf_putAtt, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_putAtt (@var{ncid},@var{varid},@var{name},@var{data}) \n\ Defines a NetCDF attribute.\n\ This function defines the attribute called @var{name} of the variable \n\ @var{varid} in the NetCDF file @var{ncid}. The value of the attribute will be @var{data}. \n\ For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_getAtt}\n\ @end deftypefn") { if (args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string attname = args(2).string_value(); octave_value data = args(3); nc_type xtype; // get matching netcdf type if (data.is_string()) xtype = NC_CHAR; else if (data.is_int8_type()) xtype = NC_BYTE; else if (data.is_uint8_type()) xtype = NC_UBYTE; else if (data.is_int16_type()) xtype = NC_SHORT; else if (data.is_uint16_type()) xtype = NC_USHORT; else if (data.is_int32_type()) xtype = NC_INT; else if (data.is_uint32_type()) xtype = NC_UINT; else if (data.is_int64_type()) xtype = NC_INT64; else if (data.is_uint64_type()) xtype = NC_UINT64; else if (data.is_single_type()) xtype = NC_FLOAT; else xtype = NC_DOUBLE; //cout << "xtype " << xtype << endl; size_t len = data.numel(); switch (xtype) { #define OV_NETCDF_PUT_ATT(netcdf_type,c_type,method) \ case netcdf_type: \ { \ check_err(nc_put_att (ncid, varid, attname.c_str(), xtype, len, data.method().fortran_vec())); \ break; \ } OV_NETCDF_PUT_ATT(NC_BYTE, signed char, int8_array_value) OV_NETCDF_PUT_ATT(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_PUT_ATT(NC_SHORT, short, int16_array_value) OV_NETCDF_PUT_ATT(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_PUT_ATT(NC_INT, int, int32_array_value) OV_NETCDF_PUT_ATT(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_PUT_ATT(NC_INT64, long long, int64_array_value) OV_NETCDF_PUT_ATT(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_PUT_ATT(NC_FLOAT, float, float_array_value) OV_NETCDF_PUT_ATT(NC_DOUBLE,double,array_value) OV_NETCDF_PUT_ATT(NC_CHAR, char, char_array_value) } /* check_err(nc_put_att (int ncid, int varid, const char *name, nc_type xtype, size_t len, const void *op));*/ return octave_value(); } DEFUN_DLD(netcdf_copyAtt, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_copyAtt (@var{ncid},@var{varid},@var{name},@var{ncid_out},@var{varid_out}) \n\ Copies the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid} \n\ to the variable @var{varid_out} in the data set @var{ncid_out}. \n\ To copy a global attribute use netcdf_getConstant(\"global\") for @var{varid} or @var{varid_out}.\n\ @seealso{netcdf_getAtt,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 5) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); int ncid_out = args(3).scalar_value(); int varid_out = args(4).scalar_value(); check_err (nc_copy_att (ncid, varid, name.c_str(), ncid_out, varid_out)); return octave_value (); } DEFUN_DLD(netcdf_renameAtt, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_renameAtt(@var{ncid},@var{varid},@var{old_name},@var{new_name}) \n\ Renames the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid}. @var{new_name} is the new name of the attribute.\n\ To rename a global attribute use netcdf_getConstant(\"global\") for @var{varid}.\n\ @seealso{netcdf_copyAtt,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 4) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string old_name = args(2).string_value(); std::string new_name = args(3).string_value(); check_err(nc_rename_att (ncid, varid, old_name.c_str(), new_name.c_str())); return octave_value (); } DEFUN_DLD(netcdf_delAtt, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {} netcdf_delAtt(@var{ncid},@var{varid},@var{name}) \n\ Deletes the attribute named @var{name} of the variable @var{varid} in the data set @var{ncid}. \n\ To delete a global attribute use netcdf_getConstant(\"global\") for @var{varid}.\n\ @seealso{netcdf_defAtt,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); check_err(nc_del_att (ncid, varid, name.c_str())); return octave_value (); } DEFUN_DLD(netcdf_inqVarID, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{varid} = } netcdf_inqVarID (@var{ncid},@var{name}) \n\ Return the id of a variable based on its name.\n\ @seealso{netcdf_defVar,netcdf_inqVarIDs}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string varname = args(1).string_value(); int varid; check_err(nc_inq_varid(ncid,varname.c_str(), &varid)); return octave_value(varid); } DEFUN_DLD(netcdf_inqVarIDs, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{varids} = } netcdf_inqVarID (@var{ncid}) \n\ Return all variable ids.\n\ This functions returns all variable ids in a NetCDF file or NetCDF group.\n\ @seealso{netcdf_inqVarID}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int nvars; check_err(nc_inq_varids(ncid, &nvars, NULL)); OCTAVE_LOCAL_BUFFER(int,tmp,nvars); NETCDF_INT_ARRAY varids = NETCDF_INT_ARRAY(dim_vector(1,nvars)); check_err(nc_inq_varids(ncid, &nvars, tmp)); for (int i=0; i < nvars; i++) { varids(i) = tmp[i]; } return octave_value(varids); } DEFUN_DLD(netcdf_inqVar, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{name},@var{nctype},@var{dimids},@var{nattr}] = } netcdf_inqVar (@var{ncid},@var{varid}) \n\ Inquires information about a NetCDF variable.\n\ This functions returns the @var{name}, the NetCDF type @var{nctype}, an array of dimension ids \n\ @var{dimids} and the number of attributes @var{nattr} of the NetCDF variable. @var{nctype} in an \n\ integer corresponding NetCDF constants.\n\ @seealso{netcdf_inqVarID,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); char name[NC_MAX_NAME+1]; int ndims, natts; nc_type xtype; octave_value_list retval; check_err(nc_inq_varndims(ncid, varid, &ndims)); OCTAVE_LOCAL_BUFFER (int, dimids, ndims); check_err(nc_inq_var(ncid, varid, name, &xtype, &ndims, dimids, &natts)); retval(0) = octave_value(std::string(name)); retval(1) = octave_value(xtype); // copy output arguments Array dimids_ = Array(dim_vector(1,ndims)); for (int i = 0; i < ndims; i++) { dimids_(i) = dimids[ndims-i-1]; } retval(2) = octave_value(dimids_); retval(3) = octave_value(natts); return retval; } DEFUN_DLD(netcdf_inqDim, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{name},@var{length}] =} netcdf_inqDim(@var{ncid},@var{dimid}) \n\ Returns the name and length of a NetCDF dimension.\n\ @seealso{netcdf_inqDimID}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int dimid = args(1).scalar_value(); octave_value_list retval; char name[NC_MAX_NAME+1]; size_t length; check_err(nc_inq_dim(ncid, dimid, name, &length)); retval(0) = octave_value(std::string(name)); retval(1) = octave_value(length); return retval; } DEFUN_DLD(netcdf_inqDimID, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{dimid} =} netcdf_inqDimID(@var{ncid},@var{dimname}) \n\ Return the id of a NetCDF dimension.\n\ @seealso{netcdf_inqDim}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string dimname = args(1).string_value(); int id; octave_value_list retval; check_err(nc_inq_dimid(ncid, dimname.c_str(), &id)); retval(0) = octave_value(id); return retval; } // int nc_inq_dimids(int ncid, int *ndims, int *dimids, int include_parents); DEFUN_DLD(netcdf_inqDimIDs, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{dimids} =} netcdf_inqDimID(@var{ncid}) \n\ @deftypefnx {Loadable Function} {@var{dimids} =} netcdf_inqDimID(@var{ncid},@var{include_parents}) \n\ Return the dimension ids defined in a NetCDF file.\n\ If @var{include_parents} is 1, the dimension ids of the parent group are also returned.\n\ Per default this is not the case (@var{include_parents} is 0).\n\ @seealso{netcdf_inqDim}\n\ @end deftypefn") { if (args.length() != 1 && args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int include_parents = 0; if (args.length() == 2) { include_parents = args(0).scalar_value(); } int ndims; check_err(nc_inq_ndims(ncid, &ndims)); OCTAVE_LOCAL_BUFFER(int,tmp,ndims); NETCDF_INT_ARRAY dimids = NETCDF_INT_ARRAY(dim_vector(1,ndims)); check_err(nc_inq_dimids(ncid, &ndims, tmp, include_parents)); for (int i=0; i < ndims; i++) { dimids(i) = tmp[i]; } return octave_value(dimids); } // groups //int nc_def_grp(int parent_ncid, const char *name, int *new_ncid); DEFUN_DLD(netcdf_defGrp, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{new_ncid} =} netcdf_defGrp(@var{ncid},@var{name}) \n\ Define a group in a NetCDF file.\n\ @seealso{netcdf_inqGrps}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int parent_ncid = args(0).scalar_value(); std::string name = args(1).string_value(); int new_ncid; check_err(nc_def_grp(parent_ncid, name.c_str(), &new_ncid)); return octave_value(new_ncid); } // int nc_inq_grps(int ncid, int *numgrps, int *ncids); DEFUN_DLD(netcdf_inqGrps, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{ncids} =} netcdf_inqGrps(@var{ncid}) \n\ Return all groups ids in a NetCDF file.\n\ @seealso{netcdf_inqGrps}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int numgrps; check_err(nc_inq_grps(ncid, &numgrps, NULL)); OCTAVE_LOCAL_BUFFER(int,tmp,numgrps); NETCDF_INT_ARRAY ncids = NETCDF_INT_ARRAY(dim_vector(1,numgrps)); check_err(nc_inq_grps(ncid, NULL, tmp)); for (int i=0; i < numgrps; i++) { ncids(i) = tmp[i]; } return octave_value(ncids); } //int nc_inq_grpname(int ncid, char *name); DEFUN_DLD(netcdf_inqGrpName, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{name} =} netcdf_inqGrpName(@var{ncid}) \n\ Return group name in a NetCDF file.\n\ @seealso{netcdf_inqGrps}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); char name[NC_MAX_NAME+1]; check_err(nc_inq_grpname(ncid, name)); return octave_value(std::string(name)); } //int nc_inq_grpname_full(int ncid, size_t *lenp, char *full_name); DEFUN_DLD(netcdf_inqGrpNameFull, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{name} =} netcdf_inqGrpNameFull(@var{ncid}) \n\ Return full name of group in NetCDF file.\n\ @seealso{netcdf_inqGrpName}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); size_t len; check_err(nc_inq_grpname_len(ncid,&len)); OCTAVE_LOCAL_BUFFER(char, name, len+1); if (name == 0) { error ("netcdf: error allocating buffer for name\n"); return octave_value (); } octave_value retval; check_err(nc_inq_grpname_full(ncid, &len, name)); retval = octave_value(std::string(name)); return retval; } // int nc_inq_grp_parent(int ncid, int *parent_ncid); DEFUN_DLD(netcdf_inqGrpParent, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{parent_ncid} =} netcdf_inqGrpParent(@var{ncid}) \n\ Return id of the parent group\n\ @seealso{netcdf_inqGrpName}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int parent_ncid; check_err(nc_inq_grp_parent(ncid, &parent_ncid)); return octave_value(parent_ncid); } // int nc_inq_grp_full_ncid(int ncid, char *full_name, int *grp_ncid); DEFUN_DLD(netcdf_inqGrpFullNcid, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{grp_ncid} =} netcdf_inqGrpFullNcid(@var{ncid},@var{name}) \n\ Return the group id based on the full group name.\n\ @seealso{netcdf_inqGrpName}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value(); int grp_ncid; int format; check_err(nc_inq_format(ncid, &format)); if (format == NC_FORMAT_CLASSIC || format == NC_FORMAT_64BIT) { if (name == "/") { return octave_value(ncid); } else { error("groups are not supported in this format"); return octave_value(); } } // nc_inq_grp_full_ncid makes a segmentation fault if // file is in non-HDF5 format check_err(nc_inq_grp_full_ncid(ncid, name.c_str(),&grp_ncid)); return octave_value(grp_ncid); } // int nc_inq_ncid(int ncid, const char *name, int *grp_ncid); DEFUN_DLD(netcdf_inqNcid, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{grp_ncid} =} netcdf_inqNcid(@var{ncid},@var{name}) \n\ Return group id based on its name\n\ @seealso{netcdf_inqGrpFullNcid}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value(); int grp_ncid; check_err(nc_inq_ncid(ncid, name.c_str(), &grp_ncid)); return octave_value(grp_ncid); } // int nc_def_vlen(int ncid, const char *name, nc_type base_typeid, nc_type *xtypep); DEFUN_DLD(netcdf_defVlen, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {@var{varid} = } netcdf_defVlen(@var{ncid},@var{typename},@var{basetype}) \n\ Defines a NC_VLEN variable length array type with the type name @var{typename} and a base datatype of @var{basetype} in the dataset @var{ncid}. @var{basetype} can be \"byte\", \"ubyte\", \"short\", \"ushort\", \"int\", \"uint\", \"int64\", \"uint64\", \"float\", \"double\", \"char\" or the corresponding number as returned by netcdf_getConstant. The new data type id is returned. \n\ @end deftypefn\n\ @seealso{netcdf_open,netcdf_defVar, netcdf_inqVlen}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value (); nc_type basetype = 0; if (args(2).is_string()) basetype = netcdf_get_constant(args(2)).int_value(); else basetype = args(2).int_value(); nc_type varid; check_err(nc_def_vlen (ncid, name.c_str(), basetype, &varid)); return octave_value(varid); } // int nc_inq_vlen(int ncid, nc_type xtype, char *name, size_t datasz, nc_type *basetypeid); DEFUN_DLD(netcdf_inqVlen, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{typename}, @var{bytesize}, @var{basetypeid}] = } netcdf_inqVlen(@var{ncid},@var{typeid}) \n\ Provide information on a NC_VLEN variable length array type @var{typeid} in the dataset @var{ncid}.\n\ \n \ The function returns the typename, bytesize, and base type id.\n \ \n \ @end deftypefn\n\ @seealso{netcdf_open, netcdf_defVlen}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); nc_type nctypeid = netcdf_get_constant(args(1)).int_value();; nc_type basetypeid; char name[NC_MAX_NAME+1]; size_t datasz; check_err(nc_inq_vlen (ncid, nctypeid, name, &datasz, &basetypeid)); octave_value_list retval; retval(0) = octave_value(name); retval(1) = octave_value(datasz); retval(2) = octave_value(basetypeid); return retval; } // int nc_inq_user_type(int ncid, nc_type xtype, char *name, size_t datasz, nc_type *basetypeid, size_t nfields, int *classp); DEFUN_DLD(netcdf_inqUserType, args,, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{typename}, @var{bytesize}, @var{basetypeid}, @var{numfields}, @var{classid}] = } netcdf_inqUserType(@var{ncid},@var{typeid}) \n\ Provide information on a user defined type @var{typeid} in the dataset @var{ncid}.\n\ \n \ The function returns the typename, bytesize, base type id, number of fields and class identifier of the type.\n \ \n \ @end deftypefn\n\ @seealso{netcdf_open, netcdf_defVlen, netcdf_inqVlen}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); nc_type nctypeid = netcdf_get_constant(args(1)).int_value();; nc_type basetypeid; char name[NC_MAX_NAME+1]; size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, nctypeid, name, &datasz, &basetypeid, &nfields, &classid)); octave_value_list retval; retval(0) = octave_value(name); retval(1) = octave_value(datasz); retval(2) = octave_value(basetypeid); retval(3) = octave_value(nfields); retval(4) = octave_value(classid); return retval; } netcdf-1.0.19/src/aclocal.m40000644000000000000000000000127115126111435012422 0ustar00# generated automatically by aclocal 1.17 -*- Autoconf -*- # Copyright (C) 1996-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_include([m4/octave-forge.m4]) netcdf-1.0.19/src/autogen.sh0000755000000000000000000000020415126111435012556 0ustar00#! /bin/sh ## Generate ./configure and other build files aclocal autoconf autoheader -f #rm -f configure.ac rm -rf autom4te.cache netcdf-1.0.19/src/config.guess0000755000000000000000000012564715126111435013120 0ustar00#!/usr/bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-10-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; k1om:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; mips64el:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac cat >&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: netcdf-1.0.19/src/config.h.in0000644000000000000000000000132315126111435012603 0ustar00/* config.h.in. Generated from configure.ac by autoheader. */ #include "undef-ah-octave.h" /* macro for alternative Octave symbols */ #undef OV_ISCELL /* macro for alternative Octave symbols */ #undef OV_ISEMPTY /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION #include "oct-alt-includes.h" netcdf-1.0.19/src/config.sub0000755000000000000000000010672615126111435012560 0ustar00#!/usr/bin/sh # Configuration validation subroutine script. # Copyright 1992-2016 Free Software Foundation, Inc. timestamp='2016-09-05' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: netcdf-1.0.19/src/configure0000755000000000000000000037625215126111435012507 0ustar00#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for octave netcdf package 1.0.19. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='octave netcdf package' PACKAGE_TARNAME='octave-netcdf-package' PACKAGE_VERSION='1.0.19' PACKAGE_STRING='octave netcdf package 1.0.19' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS NETCDF_CPPFLAGS NETCDF_LIBS NC_CONFIG MKOCTFILE OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX SED AWK target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures octave netcdf package 1.0.19 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/octave-netcdf-package] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of octave netcdf package 1.0.19:";; esac cat <<\_ACEOF Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF octave netcdf package configure 1.0.19 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by octave netcdf package $as_me 1.0.19, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" # Avoid warnings for redefining AH-generated preprocessor symbols of # Octave. # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf "%s\n" "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 printf %s "checking whether the C++ compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 printf %s "checking for C++ compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C++ compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else case e in #( e) CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else case e in #( e) ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 ;; esac fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Extract the first word of "mkoctfile", so it can be a program name with args. set dummy mkoctfile; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MKOCTFILE+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$MKOCTFILE"; then ac_cv_prog_MKOCTFILE="$MKOCTFILE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MKOCTFILE="mkoctfile" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi MKOCTFILE=$ac_cv_prog_MKOCTFILE if test -n "$MKOCTFILE"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKOCTFILE" >&5 printf "%s\n" "$MKOCTFILE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$MKOCTFILE" && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: no mkoctfile found on path" >&5 printf "%s\n" "$as_me: WARNING: no mkoctfile found on path" >&2;} if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then case $host_os in mingw*) # try demangle spaces in escaped input strings MKOCTFILE=`echo $MKOCTFILE | $SED "s,\\\\\ ,?,g"` ;; *) ;; esac fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nc-config", so it can be a program name with args. set dummy ${ac_tool_prefix}nc-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NC_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NC_CONFIG"; then ac_cv_prog_NC_CONFIG="$NC_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NC_CONFIG="${ac_tool_prefix}nc-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi NC_CONFIG=$ac_cv_prog_NC_CONFIG if test -n "$NC_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NC_CONFIG" >&5 printf "%s\n" "$NC_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NC_CONFIG"; then ac_ct_NC_CONFIG=$NC_CONFIG # Extract the first word of "nc-config", so it can be a program name with args. set dummy nc-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NC_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_NC_CONFIG"; then ac_cv_prog_ac_ct_NC_CONFIG="$ac_ct_NC_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NC_CONFIG="nc-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_NC_CONFIG=$ac_cv_prog_ac_ct_NC_CONFIG if test -n "$ac_ct_NC_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NC_CONFIG" >&5 printf "%s\n" "$ac_ct_NC_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NC_CONFIG" = x; then NC_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NC_CONFIG=$ac_ct_NC_CONFIG fi else NC_CONFIG="$ac_cv_prog_NC_CONFIG" fi if test -z "$NC_CONFIG"; then as_fn_error 1 "nc-config not found" "$LINENO" 5; fi NETCDF_LIBS=`$NC_CONFIG --libs` NETCDF_CPPFLAGS=`$NC_CONFIG --cflags` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for netcdf4 support" >&5 printf %s "checking for netcdf4 support... " >&6; } NETCDF_V4=`$NC_CONFIG --has-nc4` if test x$NETCDF_V4 == xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "netcdf4 support missing. Did you disable netcdf4 features?" "$LINENO" 5 fi # Checks for octave depreciated symbols # Simple symbol alternatives of different Octave versions. save_altsyms_CXX="$CXX" save_altsyms_CXXFLAGS="$CXXFLAGS" save_altsyms_LDFLAGS="$LDFLAGS" save_altsyms_LIBS="$LIBS" OCTINCLUDEDIR="${OCTINCLUDEDIR:-`$MKOCTFILE -p OCTINCLUDEDIR`}/.." OCTLIBDIR=${OCTLIBDIR:-`$MKOCTFILE -p OCTLIBDIR`} if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then MSYSTEM="${MSYSTEM}" else MSYSTEM="none" fi case X$MSYSTEM in XMINGW64*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` ;; XMINGW32*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw32,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g -e "s,${OCTAVE_HOME},/mingw32,g"'` ;; *) ;; esac CXX=`${MKOCTFILE} -p CXX` CXXFLAGS="-I$OCTINCLUDEDIR $CXXFLAGS" LDFLAGS="-L$OCTLIBDIR $LDFLAGS" LIBS="-loctinterp $LIBS" echo '/* generated by configure */' > oct-alt-includes.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking is_cell or iscell" >&5 printf %s "checking is_cell or iscell... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { octave_value ().iscell (); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define OV_ISCELL iscell" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: iscell" >&5 printf "%s\n" "iscell" >&6; } echo ' ' >> oct-alt-includes.h else case e in #( e) printf "%s\n" "#define OV_ISCELL is_cell" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: is_cell" >&5 printf "%s\n" " is_cell" >&6; } echo '' >> oct-alt-includes.h ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking is_empty or isempty" >&5 printf %s "checking is_empty or isempty... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { octave_value ().isempty (); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define OV_ISEMPTY isempty" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: isempty" >&5 printf "%s\n" "isempty" >&6; } echo ' ' >> oct-alt-includes.h else case e in #( e) printf "%s\n" "#define OV_ISEMPTY is_empty" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: is_empty" >&5 printf "%s\n" " is_empty" >&6; } echo '' >> oct-alt-includes.h ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX=$save_altsyms_CXX CXXFLAGS=$save_altsyms_CXXFLAGS LDFLAGS=$save_altsyms_LDFLAGS LIBS=$save_altsyms_LIBS ac_config_files="$ac_config_files Makefile" test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by octave netcdf package $as_me 1.0.19, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ octave netcdf package config.status 1.0.19 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: octave-forge is configured with mkoctfile: $MKOCTFILE nc-config: $NC_CONFIG netCDF compiler flags: $NETCDF_CPPFLAGS netCDF libraries: $NETCDF_LIBS " >&5 printf "%s\n" " octave-forge is configured with mkoctfile: $MKOCTFILE nc-config: $NC_CONFIG netCDF compiler flags: $NETCDF_CPPFLAGS netCDF libraries: $NETCDF_LIBS " >&6; } netcdf-1.0.19/src/configure.ac0000644000000000000000000001071415126111435013052 0ustar00dnl The configure script is generated by autogen.sh from configure.base dnl and the various configure.add files in the source tree. Edit dnl configure.base and reprocess rather than modifying ./configure. ### Copyright (C) 2018-2025 John Donoghue ### ### This program is free software; you can redistribute it and/or ### modify it under the terms of the GNU General Public License as ### published by the Free Software Foundation; either version 3 of the ### License, or (at your option) any later version. ### ### This program is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ### General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with this program; if not, see ### . dnl autoconf 2.13 certainly doesn't work! What is the minimum requirement? AC_PREREQ(2.2) AC_INIT([octave netcdf package],[1.0.19]) AC_CONFIG_HEADERS([config.h]) # Avoid warnings for redefining AH-generated preprocessor symbols of # Octave. AH_TOP([#include "undef-ah-octave.h"]) AC_CONFIG_MACRO_DIRS([m4]) AC_CANONICAL_HOST AC_CANONICAL_TARGET dnl Kill caching --- this ought to be the default define([AC_CACHE_LOAD], )dnl define([AC_CACHE_SAVE], )dnl dnl uncomment to put support files in another directory dnl AC_CONFIG_AUX_DIR(admin) dnl if tools we need AC_PROG_AWK AC_PROG_SED AC_PROG_CXX AC_LANG(C++) dnl Check for mkoctfile and octave AC_CHECK_PROG([MKOCTFILE],mkoctfile,mkoctfile) test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then case $host_os in mingw*) # try demangle spaces in escaped input strings MKOCTFILE=`echo $MKOCTFILE | $SED "s,\\\\\ ,?,g"` ;; *) ;; esac fi dnl ********************************************************** dnl checking for nc-config dnl AC_CHECK_PROG(NC_CONFIG, nc-config, nc-config) AC_CHECK_TOOL(NC_CONFIG, nc-config, []) if test -z "$NC_CONFIG"; then AC_MSG_ERROR([nc-config not found], 1); fi NETCDF_LIBS=`$NC_CONFIG --libs` NETCDF_CPPFLAGS=`$NC_CONFIG --cflags` AC_SUBST(NETCDF_LIBS) AC_SUBST(NETCDF_CPPFLAGS) dnl The following will be either "yes" or "no" AC_MSG_CHECKING(for netcdf4 support) NETCDF_V4=`$NC_CONFIG --has-nc4` if test x$NETCDF_V4 == xyes; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR(netcdf4 support missing. Did you disable netcdf4 features?) fi dnl ********************************************************** # Checks for octave depreciated symbols # Simple symbol alternatives of different Octave versions. save_altsyms_CXX="$CXX" save_altsyms_CXXFLAGS="$CXXFLAGS" save_altsyms_LDFLAGS="$LDFLAGS" save_altsyms_LIBS="$LIBS" OCTINCLUDEDIR="${OCTINCLUDEDIR:-`$MKOCTFILE -p OCTINCLUDEDIR`}/.." OCTLIBDIR=${OCTLIBDIR:-`$MKOCTFILE -p OCTLIBDIR`} if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then MSYSTEM="${MSYSTEM}" else MSYSTEM="none" fi case X$MSYSTEM in XMINGW64*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` ;; XMINGW32*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw32,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g -e "s,${OCTAVE_HOME},/mingw32,g"'` ;; *) ;; esac CXX=`${MKOCTFILE} -p CXX` CXXFLAGS="-I$OCTINCLUDEDIR $CXXFLAGS" LDFLAGS="-L$OCTLIBDIR $LDFLAGS" LIBS="-loctinterp $LIBS" OF_OCTAVE_LIST_ALT_SYMS([ [dnl [is_cell], [iscell], [[octave_value ().iscell ();]], [OV_ISCELL], [], [] ], [dnl [is_empty], [isempty], [[octave_value ().isempty ();]], [OV_ISEMPTY], [], [] ] ],[oct-alt-includes.h]) CXX=$save_altsyms_CXX CXXFLAGS=$save_altsyms_CXXFLAGS LDFLAGS=$save_altsyms_LDFLAGS LIBS=$save_altsyms_LIBS dnl ********************************************************** AC_CONFIG_FILES([Makefile]) AC_OUTPUT AC_MSG_RESULT([ octave-forge is configured with mkoctfile: $MKOCTFILE nc-config: $NC_CONFIG netCDF compiler flags: $NETCDF_CPPFLAGS netCDF libraries: $NETCDF_LIBS ]) netcdf-1.0.19/src/m4/0000755000000000000000000000000015126111435011101 5ustar00netcdf-1.0.19/src/m4/octave-forge.m40000644000000000000000000000576015126111435013734 0ustar00# Copyright (C) 2017-2018 Olaf Till # Modifications to print what is searching for by JohnD # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # arguments of OF_OCTAVE_ALT_SYMS (see also description of # OF_OCTAVE_LIST_ALT_SYMS below): # # $1: symbol version 1 # $2: symbol version 2 # $3: test for symbol version 2 # $4: macro name to access alternative symbols # $5: include directives for symbol version 1 # $6: include directives for symbol version 2 # (a list of lists of args 1--6 is $1 of OF_OCTAVE_LIST_ALT_SYMS) # $7: name of generated include file with alternatives of Octave headers # (arg7 is $2 of OF_OCTAVE_LIST_ALT_SYMS) AC_DEFUN([OF_OCTAVE_ALT_SYMS], [ AC_MSG_CHECKING([$1 or $2]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ] $6], [$3])], [AC_DEFINE($4, [[$2]], [macro for alternative Octave symbols]) AC_MSG_RESULT([$2]) echo '$6' >> $7], [AC_DEFINE($4, [[$1]], [macro for alternative Octave symbols]) AC_MSG_RESULT([$1]) echo '$5' >> $7] ) ]) # OF_OCTAVE_LIST_ALT_SYMS is called in the following way: # # OF_OCTAVE_LIST_ALT_SYMS([ # [dnl # [old_octave_symbol], # [new_octave_symbol], # [[compilation test] # [for new_octave_symbol]], # [NAME_OF_GENERATED_MACRO____WILL_EXPAND_TO_OLD_OR_NEW_SYMBOL], # [[include directives] # [except #include ] # [necessary to compile with old_octave_symbol]], # [[include directives] # [except #include ] # [nessary to compile with new_octave_symbol] # [and to compile the test]] # ], # # ... further such lists as the above # # ], # # [name-of-header-file-for-alternative-octave-iclude-directives.h]) # # # This file should be put into src/m4/, and the line # # AC_CONFIG_MACRO_DIRS([m4]) # # should be put into src/configure.ac. The package should use # autoheader to generate config.h.in (src/bootstrap should contain the # lines 'aclocal', 'autoconf', and 'autoheader -f'). Package code # should include config.h and use the generated macros to access the # alternative symbols of Octave. An example of a call to # OF_OCTAVE_LIST_ALT_SYMS in src/configure.ac is available together # with this file. AC_DEFUN([OF_OCTAVE_LIST_ALT_SYMS], [ echo '/* generated by configure */' > $2 m4_foreach([it], [$1], [m4_apply([OF_OCTAVE_ALT_SYMS], [it, $2])]) AH_BOTTOM([#include "$2"]) ]) netcdf-1.0.19/src/netcdf_constants.awk0000644000000000000000000000436015126111435014627 0ustar00# Copyright (C) 2013-2022 Alexander Barth # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; If not, see . # Generate the list of NetCDF constants based on the header file netcdf.h BEGIN { print "// generated by netcdf_constants.awk"; } /#define[ \t]+NC_[0-9a-zA-Z_]*[ \t]+/ { constant=$2; ov = constant; # NC_INDEPENDENT and NC_COLLECTIVE are no longer defined # in netcdf 4.3.1 if ($0 ~ /.*internally.*/ || \ constant == "NC_TURN_OFF_LOGGING" || \ constant == "NC_INDEPENDENT" || \ constant == "NC_COLLECTIVE" \ ) { next; } if (constant ~ /NC_.*_BYTE/) { ov = "octave_int8(" constant ")"; } else if (constant ~ /NC_.*_UBYTE/) { ov = "octave_uint8(" constant ")"; } else if (constant ~ /NC_.*_SHORT/) { ov = "octave_int16(" constant ")"; } else if (constant ~ /NC_.*_USHORT/) { ov = "octave_uint16(" constant ")"; } else if (constant ~ /NC_.*_INT/) { ov = "octave_int32(" constant ")"; } else if (constant ~ /NC_.*_UINT/) { ov = "octave_uint32(" constant ")"; } else if (constant ~ /NC_.*_INT64/) { ov = "octave_int64(" constant ")"; } else if (constant ~ /NC_.*_UINT64/) { ov = "octave_uint64(" constant ")"; } else if (constant ~ /NC_.*_CHAR/) { ov = "(char)" constant; } else if (constant ~ /NC_.*_STRING/) { ov = "std::string(" constant ")"; } else if (constant ~ /NC_.*_FLOAT/) { ov = "(float)" constant; } else if (constant ~ /NC_.*_STRING/) { ov = "(double)" constant; } printf " netcdf_constants[\"%s\"] = octave_value(%s);\n",constant,ov; } netcdf-1.0.19/src/undef-ah-octave.h0000644000000000000000000000070615126111435013703 0ustar00/* To be included at the top of config.h (by autoheader). Avoid warnings for redefining AH-generated preprocessor symbols of Octave. */ #ifdef PACKAGE_BUGREPORT #undef PACKAGE_BUGREPORT #endif #ifdef PACKAGE_NAME #undef PACKAGE_NAME #endif #ifdef PACKAGE_STRING #undef PACKAGE_STRING #endif #ifdef PACKAGE_TARNAME #undef PACKAGE_TARNAME #endif #ifdef PACKAGE_URL #undef PACKAGE_URL #endif #ifdef PACKAGE_VERSION #undef PACKAGE_VERSION #endif