qrcode-core (empty) → 0.8.0
raw patch · 34 files changed
+3383/−0 lines, 34 filesdep +basedep +binarydep +bytestringsetup-changed
Dependencies added: base, binary, bytestring, case-insensitive, containers, dlist, primitive, semigroups, text, vector
Files
- ChangeLog.md +5/−0
- LICENSE +44/−0
- README.md +28/−0
- Setup.hs +2/−0
- qrcode-core.cabal +79/−0
- src/Codec/QRCode.hs +94/−0
- src/Codec/QRCode/Base.hs +26/−0
- src/Codec/QRCode/Code/Data.hs +163/−0
- src/Codec/QRCode/Code/Image.hs +198/−0
- src/Codec/QRCode/Code/Intermediate.hs +66/−0
- src/Codec/QRCode/Code/Mask.hs +123/−0
- src/Codec/QRCode/Code/ReedSolomonEncoder.hs +76/−0
- src/Codec/QRCode/Data/ByteStreamBuilder.hs +81/−0
- src/Codec/QRCode/Data/ErrorLevel.hs +15/−0
- src/Codec/QRCode/Data/MQRImage.hs +103/−0
- src/Codec/QRCode/Data/Mask.hs +19/−0
- src/Codec/QRCode/Data/QRCodeOptions.hs +26/−0
- src/Codec/QRCode/Data/QRImage.hs +67/−0
- src/Codec/QRCode/Data/QRIntermediate.hs +29/−0
- src/Codec/QRCode/Data/QRIntermediate/Internal.hs +22/−0
- src/Codec/QRCode/Data/QRSegment.hs +7/−0
- src/Codec/QRCode/Data/QRSegment/Internal.hs +46/−0
- src/Codec/QRCode/Data/Result.hs +80/−0
- src/Codec/QRCode/Data/TextEncoding.hs +24/−0
- src/Codec/QRCode/Data/ToInput.hs +81/−0
- src/Codec/QRCode/Data/Version.hs +30/−0
- src/Codec/QRCode/Intermediate.hs +60/−0
- src/Codec/QRCode/Mode/Alphanumeric.hs +166/−0
- src/Codec/QRCode/Mode/Automatic.hs +26/−0
- src/Codec/QRCode/Mode/Byte.hs +92/−0
- src/Codec/QRCode/Mode/ECI.hs +32/−0
- src/Codec/QRCode/Mode/Kanji.hs +1135/−0
- src/Codec/QRCode/Mode/Mixed.hs +303/−0
- src/Codec/QRCode/Mode/Numeric.hs +35/−0
+ ChangeLog.md view
@@ -0,0 +1,5 @@+# Changelog for qrcode-core++## 0.8.0 -- 2019-01-xx++* Initial release
+ LICENSE view
@@ -0,0 +1,44 @@+Copyright (c) 2019 ALeX Kazik++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+SOFTWARE.++++This work is derived from https://github.com/nayuki/QR-Code-generator++Copyright © 2018 Project Nayuki. (MIT License)+https://www.nayuki.io/page/qr-code-generator-library++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++The Software is provided "as is", without warranty of any kind, express or+implied, including but not limited to the warranties of merchantability,+fitness for a particular purpose and noninfringement. In no event shall the+authors or copyright holders be liable for any claim, damages or other+liability, whether in an action of contract, tort or otherwise, arising from,+out of or in connection with the Software or the use or other dealings in the+Software.
+ README.md view
@@ -0,0 +1,28 @@+# qrcode++QR code library in pure Haskell++## qrcode-core++Basic functionality to create a QRCode.++All modes are supported:+- Numeric (digits only)+- Alphanumeric (digits, letters and some other chars)+- Binary / Text (ISO 8859-1 and UTF-8)+- Kanji++There are function to create those specifically and an auto-detect.++The module `Codec.QRCode` has functions which creates an image out of the input.++The module `Codec.QRCode.Intermediate` has functions to create segments of a+QRCode, join them together and finally create the image.++The core of the resulting image is an `Vector` of `Bool`s, each element+describing a module ("pixel") where `False` is white and `True` is black.++## thanks++Project Nayuki for https://github.com/nayuki/QR-Code-generator,+which is the foundation of this package.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ qrcode-core.cabal view
@@ -0,0 +1,79 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.31.1.+--+-- see: https://github.com/sol/hpack+--+-- hash: 7edb42bfe998d381a298e87a2f5a671fa3ca2b93eac2bd1c149d877c048c59f2++name: qrcode-core+version: 0.8.0+synopsis: QR code library in pure Haskell+description: Please see the README on GitHub at <https://github.com/alexkazik/qrcode/qrcode-core#readme>+category: codec+homepage: https://github.com/alexkazik/qrcode#readme+bug-reports: https://github.com/alexkazik/qrcode/issues+author: ALeX Kazik+maintainer: alex@kazik.de+copyright: 2018 ALeX Kazik+license: MIT+license-file: LICENSE+tested-with: GHC == 7.10.3, GHC == 8.0.1, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3, GHC == 8.4.4, GHC == 8.6.3+build-type: Simple+extra-source-files:+ README.md+ ChangeLog.md++source-repository head+ type: git+ location: https://github.com/alexkazik/qrcode++library+ exposed-modules:+ Codec.QRCode+ Codec.QRCode.Intermediate+ Codec.QRCode.Data.ErrorLevel+ Codec.QRCode.Data.Mask+ Codec.QRCode.Data.QRImage+ Codec.QRCode.Data.QRCodeOptions+ Codec.QRCode.Data.QRIntermediate+ Codec.QRCode.Data.QRSegment+ Codec.QRCode.Data.Result+ Codec.QRCode.Data.TextEncoding+ Codec.QRCode.Data.ToInput+ other-modules:+ Codec.QRCode.Base+ Codec.QRCode.Code.Data+ Codec.QRCode.Code.Image+ Codec.QRCode.Code.Intermediate+ Codec.QRCode.Code.Mask+ Codec.QRCode.Code.ReedSolomonEncoder+ Codec.QRCode.Data.ByteStreamBuilder+ Codec.QRCode.Data.MQRImage+ Codec.QRCode.Data.QRIntermediate.Internal+ Codec.QRCode.Data.QRSegment.Internal+ Codec.QRCode.Data.Version+ Codec.QRCode.Mode.Alphanumeric+ Codec.QRCode.Mode.Automatic+ Codec.QRCode.Mode.Byte+ Codec.QRCode.Mode.ECI+ Codec.QRCode.Mode.Kanji+ Codec.QRCode.Mode.Mixed+ Codec.QRCode.Mode.Numeric+ Paths_qrcode_core+ hs-source-dirs:+ src+ build-depends:+ base >=4.8.2.0 && <5+ , binary >=0.7.5.0 && <0.9+ , bytestring >=0.10.6.0 && <0.11+ , case-insensitive >=1.2.0.5 && <1.3+ , containers >=0.5.6.2 && <0.7+ , dlist >=0.7.1.2 && <0.9+ , primitive >=0.6.1.0 && <0.7+ , text >=1.2.2.0 && <1.3+ , vector >=0.11.0.0 && <0.13+ if impl(ghc < 8)+ build-depends:+ semigroups+ default-language: Haskell2010
+ src/Codec/QRCode.hs view
@@ -0,0 +1,94 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode+ (+ -- * Encoders+ encode+ , encodeAutomatic+ , encodeText+ , encodeBinary+ , encodeKanji+ , encodeAlphanumeric+ , encodeNumeric+ -- * Re-Exports+ , module Codec.QRCode.Data.QRCodeOptions+ , module Codec.QRCode.Data.ErrorLevel+ , module Codec.QRCode.Data.Mask+ , module Codec.QRCode.Data.TextEncoding+ , module Codec.QRCode.Data.ToInput+ , module Codec.QRCode.Data.QRImage+ ) where++import Codec.QRCode.Base++import Codec.QRCode.Code.Intermediate+import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.Mask+import Codec.QRCode.Data.QRCodeOptions+import Codec.QRCode.Data.QRImage+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.TextEncoding+import Codec.QRCode.Data.ToInput+import Codec.QRCode.Mode.Alphanumeric+import Codec.QRCode.Mode.Automatic+import Codec.QRCode.Mode.Byte+import Codec.QRCode.Mode.Kanji+import Codec.QRCode.Mode.Mixed+import Codec.QRCode.Mode.Numeric++-- | Encode a string into an QR code using any mode that seems fit, will encode the input in parts, each as+-- `encodeNumeric`, `encodeAlphanumeric`, `encodeKanji` and `encodeText` based on the contents.+--+-- Please refer to the specific documentations for details.+--+-- Should result in the shortest encoded data.+encode :: ToText a => QRCodeOptions -> TextEncoding -> a -> Maybe QRImage+{-# INLINABLE encode #-}+encode opt te = getResult . (fromIntermediate <$>) . (toIntermediate opt =<<) . mixed te++-- | Encode a whole string into an QR code using the mode with the shortest result.+-- Will pick either `encodeNumeric`, `encodeAlphanumeric`, `encodeKanji` or `encodeText` based on the contents.+--+-- Please refer to the specific documentations for details.+encodeAutomatic :: ToText a => QRCodeOptions -> TextEncoding -> a -> Maybe QRImage+{-# INLINABLE encodeAutomatic #-}+encodeAutomatic opt te = getResult . (fromIntermediate <$>) . (toIntermediate opt =<<) . automatic te++-- | Generate a QR code representing the specified text data encoded as ISO-8859-1 or UTF-8+-- (with or without ECI) in byte mode.+--+-- Please refer to `TextEncoding` on what the difference is.+--+-- In case you want to encode as ISO-8859-1 and already have a [Word8] or similar+-- you can use 'encodeBinary' as it creates the same result.+encodeText :: ToText a => QRCodeOptions -> TextEncoding -> a -> Maybe QRImage+{-# INLINABLE encodeText #-}+encodeText opt te = getResult . (fromIntermediate <$>) . (toIntermediate opt =<<) . text te++-- | Generate a QR code representing the specified binary data in byte mode.+encodeBinary :: ToBinary a => QRCodeOptions -> a -> Maybe QRImage+{-# INLINABLE encodeBinary #-}+encodeBinary opt = getResult . (fromIntermediate <$>) . toIntermediate opt . binary++-- | Generate a QR code representing the specified text data encoded as QR code Kanji.+--+-- Since this encoding does neither contain ASCII nor the half width katakana characters+-- it may be impossible to encode all text in this encoding.+encodeKanji :: ToText a => QRCodeOptions -> a -> Maybe QRImage+{-# INLINABLE encodeKanji #-}+encodeKanji opt = getResult . (fromIntermediate <$>) . (toIntermediate opt =<<) . kanji++-- | Generate a QR code representing the specified text string encoded in alphanumeric mode.+--+-- The alphanumeric encoding contains this characters: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:".+--+-- When the input is case insensitive the chars are converted to uppercase since this alphabet contains only uppercase characters.+-- This can be archived by applying `Data.CaseInsensitive.mk` to the input.+encodeAlphanumeric :: ToText a => QRCodeOptions -> a -> Maybe QRImage+{-# INLINABLE encodeAlphanumeric #-}+encodeAlphanumeric opt = getResult . (fromIntermediate <$>) . (toIntermediate opt =<<) . alphanumeric++-- | Generate a QR code representing the specified string of decimal digits encoded in numeric mode.+encodeNumeric :: ToNumeric a => QRCodeOptions -> a -> Maybe QRImage+{-# INLINABLE encodeNumeric #-}+encodeNumeric opt = getResult . (fromIntermediate <$>) . (toIntermediate opt =<<) . numeric
+ src/Codec/QRCode/Base.hs view
@@ -0,0 +1,26 @@+-- | Export everything needed from base in addition to the Prelude++{-# LANGUAGE CPP #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Base+ ( module X+ ) where++import Control.Applicative as X (Alternative (..))+import Control.Monad as X (forM, guard, unless, void, when)+import Control.Monad.ST as X (runST)+import Data.Bits as X (Bits (..))+import Data.Bool as X (bool)+import Data.Char as X (isDigit, ord, toUpper)+import Data.Foldable as X (foldl', foldlM, forM_)+import Data.List as X (mapAccumL, sortOn, transpose)+import Data.Maybe as X (fromMaybe, isJust)+#if !(MIN_VERSION_base(4,11,0))+import Data.Semigroup as X (Semigroup (..))+#endif+import Data.STRef as X (modifySTRef', newSTRef, readSTRef)+import Data.Tuple as X (swap)+import Data.Word as X (Word16, Word8)+import GHC.Exts as X (IsList (Item, fromListN))+import Prelude as X
+ src/Codec/QRCode/Code/Data.hs view
@@ -0,0 +1,163 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedLists #-}+{-# LANGUAGE RecordWildCards #-}++module Codec.QRCode.Code.Data+ ( qrSize+ , QRInternal+ , calcVersionAndErrorLevel+ , appendEndAndPadding+ , appendErrorCorrection+ ) where++import Codec.QRCode.Base++import qualified Data.Vector.Unboxed as UV++import Codec.QRCode.Code.ReedSolomonEncoder+import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.Mask+import Codec.QRCode.Data.QRCodeOptions+import Codec.QRCode.Data.QRIntermediate.Internal+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.Version++-- | Calculates the size of a QR code (in modules) based on the version.+qrSize :: Version -> Int+{-# INLINE qrSize #-}+qrSize ver = 17 + unVersion ver * 4++-- | The data all encoder pass around+type QRInternal t = (Version, ErrorLevel, t, Maybe Mask)++-- | Determine `Version` and `ErrorLevel` based on the `QRCodeOptions` and the data to encode.+calcVersionAndErrorLevel :: QRCodeOptions -> QRSegment -> Result QRIntermediate+calcVersionAndErrorLevel QRCodeOptions{..} input =+ -- Run though all tree `VersionRange`s and return the first matching.+ -- This ensures that the input stream is only encoded once per `VersionRange` and not for each `Version`.+ firstSuccess checkSizeVR [minBound .. maxBound]+ where+ -- Run though all `Version`s of the `VersionRange` which are permitted by the options and return the first matching.+ checkSizeVR :: VersionRange -> Result QRIntermediate+ checkSizeVR vr = do+ let+ versions = versionsInRangeLimitedBy vr qroMinVersion qroMaxVersion+ guard (not (null versions))+ stream <- unQRSegment input vr+ firstSuccess (checkSize stream) versions+ -- Check if the data fits into a specific `Version`.+ checkSize :: BSB.ByteStreamBuilder -> Version -> Result QRIntermediate+ checkSize bs v = do+ let+ bsl = BSB.length bs+ -- Try all allowed `ErrorLevel`s and chose the one with most error correction which fits the data.+ el <- firstMatch (\e -> bsl <= 8 * numDataCodeWords v e) errorLevels+ pure $+ QRIntermediate v el bsl bs qroMask+ -- Allowed `ErrorLevel`s: Either just one, or the specified and all with "better" error correction if boost is selected.+ errorLevels :: [ErrorLevel]+ errorLevels+ | qroBoostErrorLevel = [H, Q .. qroErrorLevel]+ | otherwise = [qroErrorLevel]+ -- Helper to pick the first successful calculation.+ firstSuccess :: (a -> Result b) -> [a] -> Result b+ firstSuccess fn = foldr ((<|>) . fn) empty+ -- Helper to pick the first matching result.+ firstMatch :: (a -> Bool) -> [a] -> Result a+ firstMatch fn = firstSuccess (\e -> bool empty (pure e) (fn e))++-- | Add the End marker, pad to a full byte (with 0) and pad all further unused bytes (with 0xEC11).+appendEndAndPadding :: QRIntermediate -> QRInternal BSB.ByteStreamBuilder+appendEndAndPadding (QRIntermediate v e bsl bs mmask) =+ let+ -- Capacity of the data part+ capacity = 8 * numDataCodeWords v e+ -- The number of End bits to add (may be less than 4 if there is not enough space)+ endLen = 4 `min` (capacity - bsl)+ -- Pad until a full Byte+ pad0Len = negate (bsl + endLen) `mod` 8+ -- Pad all other unused Bytes+ padEC11Len = capacity - (bsl + endLen + pad0Len)+ in+ (v, e, bs <> BSB.encodeBits (endLen + pad0Len) 0 <> BSB.fromList (take (padEC11Len `div` 8) (cycle [0xec, 0x11])), mmask)++-- | Append the appropriate error correction to the data.+appendErrorCorrection :: QRInternal BSB.ByteStreamBuilder -> QRInternal [Word8]+appendErrorCorrection (v, e, bs, mmask) =+ let+ numBlocks = numErrorCorrectionBlocks v e+ blockEccLen = eccCodeWordsPerBlock v e+ rawCodeWords = numRawDataModules v `div` 8+ numShortBlocks = numBlocks - (rawCodeWords `mod` numBlocks)+ shortBlockLen = rawCodeWords `div` numBlocks+ generatorPolynomial = rsGeneratorPolynomial blockEccLen+ dataBlockLens = [shortBlockLen - blockEccLen + bool 0 1 (x >= numShortBlocks) | x <- [0 .. numBlocks - 1]]+ dataBlocks = snd $ mapAccumL (\da len -> swap (splitAt len da)) (BSB.toList bs) dataBlockLens+ eccBlocks = map (rsEncode generatorPolynomial) dataBlocks+ interleaved = transpose dataBlocks ++ transpose eccBlocks+ in+ (v, e, concat interleaved, mmask)++-- Returns the number of 8-bit data (i.e. not error correction) code words contained in any+-- QR Code of the given version number and error correction level, with remainder bits discarded.+numDataCodeWords :: Version -> ErrorLevel -> Int+{-# INLINABLE numDataCodeWords #-}+numDataCodeWords v e =+ numRawDataModules v `div` 8+ - eccCodeWordsPerBlock v e+ * numErrorCorrectionBlocks v e++-- Returns the number of bits that can be stored in a QR Code of the given version number, after+-- all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.+numRawDataModules :: Version -> Int+numRawDataModules ver =+ let+ size = qrSize ver+ v2+ | unVersion ver < 2 = 0+ | otherwise =+ let+ numAlign = unVersion ver `div` 7 + 2+ in+ - (numAlign - 1) * (numAlign - 1) * 25 -- Subtract alignment patterns not overlapping with timing patterns+ - (numAlign - 2) * 2 * 20 -- Subtract alignment patterns that overlap with timing patterns+ v7+ | unVersion ver < 7 = 0+ | otherwise = - 18 * 2 -- Subtract version information+ in+ size * size -- Number of modules in the whole QR symbol square+ - 64 * 3 -- Subtract the three finders with separators+ - (15 * 2 + 1) -- Subtract the format information and black module+ - (size - 16) * 2 -- Subtract the timing patterns+ + v2+ + v7++eccCodeWordsPerBlock :: Version -> ErrorLevel -> Int+{-# INLINE eccCodeWordsPerBlock #-}+eccCodeWordsPerBlock v e = eccCodeWordsPerBlockData UV.! (fromEnum e * 40 + unVersion v - 1)++eccCodeWordsPerBlockData :: UV.Vector Int+{-# NOINLINE eccCodeWordsPerBlockData #-}+eccCodeWordsPerBlockData =+ [ --1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level+ 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, -- Low+ 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -- Medium+ 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, -- Quartile+ 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 -- High+ ]++numErrorCorrectionBlocks :: Version -> ErrorLevel -> Int+{-# INLINE numErrorCorrectionBlocks #-}+numErrorCorrectionBlocks v e = numErrorCorrectionBlocksData UV.! (fromEnum e * 40 + unVersion v - 1)++numErrorCorrectionBlocksData :: UV.Vector Int+{-# NOINLINE numErrorCorrectionBlocksData #-}+numErrorCorrectionBlocksData =+ [ --1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level+ 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25, -- Low+ 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49, -- Medium+ 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68, -- Quartile+ 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81 -- High+ ]
+ src/Codec/QRCode/Code/Image.hs view
@@ -0,0 +1,198 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE RecordWildCards #-}++module Codec.QRCode.Code.Image+ ( drawFunctionPatterns+ , drawFormatBits+ , drawCodeWords+ ) where++import Codec.QRCode.Base++import Control.Monad.Primitive (PrimMonad, PrimState)+import qualified Data.Vector.Unboxed as UV+import qualified Data.Vector.Unboxed.Mutable as MUV++import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.Mask+import Codec.QRCode.Data.MQRImage+import Codec.QRCode.Data.Version++--+-- Draw (almost) all function patterns into an image+--++-- | Draw all function patterns+drawFunctionPatterns :: PrimMonad m => MQRImage1 (PrimState m) -> m ()+drawFunctionPatterns img@MQRImage1{..} = do+ drawTimingPatterns img -- will be overwritten by finder and alignment patterns+ let+ (alignmentPatternPositions, maxAlignmentPosition) = calculateAlignmentPatternPositions mqrImage1Version+ forM_ [(x,y) | x <- alignmentPatternPositions, y <- alignmentPatternPositions] $ \(x,y) ->+ unless (x == 6 && y == 6 || x == maxAlignmentPosition && y == 6 || x == 6 && y == maxAlignmentPosition) $+ drawAlignmentPattern img x y+ drawFinderPattern img 3 3+ drawFinderPattern img (mqrImage1Size-4) 3+ drawFinderPattern img 3 (mqrImage1Size-4)+ when (unVersion mqrImage1Version >= 7) $+ drawVersion img+ reserveFormatBits img -- will be overwritten later with drawFormatBits+ where+ -- | Calculate all alignment pattern positions+ calculateAlignmentPatternPositions :: Version -> ([Int], Int)+ calculateAlignmentPatternPositions ver+ | unVersion ver == 1 = ([], 0)+ | otherwise =+ let+ numAlign = unVersion ver `div` 7 + 2+ step+ | unVersion ver == 32 = 26+ | otherwise = (unVersion ver * 4 + numAlign * 2 + 1) `div` (2 * numAlign - 2) * 2+ pos p = unVersion ver * 4 + 10 - p * step+ in+ (6 : [ pos p | p <- [0 .. numAlign-2]], pos 0)++-- | Draw both timing patterns (alternate black/white modules)+drawTimingPatterns :: PrimMonad m => MQRImage1 (PrimState m) -> m ()+drawTimingPatterns img@MQRImage1{..} =+ forM_ [0 .. mqrImage1Size-1] $ \i -> do+ setFunctionModule img 6 i (i `mod` 2 == 0)+ setFunctionModule img i 6 (i `mod` 2 == 0)++-- | Draws a 5*5 alignment pattern, with the center module at (x, y)+drawAlignmentPattern :: PrimMonad m => MQRImage1 (PrimState m) -> Int -> Int -> m ()+drawAlignmentPattern img x y =+ forM_ [-2 .. 2] $ \i ->+ forM_ [-2 .. 2] $ \j ->+ setFunctionModule img (x+j) (y+i) ((abs i `max` abs j) /= 1)++-- | Draws a 9*9 finder pattern including the border separator, with the center module at (x, y)+drawFinderPattern :: PrimMonad m => MQRImage1 (PrimState m) -> Int -> Int -> m ()+drawFinderPattern img@MQRImage1{..} x y =+ forM_ [-4 .. 4] $ \i ->+ forM_ [-4 .. 4] $ \j -> do+ let+ dist = abs i `max` abs j+ x' = x + j+ y' = y + i+ when (x' >= 0 && x' < mqrImage1Size && y' >= 0 && y' < mqrImage1Size) $+ setFunctionModule img (x+j) (y+i) (dist /= 2 && dist /= 4)++-- | Draw the version information into the image+drawVersion :: PrimMonad m => MQRImage1 (PrimState m) -> m ()+drawVersion img@MQRImage1{..} = do+ let+ v = unVersion mqrImage1Version+ -- Calculate error correction code and pack bits+ rem' = iterateN 12 v (\r -> (r `shiftL` 1) `xor` ((r `shiftR` 11) * 0x1F25))+ da = (v `shiftL` 12) .|. rem'+ -- Draw two copies+ forM_ [0 .. 17] $ \i -> do+ let+ d = testBit da i+ a = mqrImage1Size - 11 + (i `mod` 3)+ b = i `div` 3+ setFunctionModule img a b d+ setFunctionModule img b a d++-- | Mark all modules which will be used by the format bits as a function pattern+-- (but don't actually write anything into it yet).+reserveFormatBits :: PrimMonad m => MQRImage1 (PrimState m) -> m ()+reserveFormatBits img@MQRImage1{..} = do+ let+ fn x y = MUV.write mqrImage1Fixed (y * mqrImage1Size + x) True++ -- Reserve first copy+ forM_ [0 .. 5] $ \i ->+ fn 8 i+ fn 8 7+ fn 8 8+ fn 7 8+ forM_ [9 .. 14] $ \i ->+ fn (14 - i) 8++ -- Reserve second copy+ forM_ [0 .. 7] $ \i ->+ fn (mqrImage1Size - 1 - i) 8+ forM_ [8 .. 14] $ \i ->+ fn 8 (mqrImage1Size - 15 + i)++ -- Draw fixed set module+ setFunctionModule img 8 (mqrImage1Size - 8) True++--+-- Functions to be used later (once the format / data is determined)+--++-- | Draw the actual format bits into the image+drawFormatBits :: PrimMonad m => MQRImage3 (PrimState m) -> Mask -> m ()+drawFormatBits MQRImage3{..} m = do+ let+ daSource = (errorLevelMask mqrImage3ErrorLevel `shiftL` 3) .|. fromEnum m+ rem' = iterateN 10 daSource (\r -> (r `shiftL` 1) `xor` ((r `shiftR` 9) * 0x537))+ da = ((daSource `shiftL` 10) .|. rem') `xor` 0x5412+ fn x y = MUV.write mqrImage3Data (x + y * mqrImage3Size)++ -- Draw first copy+ forM_ [0 .. 5] $ \i ->+ fn 8 i (testBit da i)+ fn 8 7 (testBit da 6)+ fn 8 8 (testBit da 7)+ fn 7 8 (testBit da 8)+ forM_ [9 .. 14] $ \i ->+ fn (14 - i) 8 (testBit da i)++ -- Draw second copy+ forM_ [0 .. 7] $ \i ->+ fn (mqrImage3Size - 1 - i) 8 (testBit da i)+ forM_ [8 .. 14] $ \i ->+ fn 8 (mqrImage3Size - 15 + i) (testBit da i)++-- | Draw the code words (data and error correction) into the image+drawCodeWords :: PrimMonad m => MQRImage2 (PrimState m) -> [Bool] -> m ()+drawCodeWords MQRImage2{..} d = do+ ffoldlM_ d ([mqrImage2Size-1, mqrImage2Size-3 .. 8] ++ [5, 3, 1]) $ \d' right -> do+ let+ upward = ((right + 1) .&. 2) == 0+ ffoldlM d' (bool [0 .. mqrImage2Size-1] [mqrImage2Size-1, mqrImage2Size-2 .. 0] upward) $ \d'' y ->+ ffoldlM d'' [right, right-1] $ \d''' x -> do+ let+ f = mqrImage2Fixed UV.! (x + y * mqrImage2Size)+ case d''' of+ (isBlack:xs)+ | not f -> do+ when isBlack $+ MUV.write mqrImage2Data (x + y * mqrImage2Size) True -- all unused pixels are already white and do not need to be set+ return xs+ xxs -> return xxs+ return ()+ where+ ffoldlM d' i f = foldlM f d' i+ ffoldlM_ d' i f = void $ foldlM f d' i++--+-- Helper+--++-- | Sets the color of a module and marks it as a function module+setFunctionModule :: PrimMonad m => MQRImage1 (PrimState m) -> Int -> Int -> Bool -> m ()+{-# INLINABLE setFunctionModule #-}+setFunctionModule MQRImage1{..} x y isBlack = do+ MUV.write mqrImage1Data (y * mqrImage1Size + x) isBlack+ MUV.write mqrImage1Fixed (y * mqrImage1Size + x) True++-- | Execute an action n times+iterateN :: Int -> a -> (a -> a) -> a+{-# INLINABLE iterateN #-}+iterateN n0 i0 f = go n0 i0+ where+ go n i+ | n <= 0 = i+ | otherwise = go (n-1) (f i)++-- | The mask value of an ErrorLevel+errorLevelMask :: ErrorLevel -> Int+errorLevelMask L = 1+errorLevelMask M = 0+errorLevelMask Q = 3+errorLevelMask H = 2
+ src/Codec/QRCode/Code/Intermediate.hs view
@@ -0,0 +1,66 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Code.Intermediate+ ( toIntermediate+ , fromIntermediate+ ) where++import Codec.QRCode.Base++import Codec.QRCode.Code.Data+import Codec.QRCode.Code.Image+import Codec.QRCode.Code.Mask+import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.Mask+import qualified Codec.QRCode.Data.MQRImage as MI+import Codec.QRCode.Data.QRCodeOptions+import Codec.QRCode.Data.QRImage+import Codec.QRCode.Data.QRIntermediate.Internal+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result++-- | Convert segments into an intermediate state.+-- This is the first point where it can be guaranteed that there will+-- be an result. The Version and ErrorLevel is already determined at+-- this point.+toIntermediate :: QRCodeOptions -> QRSegment -> Result QRIntermediate+{-# INLINE toIntermediate #-}+toIntermediate = calcVersionAndErrorLevel++-- | Convert the intermediate state into an image.+fromIntermediate :: QRIntermediate -> QRImage+{-# INLINE fromIntermediate #-}+fromIntermediate = generateQRImage . appendErrorCorrection . appendEndAndPadding++-- | "Draw" the image+generateQRImage :: QRInternal [Word8] -> QRImage+generateQRImage (v, e, bs, mmask) = runST $ do+ -- create a new image+ img1 <- MI.new v e+ -- draw all function modules+ drawFunctionPatterns img1+ -- convert the image, now the information wether an module is for data or function can't be changed anymore+ img2 <- MI.unsafeConvert img1+ -- draw the image+ drawCodeWords img2 (BSB.toBitStream bs)+ case mmask of+ Just m -> do+ -- a specific mask was given+ -- clone the current image+ img3 <- MI.clone img2+ -- apply the mask+ applyMask img3 m+ -- return the image+ MI.unsafeFreeze img3+ Nothing -> do+ rs <- forM [Mask0 .. Mask7] $ \m -> do+ -- create a new clone of the image+ img3 <- MI.clone img2+ -- apply the mask+ applyMask img3 m+ -- freeze the image (can't be altered anymore)+ qrimg <- MI.unsafeFreeze img3+ -- return the image along with the penalty score+ return (getPenaltyScore qrimg, qrimg)+ -- pick the image with the lowest penalty score+ return $ snd $ head $ sortOn fst rs
+ src/Codec/QRCode/Code/Mask.hs view
@@ -0,0 +1,123 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Codec.QRCode.Code.Mask+ ( applyMask+ , getPenaltyScore+ ) where++import Codec.QRCode.Base++import Control.Monad.Primitive (PrimMonad, PrimState)+import qualified Data.Vector.Unboxed as UV+import qualified Data.Vector.Unboxed.Mutable as MUV++import Codec.QRCode.Code.Image+import Codec.QRCode.Data.Mask+import Codec.QRCode.Data.MQRImage+import Codec.QRCode.Data.QRImage++-- | Apply the mask to the image, modules marked for functions are excluded.+applyMask :: forall m. PrimMonad m => MQRImage3 (PrimState m) -> Mask -> m ()+applyMask img@MQRImage3{..} m = do+ -- draw format information+ drawFormatBits img m+ -- select correct mask+ case m of+ Mask0 -> go (\x y -> (x + y) `mod` 2 == 0)+ Mask1 -> go (\_ y -> y `mod` 2 == 0)+ Mask2 -> go (\x _ -> x `mod` 3 == 0)+ Mask3 -> go (\x y -> (x + y) `mod` 3 == 0)+ Mask4 -> go (\x y -> (x `div` 3 + y `div` 2) `mod` 2 == 0)+ Mask5 -> go (\x y -> x * y `mod` 2 + x * y `mod` 3 == 0)+ Mask6 -> go (\x y -> (x * y `mod` 2 + x * y `mod` 3) `mod` 2 == 0)+ Mask7 -> go (\x y -> ((x + y) `mod` 2 + x * y `mod` 3) `mod` 2 == 0)+ where+ go :: (Int -> Int -> Bool) -> m ()+ go m' =+ -- iterate over all modules+ forM_ [0 .. (mqrImage3Size * mqrImage3Size) - 1] $ \pos -> do+ let+ (y, x) = pos `divMod` mqrImage3Size+ -- when it's not a function module and the mask tells to invert, do it+ when (not (mqrImage3Fixed UV.! pos) && m' x y) $+ MUV.modify mqrImage3Data not pos++-- | Calculate the penalty score for an image+getPenaltyScore :: QRImage -> Int+getPenaltyScore QRImage{..} = runST $ do+ result <- newSTRef 0+ forM_ [0 .. qrImageSize-1] $ \y -> do+ -- Adjacent modules in row having same color+ ffoldlM_ (False, 0 :: Int) [0 .. qrImageSize-1] $ \(pp, run) x ->+ case p x y of+ np+ | pp /= np ->+ return (np, 1)+ | run < 5 ->+ return (pp, run+1)+ | run == 5 -> do+ modifySTRef' result (+penaltyN1)+ return (pp, run+1)+ | otherwise -> do+ modifySTRef' result (+1)+ return (pp, run+1)+ -- Adjacent modules in column having same color+ ffoldlM_ (False, 0 :: Int) [0 .. qrImageSize-1] $ \(pp, run) x ->+ case p y x of+ np+ | pp /= np ->+ return (np, 1)+ | run < 5 ->+ return (pp, run+1)+ | run == 5 -> do+ modifySTRef' result (+penaltyN1)+ return (pp, run+1)+ | otherwise -> do+ modifySTRef' result (+1)+ return (pp, run+1)++ -- 2*2 blocks of modules having same color+ forM_ [0 .. qrImageSize-2] $ \y ->+ forM_ [0 .. qrImageSize-2] $ \x -> do+ let+ pxy = p x y+ when (pxy == p (x+1) y && pxy == p x (y+1) && pxy == p (x+1) (y+1)) $+ modifySTRef' result (+penaltyN2)++ forM_ [0 .. qrImageSize-1] $ \y -> do+ -- Finder-like pattern in rows+ ffoldlM_ (0 :: Int) [0 .. qrImageSize-1] $ \bits' x -> do+ let+ bits = ((bits' `shiftL` 1) .&. 0x7ff) .|. bool 0 1 (p x y)+ when (x >= 10 && (bits == 0b00001011101 || bits == 0b10111010000)) $+ modifySTRef' result (+penaltyN3)+ return bits+ -- Finder-like pattern in columns+ ffoldlM_ (0 :: Int) [0 .. qrImageSize-1] $ \bits' x -> do+ let+ bits = ((bits' `shiftL` 1) .&. 0x7ff) .|. bool 0 1 (p y x)+ when (x >= 10 && (bits == 0b00001011101 || bits == 0b10111010000)) $+ modifySTRef' result (+penaltyN3)+ return bits++ -- Balance of black and white modules+ let+ black = UV.foldl' (\c pxy -> c + bool 0 1 pxy) 0 qrImageData+ halfOfTotalMulTwo = qrImageSize * qrImageSize+ differenceToMiddleMulTwo = abs (black*2 - halfOfTotalMulTwo)+ steps = (differenceToMiddleMulTwo * 10) `div` halfOfTotalMulTwo+ modifySTRef' result (+ (steps * penaltyN4))++ readSTRef result+ where+ {-# INLINE ffoldlM_ #-}+ ffoldlM_ a b c = void $ foldlM c a b+ {-# INLINE p #-}+ p x y = qrImageData UV.! (x + y * qrImageSize)+ penaltyN1 = 3+ penaltyN2 = 3+ penaltyN3 = 40+ penaltyN4 = 10
+ src/Codec/QRCode/Code/ReedSolomonEncoder.hs view
@@ -0,0 +1,76 @@+{-# LANGUAGE NoImplicitPrelude #-}++-- | Computes the Reed-Solomon error correction code words for a sequence of data code words at a given degree.++module Codec.QRCode.Code.ReedSolomonEncoder+ ( RsGeneratorPolynomial+ , rsGeneratorPolynomial+ , rsEncode+ ) where++import Codec.QRCode.Base++import qualified Data.Vector.Unboxed as UV+import qualified Data.Vector.Unboxed.Mutable as MUV++newtype RsGeneratorPolynomial+ = RsGeneratorPolynomial (UV.Vector Word8)++-- | Creates a Reed-Solomon ECC generator for the specified degree.+rsGeneratorPolynomial :: Int -> RsGeneratorPolynomial+rsGeneratorPolynomial degree = runST $ do+ coefficients <- MUV.new degree+ -- Start with the monomial x^0+ MUV.set coefficients 0+ MUV.write coefficients (degree-1) 1++ -- Compute the product polynomial (x - r^0) * (x - r^1) * (x - r^2) * ... * (x - r^{degree-1}),+ -- drop the highest term, and store the rest of the coefficients in order of descending powers.+ -- Note that r = 0x02, which is a generator element of this field GF(2^8/0x11D).+ void $ iterateNM degree 1 $ \root -> do+ forM_ [0 .. degree-2] $ \j -> do+ next <- MUV.read coefficients (j+1)+ MUV.modify coefficients (\c -> multiply c root `xor` next) j+ -- calc last (does not have a next)+ MUV.modify coefficients (multiply root) (degree-1)+ return (multiply root 0x02)+ RsGeneratorPolynomial <$> UV.unsafeFreeze coefficients++ where+ iterateNM :: Monad m => Int -> a -> (a -> m a) -> m a+ iterateNM n0 i0 f = go n0 i0+ where+ go n i+ | n <= 0 = return i+ | otherwise = go (n-1) =<< f i++-- | Computes and returns the Reed-Solomon error correction code words for the specified sequence of data codewords.+rsEncode :: RsGeneratorPolynomial -> [Word8] -> [Word8]+rsEncode (RsGeneratorPolynomial coefficients) input = runST $ do+ let+ len = UV.length coefficients+ result <- MUV.new len+ MUV.set result 0+ forM_ input $ \b -> do+ r0 <- MUV.read result 0+ let+ factor = b `xor` r0+ forM_ [1 .. len-1] $ \i -> do+ t <- MUV.read result i+ MUV.write result (i-1) t+ MUV.write result (len-1) 0+ forM_ [0 .. len-1] $ \i ->+ MUV.modify result (\rx -> rx `xor` multiply (coefficients UV.! i) factor) i+ result' <- UV.unsafeFreeze result+ return (UV.toList result')++-- | Returns the product of the two given field elements modulo GF(2^8/0x11D).+multiply :: Word8 -> Word8 -> Word8+{-# INLINABLE multiply #-}+multiply x y =+ let+ step z i =+ (z `shiftL` 1) `xor` ((z `shiftR` 7) * 0x1d)+ `xor` (((y `shiftR` i) .&. 1) * x)+ in+ foldl' step 0 [7, 6 .. 0]
+ src/Codec/QRCode/Data/ByteStreamBuilder.hs view
@@ -0,0 +1,81 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE TupleSections #-}++module Codec.QRCode.Data.ByteStreamBuilder+ ( ByteStreamBuilder+ , encodeBits+ , toList+ , Codec.QRCode.Data.ByteStreamBuilder.length+ , fromList+ , toBitStream+ ) where++import Codec.QRCode.Base++import qualified Data.DList as DL++-- | List of bits. Stored as a pair of Int, how many bits to store and the data, in a DList.+-- The DList gives a O(1) append.+-- The number of bits in a pair is never more than 22.+newtype ByteStreamBuilder+ = ByteStreamBuilder+ { unBitStreamBuilder :: DL.DList (Int, Int)+ }++instance Semigroup ByteStreamBuilder where+ {-# INLINE (<>) #-}+ ByteStreamBuilder a <> ByteStreamBuilder b = ByteStreamBuilder (a `DL.append` b)++instance Monoid ByteStreamBuilder where+ {-# INLINE mempty #-}+ mempty = ByteStreamBuilder mempty+#if !(MIN_VERSION_base(4,11,0))+ {-# INLINE mappend #-}+ mappend = (<>)+#endif++-- | Store bits from Int in an ByteStreamBuilder+encodeBits :: Int -> Int -> ByteStreamBuilder+encodeBits n b+ | n <= 0 = mempty+ | n > 22 = encodeBits (n-16) (b `shiftR` 16) <> encodeBits 16 b+ | otherwise = ByteStreamBuilder (DL.singleton (n, b .&. (bit n - 1)))++-- | Store bits from an list of Bytes in an ByteStreamBuilder+fromList :: [Word8] -> ByteStreamBuilder+{-# INLINEABLE fromList #-}+fromList = ByteStreamBuilder . DL.fromList . map ((8,) . fromIntegral)++length :: ByteStreamBuilder -> Int+{-# INLINEABLE length #-}+length = sum . map fst . DL.toList . unBitStreamBuilder++-- | Convert ByteStreamBuilder to list of Word8+toList :: ByteStreamBuilder -> [Word8]+toList = go 0 0 . DL.toList . unBitStreamBuilder+ where+ go :: Int -> Int -> [(Int, Int)] -> [Word8]+ go n b xs+ | n >= 8 =+ fromIntegral (b `shiftR` (n-8)) : go (n-8) b xs+ go n _ ((n', b'):xs)+ | n == 0 && n' == 8 =+ fromIntegral b' : go 0 0 xs -- short circut if we have currently 0 bits and the next chunk contains 8 bits+ go n b ((n', b'):xs) =+ go (n+n') ((b `shiftL` n') .|. b') xs -- maximum leftover: 7, maximum new bits: 22, result is < 30 bits (what a Int can store at least)+ go _ _ [] = []++-- | Convert list of Word8 to list of Bool+toBitStream :: [Word8] -> [Bool]+toBitStream (x:xs) =+ (x .&. 128 /= 0)+ : (x .&. 64 /= 0)+ : (x .&. 32 /= 0)+ : (x .&. 16 /= 0)+ : (x .&. 8 /= 0)+ : (x .&. 4 /= 0)+ : (x .&. 2 /= 0)+ : (x .&. 1 /= 0)+ : toBitStream xs+toBitStream [] = []
+ src/Codec/QRCode/Data/ErrorLevel.hs view
@@ -0,0 +1,15 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.ErrorLevel+ ( ErrorLevel(..)+ ) where++import Codec.QRCode.Base++-- | The error level of an QRCode+data ErrorLevel+ = L -- ^ Allows error recovery up to 7%+ | M -- ^ Allows error recovery up to 15%+ | Q -- ^ Allows error recovery up to 25%+ | H -- ^ Allows error recovery up to 30%+ deriving (Bounded, Enum, Eq)
+ src/Codec/QRCode/Data/MQRImage.hs view
@@ -0,0 +1,103 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}++module Codec.QRCode.Data.MQRImage+ ( MQRImage1(..)+ , MQRImage2(..)+ , MQRImage3(..)+ , new+ , unsafeConvert+ , clone+ , unsafeFreeze+ ) where++import Codec.QRCode.Base++import Control.Monad.Primitive (PrimMonad, PrimState)+import qualified Data.Vector.Unboxed as UV+import qualified Data.Vector.Unboxed.Mutable as MUV++import Codec.QRCode.Code.Data+import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.QRImage+import Codec.QRCode.Data.Version++data MQRImage1 s+ = MQRImage1+ { mqrImage1Size :: Int+ , mqrImage1Data :: MUV.MVector s Bool+ , mqrImage1Fixed :: MUV.MVector s Bool+ , mqrImage1Version :: Version+ , mqrImage1ErrorLevel :: ErrorLevel+ }++data MQRImage2 s+ = MQRImage2+ { mqrImage2Size :: Int+ , mqrImage2Data :: MUV.MVector s Bool+ , mqrImage2Fixed :: UV.Vector Bool+ , mqrImage2Version :: Version+ , mqrImage2ErrorLevel :: ErrorLevel+ }++data MQRImage3 s+ = MQRImage3+ { mqrImage3Size :: Int+ , mqrImage3Data :: MUV.MVector s Bool+ , mqrImage3Fixed :: UV.Vector Bool+ , mqrImage3Version :: Version+ , mqrImage3ErrorLevel :: ErrorLevel+ }++new :: PrimMonad m => Version -> ErrorLevel -> m (MQRImage1 (PrimState m))+new v e = do+ let+ size = qrSize v+ img <- MUV.new (size * size)+ MUV.set img False+ fix <- MUV.new (size * size)+ MUV.set fix False+ return+ MQRImage1+ { mqrImage1Size = size+ , mqrImage1Data = img+ , mqrImage1Fixed = fix+ , mqrImage1Version = v+ , mqrImage1ErrorLevel = e+ }++unsafeConvert :: PrimMonad m => MQRImage1 (PrimState m) -> m (MQRImage2 (PrimState m))+unsafeConvert MQRImage1{..} = do+ fix <- UV.unsafeFreeze mqrImage1Fixed+ return+ MQRImage2+ { mqrImage2Size = mqrImage1Size+ , mqrImage2Data = mqrImage1Data+ , mqrImage2Fixed = fix+ , mqrImage2Version = mqrImage1Version+ , mqrImage2ErrorLevel = mqrImage1ErrorLevel+ }++clone :: PrimMonad m => MQRImage2 (PrimState m) -> m (MQRImage3 (PrimState m))+clone MQRImage2{..} = do+ img <- MUV.clone mqrImage2Data+ return+ MQRImage3+ { mqrImage3Size = mqrImage2Size+ , mqrImage3Data = img+ , mqrImage3Fixed = mqrImage2Fixed+ , mqrImage3Version = mqrImage2Version+ , mqrImage3ErrorLevel = mqrImage2ErrorLevel+ }++unsafeFreeze :: PrimMonad m => MQRImage3 (PrimState m) -> m QRImage+unsafeFreeze MQRImage3{..} = do+ img <- UV.unsafeFreeze mqrImage3Data+ return+ QRImage+ { qrVersion = unVersion mqrImage3Version+ , qrErrorLevel = mqrImage3ErrorLevel+ , qrImageSize = mqrImage3Size+ , qrImageData = img+ }
+ src/Codec/QRCode/Data/Mask.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.Mask+ ( Mask(..)+ ) where++import Codec.QRCode.Base++-- | The desired mask for the QRCode+data Mask+ = Mask0+ | Mask1+ | Mask2+ | Mask3+ | Mask4+ | Mask5+ | Mask6+ | Mask7+ deriving (Bounded, Enum, Eq)
+ src/Codec/QRCode/Data/QRCodeOptions.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE StrictData #-}++module Codec.QRCode.Data.QRCodeOptions+ ( QRCodeOptions(..)+ , defaultQRCodeOptions+ ) where++import Codec.QRCode.Base++import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.Mask++data QRCodeOptions+ = QRCodeOptions+ { qroMinVersion :: Int -- ^ Minimal version (i.e. size) the qr code may have+ , qroMaxVersion :: Int -- ^ Maximal version (i.e. size) the qr code may have+ , qroErrorLevel :: ErrorLevel -- ^ Selected error correction level+ , qroBoostErrorLevel :: Bool -- ^ Increase error correction level within the same version if possible+ , qroMask :: Maybe Mask -- ^ Specify a mask to be used, only use it if you know what you're doing+ }++-- | The default options are all versions, boost error level and automatic mask, the error level has always to be specified+defaultQRCodeOptions :: ErrorLevel -> QRCodeOptions+defaultQRCodeOptions e =+ QRCodeOptions 1 40 e True Nothing
+ src/Codec/QRCode/Data/QRImage.hs view
@@ -0,0 +1,67 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilies #-}++module Codec.QRCode.Data.QRImage+ ( QRImage(..)+ , toList+ , toMatrix+ ) where++import Codec.QRCode.Base++import qualified Data.Vector.Unboxed as UV++import Codec.QRCode.Data.ErrorLevel++data QRImage+ = QRImage+ { qrVersion :: Int+ , qrErrorLevel :: ErrorLevel+ , qrImageSize :: Int+ , qrImageData :: UV.Vector Bool+ }++-- | Convert the QR code image into a list-type containing all+-- elements from top to bottom and left to right.+-- The values for black/white have to be specified.+toList+ :: (IsList l, Item l ~ a)+ => a -- ^ Value for black modules+ -> a -- ^ Value for white modules+ -> QRImage+ -> l+{-# INLINEABLE toList #-}+toList bl wh QRImage{..} =+ fromListN+ (qrImageSize * qrImageSize)+ (map+ (bool wh bl)+ (UV.toList qrImageData)+ )++-- | Convert the QR code image into a list-type of list-type.+-- The values for black/white have to be specified.+toMatrix+ :: (IsList l, Item l ~ k, IsList k, Item k ~ a)+ => a -- ^ Value for black modules+ -> a -- ^ Value for white modules+ -> QRImage+ -> l+{-# INLINEABLE toMatrix #-}+toMatrix bl wh QRImage{..} =+ fromListN+ qrImageSize+ (map+ go+ [0, qrImageSize - 1]+ )+ where+ go ofs =+ fromListN+ qrImageSize+ (map+ (bool wh bl)+ (UV.toList $ UV.take qrImageSize $ UV.drop (ofs * qrImageSize) qrImageData)+ )
+ src/Codec/QRCode/Data/QRIntermediate.hs view
@@ -0,0 +1,29 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.QRIntermediate+ ( QRIntermediate+ , qrIntermediateVersion+ , qrIntermediateErrorLevel+ , qrIntermediateDataSize+ ) where++import Codec.QRCode.Base++import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.QRIntermediate.Internal+import Codec.QRCode.Data.Version++-- | The version of the intermediate result+qrIntermediateVersion :: QRIntermediate -> Int+{-# INLINE qrIntermediateVersion #-}+qrIntermediateVersion = unVersion . qrIntermediateVersion_++-- | The ErrorLevel of the intermediate result+qrIntermediateErrorLevel :: QRIntermediate -> ErrorLevel+{-# INLINE qrIntermediateErrorLevel #-}+qrIntermediateErrorLevel = qrIntermediateErrorLevel_++-- | The size of the data in bits inside the intermediate result+qrIntermediateDataSize :: QRIntermediate -> Int+{-# INLINE qrIntermediateDataSize #-}+qrIntermediateDataSize = qrIntermediateDataSize_
+ src/Codec/QRCode/Data/QRIntermediate/Internal.hs view
@@ -0,0 +1,22 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE StrictData #-}++module Codec.QRCode.Data.QRIntermediate.Internal+ ( QRIntermediate(..)+ ) where++import Codec.QRCode.Base++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.Mask+import Codec.QRCode.Data.Version++data QRIntermediate+ = QRIntermediate+ { qrIntermediateVersion_ :: Version+ , qrIntermediateErrorLevel_ :: ErrorLevel+ , qrIntermediateDataSize_ :: Int+ , qrIntermediateData_ :: BSB.ByteStreamBuilder+ , qrIntermediateMask_ :: Maybe Mask+ }
+ src/Codec/QRCode/Data/QRSegment.hs view
@@ -0,0 +1,7 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.QRSegment+ ( QRSegment+ ) where++import Codec.QRCode.Data.QRSegment.Internal
+ src/Codec/QRCode/Data/QRSegment/Internal.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.QRSegment.Internal+ ( QRSegment(..)+ , constStream+ , encodeBits+ , lengthSegment+ ) where++import Codec.QRCode.Base++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.Version++-- | An segment of encoded data+newtype QRSegment+ = QRSegment+ { unQRSegment :: VersionRange -> Result BSB.ByteStreamBuilder+ }++instance Semigroup QRSegment where+ {-# INLINE (<>) #-}+ QRSegment a <> QRSegment b = QRSegment $ \v -> (<>) <$> a v <*> b v++constStream :: BSB.ByteStreamBuilder -> QRSegment+{-# INLINABLE constStream #-}+constStream = QRSegment . const . pure++encodeBits :: Int -> Int -> QRSegment+{-# INLINABLE encodeBits #-}+encodeBits len = constStream . BSB.encodeBits len++lengthSegment :: (Int, Int, Int) -> Int -> QRSegment+{-# INLINABLE lengthSegment #-}+lengthSegment (n1_9, n10_26, n27_40) l = QRSegment $ \vr ->+ let+ n =+ case vr of+ Version1to9 -> n1_9+ Version10to26 -> n10_26+ Version27to40 -> n27_40+ in+ if l >= (1 `shiftL` n)+ then empty+ else pure $ BSB.encodeBits n l
+ src/Codec/QRCode/Data/Result.hs view
@@ -0,0 +1,80 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE Trustworthy #-}++#ifndef MIN_VERSION_semigroups+#define MIN_VERSION_semigroups(a,b,c) 0+#endif++module Codec.QRCode.Data.Result+ ( Result(..)+ , result+ ) where++import Control.Applicative+import Control.Monad+import Control.Monad.Fix+import Data.Data+import Data.Semigroup+import GHC.Generics+#if !(MIN_VERSION_base(4,8,0))+import Data.Foldable+import Data.Traversable+#endif+#if (MIN_VERSION_base(4,9,0))+import Control.Monad.Fail+import Control.Monad.Zip+import Data.Functor.Classes+#endif++-- | This Maybe wrapper treats Just as success and Nothing as failure.+-- There is no unexpected success \<-> failure change.+--+-- Differences:+--+-- @+-- instance Semigroup/Monoid Maybe where+-- Nothing <> (Just x) = Just x+-- mempty = Nothing+-- stimes 0 (Just x) = Nothing+--+-- instance Semigroup/Monoid Result where+-- Nothing <> (Just x) = Nothing+-- mempty = Just mempty+-- stimes 0 (Just x) = Just (stimes 0 x)+-- @+newtype Result a+ = Result+ { getResult :: Maybe a+ }+ deriving+ ( Alternative, Applicative, Data, Eq, Foldable, Functor+ , Generic, Generic1, Monad, MonadFix, MonadPlus+ , Ord, Read, Show, Traversable, Typeable+#if (MIN_VERSION_base(4,9,0))+ , Eq1, MonadFail, MonadZip, Ord1, Read1, Show1+#endif+ )++instance Semigroup a => Semigroup (Result a) where+ (Result (Just a)) <> (Result (Just b)) = Result (Just (a <> b))+ _ <> _ = Result Nothing+#if (MIN_VERSION_semigroups(0,17,0)) || (MIN_VERSION_base(4,9,0))+ stimes n (Result (Just a)) = Result (Just (stimes n a))+ stimes _ _ = Result Nothing+#endif++instance Monoid a => Monoid (Result a) where+ {-# INLINABLE mempty #-}+ mempty = Result (Just mempty)+#if !(MIN_VERSION_base(4,11,0))+ (Result (Just a)) `mappend` (Result (Just b)) = Result (Just (a `mappend` b))+ _ `mappend` _ = Result Nothing+#endif++result :: b -> (a -> b) -> Result a -> b+{-# INLINE result #-}+result n j (Result m) = maybe n j m
+ src/Codec/QRCode/Data/TextEncoding.hs view
@@ -0,0 +1,24 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.TextEncoding+ ( TextEncoding(..)+ ) where++data TextEncoding+ = Iso8859_1+ -- ^ Generate segment out of a ISO-8859-1 text, if the text contains chars+ -- which aren't in the charset the result will be a failure.+ | Utf8WithoutECI+ -- ^ Use an UTF-8 encoded text.+ -- The reader must do a detection and conversion.+ --+ -- __Please check the readers which should be used if they support this.__+ | Utf8WithECI+ -- ^ This is the correct way to encode UTF-8, but it's reported that not all+ -- readers support this.+ --+ -- __Please check the readers which should be used if they support this.__+ | Iso8859_1OrUtf8WithoutECI+ -- ^ Try to encode as `Iso8859_1`, if that is not possible use `Utf8WithoutECI`.+ | Iso8859_1OrUtf8WithECI+ -- ^ Try to encode as `Iso8859_1`, if that is not possible use `Utf8WithECI`.
+ src/Codec/QRCode/Data/ToInput.hs view
@@ -0,0 +1,81 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.ToInput+ ( ToText(..)+ , ToNumeric(..)+ , ToBinary(..)+ ) where++import Codec.QRCode.Base+import Data.CaseInsensitive (CI, original)++import qualified Data.ByteString as BS+import qualified Data.ByteString.Lazy as BL+import qualified Data.Text as T+import qualified Data.Text.Lazy as TL+import qualified Data.Vector as V+import qualified Data.Vector.Storable as SV+import qualified Data.Vector.Unboxed as UV+++-- | Conversion into a String and the information if the text is case insensitive (relevant for alphanumeric encoding)+class ToText a where+ toString :: a -> [Char]+ isCI :: a -> Bool++instance ToText [Char] where+ toString = id+ isCI _ = False++instance ToText TL.Text where+ toString = TL.unpack+ isCI _ = False++instance ToText T.Text where+ toString = T.unpack+ isCI _ = False++instance ToText a => ToText (CI a) where+ toString = toString . original+ isCI _ = True+++-- | Conversion into an array of digits (each has to be 0-9)+class ToNumeric a where+ toNumeric :: a -> [Int]++instance ToNumeric [Int] where+ toNumeric = id++instance ToNumeric [Char] where+ toNumeric = map (subtract 48 . ord)++instance ToNumeric T.Text where+ toNumeric = toNumeric . T.unpack++instance ToNumeric TL.Text where+ toNumeric = toNumeric . TL.unpack+++-- | Conversion into binary data+class ToBinary a where+ toBinary :: a -> [Word8]++instance ToBinary [Word8] where+ toBinary = id++instance ToBinary BS.ByteString where+ toBinary = BS.unpack++instance ToBinary BL.ByteString where+ toBinary = BL.unpack++instance ToBinary (V.Vector Word8) where+ toBinary = V.toList++instance ToBinary (UV.Vector Word8) where+ toBinary = UV.toList++instance ToBinary (SV.Vector Word8) where+ toBinary = SV.toList
+ src/Codec/QRCode/Data/Version.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Data.Version+ ( Version+ , unVersion+ , VersionRange(..)+ , versionsInRangeLimitedBy+ ) where++import Codec.QRCode.Base++newtype Version+ = Version+ { unVersion_ :: Int+ }++unVersion :: Version -> Int+{-# INLINE unVersion #-}+unVersion = unVersion_++data VersionRange+ = Version1to9+ | Version10to26+ | Version27to40+ deriving (Bounded, Enum, Eq)++versionsInRangeLimitedBy :: VersionRange -> Int -> Int -> [Version]+versionsInRangeLimitedBy Version1to9 start end = map Version [start `max` 1 .. end `min` 9]+versionsInRangeLimitedBy Version10to26 start end = map Version [start `max` 10 .. end `min` 26]+versionsInRangeLimitedBy Version27to40 start end = map Version [start `max` 27 .. end `min` 40]
+ src/Codec/QRCode/Intermediate.hs view
@@ -0,0 +1,60 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Intermediate+ (+ -- * Generators+ -- | The results of the different generators can be appended using `<>`.+ mixed+ , automatic+ , text+ , binary+ , kanji+ , alphanumeric+ , numeric+ , eci+ -- * Intermediate+ , intermediate+ -- * Encoder+ , encode+ -- * Re-Exports+ , module Codec.QRCode.Data.ErrorLevel+ , module Codec.QRCode.Data.Mask+ , module Codec.QRCode.Data.QRImage+ , module Codec.QRCode.Data.QRCodeOptions+ , module Codec.QRCode.Data.QRIntermediate+ , module Codec.QRCode.Data.QRSegment+ , module Codec.QRCode.Data.Result+ , module Codec.QRCode.Data.TextEncoding+ , module Codec.QRCode.Data.ToInput+ ) where++import Codec.QRCode.Code.Intermediate+import Codec.QRCode.Data.ErrorLevel+import Codec.QRCode.Data.Mask+import Codec.QRCode.Data.QRCodeOptions+import Codec.QRCode.Data.QRImage+import Codec.QRCode.Data.QRIntermediate+import Codec.QRCode.Data.QRSegment+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.TextEncoding+import Codec.QRCode.Data.ToInput+import Codec.QRCode.Mode.Alphanumeric+import Codec.QRCode.Mode.Automatic+import Codec.QRCode.Mode.Byte+import Codec.QRCode.Mode.ECI+import Codec.QRCode.Mode.Kanji+import Codec.QRCode.Mode.Mixed+import Codec.QRCode.Mode.Numeric++-- | Convert segments into an intermediate state.+-- This is the first point where it can be guaranteed that there will+-- be an result. The Version and ErrorLevel is already determined at+-- this point.+intermediate :: QRCodeOptions -> QRSegment -> Result QRIntermediate+{-# INLINE intermediate #-}+intermediate = toIntermediate++-- | Convert the intermediate state into an image.+encode :: QRIntermediate -> QRImage+{-# INLINE encode #-}+encode = fromIntermediate
+ src/Codec/QRCode/Mode/Alphanumeric.hs view
@@ -0,0 +1,166 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedLists #-}++module Codec.QRCode.Mode.Alphanumeric+ ( alphanumeric+ , alphanumericB+ , alphanumericMap+ ) where++import Codec.QRCode.Base++import qualified Data.Map.Strict as M++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.ToInput++-- | Generate a segment representing the specified text string encoded in alphanumeric mode.+--+-- The alphanumeric encoding contains this characters: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:".+--+-- When the input is case insensitive the chars are converted to uppercase since this alphabet contains only uppercase characters.+-- This can be archived by applying `Data.CaseInsensitive.mk` to the input.+alphanumeric :: ToText a => a -> Result QRSegment+alphanumeric s =+ ((encodeBits 4 0b0010 <> lengthSegment (9, 11, 13) (length s')) <>) . constStream+ <$> alphanumericB (isCI s) s'+ where+ s' :: [Char]+ s' = toString s++alphanumericB :: Bool -> [Char] -> Result BSB.ByteStreamBuilder+alphanumericB ci s = go <$> traverse (Result . (`M.lookup` alphanumericMap ci)) s+ where+ go :: [Int] -> BSB.ByteStreamBuilder+ go (a:b:cs) = BSB.encodeBits 11 (a * 45 + b) <> go cs+ go [a] = BSB.encodeBits 6 a+ go [] = mempty+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ < 800+ go _ = error "This is just to get rid of the Warning."+#endif++alphanumericMap :: Bool -> M.Map Char Int+alphanumericMap False =+ [ ('0', 0)+ , ('1', 1)+ , ('2', 2)+ , ('3', 3)+ , ('4', 4)+ , ('5', 5)+ , ('6', 6)+ , ('7', 7)+ , ('8', 8)+ , ('9', 9)+ , ('A', 10)+ , ('B', 11)+ , ('C', 12)+ , ('D', 13)+ , ('E', 14)+ , ('F', 15)+ , ('G', 16)+ , ('H', 17)+ , ('I', 18)+ , ('J', 19)+ , ('K', 20)+ , ('L', 21)+ , ('M', 22)+ , ('N', 23)+ , ('O', 24)+ , ('P', 25)+ , ('Q', 26)+ , ('R', 27)+ , ('S', 28)+ , ('T', 29)+ , ('U', 30)+ , ('V', 31)+ , ('W', 32)+ , ('X', 33)+ , ('Y', 34)+ , ('Z', 35)+ , (' ', 36)+ , ('$', 37)+ , ('%', 38)+ , ('*', 39)+ , ('+', 40)+ , ('-', 41)+ , ('.', 42)+ , ('/', 43)+ , (':', 44)+ ]+alphanumericMap True =+ [ ('0', 0)+ , ('1', 1)+ , ('2', 2)+ , ('3', 3)+ , ('4', 4)+ , ('5', 5)+ , ('6', 6)+ , ('7', 7)+ , ('8', 8)+ , ('9', 9)+ , ('A', 10)+ , ('a', 10)+ , ('B', 11)+ , ('b', 11)+ , ('C', 12)+ , ('c', 12)+ , ('D', 13)+ , ('d', 13)+ , ('E', 14)+ , ('e', 14)+ , ('F', 15)+ , ('f', 15)+ , ('G', 16)+ , ('g', 16)+ , ('H', 17)+ , ('h', 17)+ , ('I', 18)+ , ('i', 18)+ , ('J', 19)+ , ('j', 19)+ , ('K', 20)+ , ('k', 20)+ , ('L', 21)+ , ('l', 21)+ , ('M', 22)+ , ('m', 22)+ , ('N', 23)+ , ('n', 23)+ , ('O', 24)+ , ('o', 24)+ , ('P', 25)+ , ('p', 25)+ , ('Q', 26)+ , ('q', 26)+ , ('R', 27)+ , ('r', 27)+ , ('S', 28)+ , ('s', 28)+ , ('T', 29)+ , ('t', 29)+ , ('U', 30)+ , ('u', 30)+ , ('V', 31)+ , ('v', 31)+ , ('W', 32)+ , ('w', 32)+ , ('X', 33)+ , ('x', 33)+ , ('Y', 34)+ , ('y', 34)+ , ('Z', 35)+ , ('z', 35)+ , (' ', 36)+ , ('$', 37)+ , ('%', 38)+ , ('*', 39)+ , ('+', 40)+ , ('-', 41)+ , ('.', 42)+ , ('/', 43)+ , (':', 44)+ ]
+ src/Codec/QRCode/Mode/Automatic.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Mode.Automatic+ ( automatic+ ) where++import Codec.QRCode.Base++import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.TextEncoding+import Codec.QRCode.Data.ToInput+import Codec.QRCode.Mode.Alphanumeric+import Codec.QRCode.Mode.Byte+import Codec.QRCode.Mode.Kanji+import Codec.QRCode.Mode.Numeric++-- | Encode a whole string using the mode with the shortest result.+-- Will pick either `numeric`, `alphanumeric`, `kanji` or `text` based on the contents.+--+-- Please refer to the specific documentations for details.+automatic :: ToText a => TextEncoding -> a -> Result QRSegment+automatic te s = numeric s' <|> alphanumeric s' <|> kanji s' <|> text te s+ where+ s' :: [Char]+ s' = toString s
+ src/Codec/QRCode/Mode/Byte.hs view
@@ -0,0 +1,92 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Mode.Byte+ ( binary+ , text+ , encodeUtf8+ ) where++import Codec.QRCode.Base++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.TextEncoding+import Codec.QRCode.Data.ToInput+import Codec.QRCode.Mode.ECI++-- | Generate a segment representing the specified binary data in byte mode.+binary :: ToBinary a => a -> QRSegment+binary s = encodeBits 4 0b0100 <> lengthSegment (8, 16, 16) (length s') <> constStream (BSB.fromList s')+ where+ s' :: [Word8]+ s' = toBinary s++-- | Generate a segment representing the specified text data encoded as ISO-8859-1 or UTF-8+-- (with or without ECI) in byte mode.+--+-- Please refer to `TextEncoding` on what the difference is.+--+-- In case you want to encode as ISO-8859-1 and already have a [Word8] or similar+-- you can use 'binary' as it creates the same result.+text :: ToText a => TextEncoding -> a -> Result QRSegment+text Iso8859_1 s = textIso8859_1 s+text Utf8WithoutECI s = pure (textUtf8WithoutECI s)+text Utf8WithECI s = pure (textUtf8WithECI s)+text Iso8859_1OrUtf8WithoutECI s = textIso8859_1 s <|> pure (textUtf8WithoutECI s)+text Iso8859_1OrUtf8WithECI s = textIso8859_1 s <|> pure (textUtf8WithECI s)++textIso8859_1 :: ToText a => a -> Result QRSegment+textIso8859_1 s = binary <$> traverse go (toString s)+ where+ go :: Char -> Result Word8+ go c =+ let+ c' = ord c+ in+ if c' >= 0 && c' <= 255+ then pure (fromIntegral c')+ else empty++textUtf8WithoutECI :: ToText a => a -> QRSegment+textUtf8WithoutECI s = binary (encodeUtf8 $ toString s)++textUtf8WithECI :: ToText a => a -> QRSegment+textUtf8WithECI s = eciEx 26 <> textUtf8WithoutECI s++encodeUtf8 :: [Char] -> [Word8]+encodeUtf8 = map fromIntegral . go+ where+ go [] = []+ go (c:cs) =+ case ord c of+ oc+ | oc < 0 ->+ 0xef+ : 0xbf+ : 0xbd+ : go cs+ | oc < 0x80 ->+ oc+ : go cs+ | oc < 0x800 ->+ 0xc0 + (oc `shiftR` 6)+ : 0x80 + oc .&. 0x3f+ : go cs+ | oc < 0x10000 ->+ 0xe0 + (oc `shiftR` 12)+ : 0x80 + ((oc `shiftR` 6) .&. 0x3f)+ : 0x80 + oc .&. 0x3f+ : go cs+ | oc < 0x110000 ->+ 0xf0 + (oc `shiftR` 18)+ : 0x80 + ((oc `shiftR` 12) .&. 0x3f)+ : 0x80 + ((oc `shiftR` 6) .&. 0x3f)+ : 0x80 + oc .&. 0x3f+ : go cs+ | otherwise ->+ 0xef+ : 0xbf+ : 0xbd+ : go cs
+ src/Codec/QRCode/Mode/ECI.hs view
@@ -0,0 +1,32 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Mode.ECI+ ( eciEx+ , eci+ ) where++import Codec.QRCode.Base++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result++eciEx :: Int -> QRSegment+eciEx = constStream . eciExB++-- | Generate a segment representing an Extended Channel Interpretation+-- (ECI) designator with the specified assignment value.+eci :: Int -> Result QRSegment+eci = fmap constStream . eciB++eciExB :: Int -> BSB.ByteStreamBuilder+eciExB = fromMaybe (error "Invalid ECI Code") . getResult . eciB++eciB :: Int -> Result BSB.ByteStreamBuilder+eciB n+ | n < 0 = empty+ | n < 0x80 = pure $ BSB.encodeBits 4 0b0111 <> BSB.encodeBits 8 n+ | n < 0x4000 = pure $ BSB.encodeBits 4 0b0111 <> BSB.encodeBits 2 0b10 <> BSB.encodeBits (2*8-2) n+ | n < 1000000 = pure $ BSB.encodeBits 4 0b0111 <> BSB.encodeBits 3 0b110 <> BSB.encodeBits (3*8-3) n+ | otherwise = empty
+ src/Codec/QRCode/Mode/Kanji.hs view
@@ -0,0 +1,1135 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}++module Codec.QRCode.Mode.Kanji+ ( kanji+ , kanjiB+ , kanjiMap+ ) where++import Codec.QRCode.Base++import Data.Binary (decode)+import qualified Data.Map.Strict as M++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.ToInput++-- | Generate a segment representing the specified text data encoded as QR code Kanji.+--+-- Since this encoding does neither contain ASCII nor the half width katakana characters+-- it may be impossible to encode all text in this encoding.+--+-- But it is possible to encode some of it and combine it with others like ISO-8859-1.+kanji :: ToText a => a -> Result QRSegment+kanji s = ((encodeBits 4 0b1000 <> lengthSegment (8, 10, 12) (length s')) <>) . constStream <$> kanjiB s'+ where+ s' :: [Char]+ s' = toString s++kanjiB :: [Char] -> Result BSB.ByteStreamBuilder+kanjiB s = Result $ mconcat <$> traverse (fmap (BSB.encodeBits 13 . fromIntegral) . (`M.lookup` kanjiMap)) s++-- This map is generated, see below on how it was done.+kanjiMap :: M.Map Char Word16+kanjiMap = decode+ "\0\0\0\0\0\0\26ߢ\0Q£\0R§\0X¨\0\14¬\0\138°\0K±\0=´\0\12¶\0·Ã\+ \\151\0>÷\0@Î\145\1ßÎ\146\1àÎ\147\1áÎ\148\1âÎ\149\1ãÎ\150\1äÎ\151\1åÎ\+ \\152\1æÎ\153\1çÎ\154\1èÎ\155\1éÎ\156\1êÎ\157\1ëÎ\158\1ìÎ\159\1íÎ \1îΡ\1\+ \ïΣ\1ðΤ\1ñÎ¥\1òΦ\1óΧ\1ôΨ\1õΩ\1öα\1ÿβ\2\0γ\2\1δ\2\2ε\2\3ζ\2\4Î\+ \·\2\5θ\2\6ι\2\7κ\2\8λ\2\9μ\2\10ν\2\11ξ\2\12ο\2\13Ï\128\2\14Ï\129\+ \\2\15Ï\131\2\16Ï\132\2\17Ï\133\2\18Ï\134\2\19Ï\135\2\20Ï\136\2\21Ï\137\2\+ \\22Ð\129\2FÐ\144\2@Ð\145\2AÐ\146\2BÐ\147\2CÐ\148\2DÐ\149\2EÐ\150\2GÐ\151\+ \\2HÐ\152\2IÐ\153\2JÐ\154\2KÐ\155\2LÐ\156\2MÐ\157\2NÐ\158\2OÐ\159\2PÐ \2Q\+ \С\2RТ\2SУ\2TФ\2UÐ¥\2VЦ\2WЧ\2XШ\2YЩ\2ZЪ\2[Ы\2\92Ь\2]Ð\173\2^Ю\+ \\2_Я\2`а\2pб\2qв\2rг\2sд\2tе\2uж\2wз\2xи\2yй\2zк\2{л\2|м\2\+ \}н\2~о\2\128п\2\129Ñ\128\2\130Ñ\129\2\131Ñ\130\2\132Ñ\131\2\133Ñ\132\+ \\2\134Ñ\133\2\135Ñ\134\2\136Ñ\135\2\137Ñ\136\2\138Ñ\137\2\139Ñ\138\2\140\+ \Ñ\139\2\141Ñ\140\2\142Ñ\141\2\143Ñ\142\2\144Ñ\143\2\145Ñ\145\2vâ\128\144\+ \\0\29â\128\149\0\28â\128\150\0!â\128\152\0%â\128\153\0&â\128\156\0'â\128\+ \\157\0(â\128 \0µâ\128¡\0¶â\128¥\0$â\128¦\0#â\128°\0±â\128²\0Lâ\128³\0Mâ\+ \\128»\0fâ\132\131\0Nâ\132«\0°â\134\144\0iâ\134\145\0jâ\134\146\0hâ\134\+ \\147\0kâ\135\146\0\139â\135\148\0\140â\136\128\0\141â\136\130\0\157â\136\+ \\131\0\142â\136\135\0\158â\136\136\0xâ\136\139\0yâ\136\146\0<â\136\154\0\+ \£â\136\157\0¥â\136\158\0Gâ\136 \0\154â\136§\0\136â\136¨\0\137â\136©\0\+ \\127â\136ª\0~â\136«\0§â\136¬\0¨â\136´\0Hâ\136µ\0¦â\136½\0¤â\137\146\0 â\+ \\137 \0Bâ\137¡\0\159â\137¦\0Eâ\137§\0Fâ\137ª\0¡â\137«\0¢â\138\130\0|â\+ \\138\131\0}â\138\134\0zâ\138\135\0{â\138¥\0\155â\140\146\0\156â\148\128\+ \\2\159â\148\129\2ªâ\148\130\2 â\148\131\2«â\148\140\2¡â\148\143\2¬â\148\+ \\144\2¢â\148\147\2\173â\148\148\2¤â\148\151\2¯â\148\152\2£â\148\155\2®â\+ \\148\156\2¥â\148\157\2ºâ\148 \2µâ\148£\2°â\148¤\2§â\148¥\2¼â\148¨\2·â\+ \\148«\2²â\148¬\2¦â\148¯\2¶â\148°\2»â\148³\2±â\148´\2¨â\148·\2¸â\148¸\2½â\+ \\148»\2³â\148¼\2©â\148¿\2¹â\149\130\2¾â\149\139\2´â\150 \0aâ\150¡\0`â\+ \\150²\0câ\150³\0bâ\150¼\0eâ\150½\0dâ\151\134\0_â\151\135\0^â\151\139\0[â\+ \\151\142\0]â\151\143\0\92â\151¯\0¼â\152\133\0Zâ\152\134\0Yâ\153\128\0Jâ\+ \\153\130\0Iâ\153ª\0´â\153\173\0³â\153¯\0²ã\128\128\0\0ã\128\129\0\1ã\128\+ \\130\0\2ã\128\131\0\22ã\128\133\0\24ã\128\134\0\25ã\128\135\0\26ã\128\+ \\136\01ã\128\137\02ã\128\138\03ã\128\139\04ã\128\140\05ã\128\141\06ã\128\+ \\142\07ã\128\143\08ã\128\144\09ã\128\145\0:ã\128\146\0gã\128\147\0lã\128\+ \\148\0+ã\128\149\0,ã\128\156\0 ã\129\129\1\31ã\129\130\1 ã\129\131\1!ã\+ \\129\132\1\34ã\129\133\1#ã\129\134\1$ã\129\135\1%ã\129\136\1&ã\129\137\1\+ \'ã\129\138\1(ã\129\139\1)ã\129\140\1*ã\129\141\1+ã\129\142\1,ã\129\143\1\+ \-ã\129\144\1.ã\129\145\1/ã\129\146\10ã\129\147\11ã\129\148\12ã\129\149\1\+ \3ã\129\150\14ã\129\151\15ã\129\152\16ã\129\153\17ã\129\154\18ã\129\155\1\+ \9ã\129\156\1:ã\129\157\1;ã\129\158\1<ã\129\159\1=ã\129 \1>ã\129¡\1?ã\129\+ \¢\1@ã\129£\1Aã\129¤\1Bã\129¥\1Cã\129¦\1Dã\129§\1Eã\129¨\1Fã\129©\1Gã\129\+ \ª\1Hã\129«\1Iã\129¬\1Jã\129\173\1Kã\129®\1Lã\129¯\1Mã\129°\1Nã\129±\1Oã\+ \\129²\1Pã\129³\1Qã\129´\1Rã\129µ\1Sã\129¶\1Tã\129·\1Uã\129¸\1Vã\129¹\1Wã\+ \\129º\1Xã\129»\1Yã\129¼\1Zã\129½\1[ã\129¾\1\92ã\129¿\1]ã\130\128\1^ã\130\+ \\129\1_ã\130\130\1`ã\130\131\1aã\130\132\1bã\130\133\1cã\130\134\1dã\130\+ \\135\1eã\130\136\1fã\130\137\1gã\130\138\1hã\130\139\1iã\130\140\1jã\130\+ \\141\1kã\130\142\1lã\130\143\1mã\130\144\1nã\130\145\1oã\130\146\1pã\130\+ \\147\1qã\130\155\0\10ã\130\156\0\11ã\130\157\0\20ã\130\158\0\21ã\130¡\1\+ \\128ã\130¢\1\129ã\130£\1\130ã\130¤\1\131ã\130¥\1\132ã\130¦\1\133ã\130§\1\+ \\134ã\130¨\1\135ã\130©\1\136ã\130ª\1\137ã\130«\1\138ã\130¬\1\139ã\130\+ \\173\1\140ã\130®\1\141ã\130¯\1\142ã\130°\1\143ã\130±\1\144ã\130²\1\145ã\+ \\130³\1\146ã\130´\1\147ã\130µ\1\148ã\130¶\1\149ã\130·\1\150ã\130¸\1\151ã\+ \\130¹\1\152ã\130º\1\153ã\130»\1\154ã\130¼\1\155ã\130½\1\156ã\130¾\1\157ã\+ \\130¿\1\158ã\131\128\1\159ã\131\129\1 ã\131\130\1¡ã\131\131\1¢ã\131\132\+ \\1£ã\131\133\1¤ã\131\134\1¥ã\131\135\1¦ã\131\136\1§ã\131\137\1¨ã\131\138\+ \\1©ã\131\139\1ªã\131\140\1«ã\131\141\1¬ã\131\142\1\173ã\131\143\1®ã\131\+ \\144\1¯ã\131\145\1°ã\131\146\1±ã\131\147\1²ã\131\148\1³ã\131\149\1´ã\131\+ \\150\1µã\131\151\1¶ã\131\152\1·ã\131\153\1¸ã\131\154\1¹ã\131\155\1ºã\131\+ \\156\1»ã\131\157\1¼ã\131\158\1½ã\131\159\1¾ã\131 \1Àã\131¡\1Áã\131¢\1Âã\+ \\131£\1Ãã\131¤\1Äã\131¥\1Åã\131¦\1Æã\131§\1Çã\131¨\1Èã\131©\1Éã\131ª\1Êã\+ \\131«\1Ëã\131¬\1Ìã\131\173\1Íã\131®\1Îã\131¯\1Ïã\131°\1Ðã\131±\1Ñã\131²\+ \\1Òã\131³\1Óã\131´\1Ôã\131µ\1Õã\131¶\1Öã\131»\0\5ã\131¼\0\27ã\131½\0\18ã\+ \\131¾\0\19ä¸\128\5êä¸\129\13\26ä¸\131\105ä¸\135\16\28ä¸\136\11$ä¸\137\9Ï\+ \ä¸\138\11#ä¸\139\6zä¸\141\153ä¸\142\16\158ä¸\144\17 ä¸\145\6\14ä¸\148\7\+ \\14ä¸\149\17¡ä¸\150\11¢ä¸\151\18\128ä¸\152\7µä¸\153\15xä¸\158\11%両\16ü\+ \並\15\128个\17¢ä¸\173\13\6丱\17£ä¸²\88丶\17¤ä¸¸\7[丹\12Ï主\10e丼\+ \\17¥ä¸¿\17¦ä¹\130\17§ä¹\131\14Tä¹\133\7¶ä¹\139\14Vä¹\141\14!ä¹\142\8Áä¹\+ \\143\15Òä¹\149\27(ä¹\150\17¨ä¹\151\11&ä¹\152\17©ä¹\153\6sä¹\157\8#ä¹\158\+ \\8îä¹\159\16gä¹¢\19ää¹±\16Ðä¹³\14;ä¹¾\7#äº\128\7\148äº\130\17ªäº\133\17«\+ \äº\134\16ùäº\136\16\156äº\137\12Häº\138\17\173äº\139\10\22äº\140\141äº\+ \\142\17°äº\145\6\29äº\146\8Ýäº\148\8Üäº\149\5ääº\152\17jäº\153\17iäº\155\+ \\9qäº\156\5\159äº\158\17±äº\159\17²äº \17³äº¡\15Ó亢\17´äº¤\8ð亥\5å亦\+ \\16\18亨\7Ü享\7Ý京\7Þäº\173\13`亮\16ú亰\17µäº³\17¶äº¶\17·äºº\11lä»\+ \\128\10\153ä»\129\11mä»\130\17¼ä»\132\17ºä»\134\17»ä»\135\7·ä»\138\9aä»\+ \\139\6®ä»\141\17¹ä»\142\17¸ä»\143\15gä»\148\9åä»\149\9ää»\150\12|ä»\151\+ \\17½ä»\152\154ä»\153\11åä»\157\0\23ä»\158\17¾ä»\159\17À代\12£ä»¤\17\31ä\+ \»¥\5Èä»\173\17¿ä»®\6|ä»°\8\2仲\13\7ä»¶\8\143ä»·\17Áä»»\14Cä¼\129\7iä¼\+ \\137\17Âä¼\138\5Éä¼\141\8Þä¼\142\7jä¼\143\15Zä¼\144\14°ä¼\145\7¸ä¼\154\6\+ \¯ä¼\156\17åä¼\157\13 伯\14\140ä¼°\17Ää¼´\14ºä¼¶\17 伸\11L伺\9æä¼¼\10\+ \\23ä¼½\6~ä½\131\13Oä½\134\12Áä½\135\17Èä½\141\5Êä½\142\13aä½\143\10\154ä\+ \½\144\9rä½\145\16\131ä½\147\12\140ä½\149\6}ä½\151\17Çä½\153\16\157ä½\154\+ \\17Ãä½\155\17Åä½\156\9¬ä½\157\17Æä½\158\19\131佩\17Î佯\17Ñä½°\17Ïä½³\6\+ \\128ä½µ\15yä½¶\17Éä½»\17Íä½¼\8ñ使\9çä¾\131\7$ä¾\134\17Òä¾\136\17Êä¾\139\+ \\17!ä¾\141\10\24ä¾\143\17Ëä¾\145\17Ðä¾\150\17Óä¾\152\17Ìä¾\155\7ßä¾\157\+ \\5Ëä¾ \7à価\6\127侫\19\132ä¾\173\16\25ä¾®\15N侯\8òä¾µ\11Nä¾¶\16õ便\+ \\15\150ä¿\130\8Wä¿\131\12cä¿\132\6¢ä¿\138\10²ä¿\142\17×ä¿\144\17Üä¿\145\+ \\17Úä¿\148\17Õä¿\151\12mä¿\152\17Øä¿\154\17Ûä¿\155\17Ùä¿\157\15\155ä¿\+ \\159\17Öä¿¡\11Mä¿£\16\19俤\17Ýä¿¥\17Þä¿®\10\131俯\17ë俳\14o俵\15\21ä\+ \¿¶\17æä¿¸\15®ä¿º\6t俾\17êå\128\133\17äå\128\134\17íå\128\137\121å\128\+ \\139\8Âå\128\141\14{å\128\143\23Åå\128\145\17ìå\128\146\13¼å\128\148\17á\+ \å\128\150\8ôå\128\153\8óå\128\154\17ßå\128\159\10Xå\128¡\17çå\128£\15\+ \\173å\128¤\12ìå\128¥\17ãå\128¦\8\145å\128¨\17àå\128©\17èå\128ª\17âå\128«\+ \\17\15å\128¬\17éå\128\173\17`å\128¶\8$å\128¹\8\144å\129\131\17îå\129\135\+ \\17ïå\129\136\17óå\129\137\5Ìå\129\143\15\142å\129\144\17òå\129\149\17ñå\+ \\129\150\17õå\129\154\17ôå\129\156\13bå\129¥\8\146å\129¬\17öå\129²\10Cå\+ \\129´\12då\129µ\13cå\129¶\84å\129¸\17÷å\129½\7\149å\130\128\17øå\130\133\+ \\17úå\130\141\15Ôå\130\145\8\134å\130\152\9Ðå\130\153\14õå\130\154\17ùå\+ \\130¬\9\131å\130\173\16¢å\130²\17üå\130³\18\2å\130´\17ûå\130µ\9\130å\130\+ \·\10Ýå\130¾\8Xå\131\130\18\3å\131\133\8\13å\131\137\18\0å\131\138\18\1å\+ \\131\141\13íå\131\143\12\92å\131\145\7áå\131\149\15ìå\131\150\18\4å\131\+ \\154\16ûå\131\158\18\5å\131£\18\8å\131¥\18\6å\131§\12-å\131\173\18\7å\+ \\131®\18\9å\131µ\18\11å\131¹\18\10å\131»\15\134å\132\128\7\150å\132\129\+ \\18\13å\132\130\18\14å\132\132\6må\132\137\18\12å\132\146\10rå\132\148\+ \\18\17å\132\149\18\16å\132\150\18\15å\132\152\17Ôå\132\154\18\18å\132\+ \\159\10Þå\132¡\18\19å\132ª\16\132å\132²\16Wå\132·\18\21å\132º\18\20å\132\+ \»\18\23å\132¼\18\22å\132¿\18\24å\133\128\18\25å\133\129\5òå\133\131\8³å\+ \\133\132\8Zå\133\133\10\155å\133\134\13\27å\133\135\7âå\133\136\11æå\133\+ \\137\8õå\133\139\9Nå\133\140\18\27å\133\141\16Få\133\142\13¥å\133\144\10\+ \\25å\133\146\18\26å\133\148\18\28å\133\154\13½å\133\156\7\21å\133¢\18\29\+ \å\133¥\14<å\133¨\12\19å\133©\18\31å\133ª\18 å\133«\14ªå\133¬\8öå\133\173\+ \\17Zå\133®\18!å\133±\7äå\133µ\15zå\133¶\12tå\133·\8/å\133¸\13\148å\133¼\+ \\8\147å\134\128\18\34å\134\130\18#å\134\133\14 å\134\134\6>å\134\137\18&\+ \å\134\138\9»å\134\140\18%å\134\141\9\132å\134\143\18'å\134\144\26,å\134\+ \\145\18(å\134\146\15àå\134\147\18)å\134\149\18*å\134\150\18+å\134\151\11\+ \'å\134\153\10Jå\134 \7%å\134¢\18.å\134¤\18,å\134¥\16;å\134¦\18-å\134¨\15\+ \9å\134©\18/å\134ª\180å\134«\181å\134¬\13¾å\134°\185å\134±\183å\134²\184å\+ \\134³\182å\134´\9¡å\134µ\186å\134¶\16hå\134·\17\34å\134½\187å\135\132\11\+ \¦å\135\133\188å\135\134\10¹å\135\137\189å\135\139\13\28å\135\140\16ýå\+ \\135\141\13Àå\135\150\18\131å\135\155\18:å\135\156\31#å\135\157\8\3å\135\+ \ \18;å\135¡\15ýå\135¦\10Èå\135§\12ºå\135©\18=å\135ª\14\34å\135\173\18>å\+ \\135°\18@å\135±\6Íå\135µ\18Aå\135¶\7åå\135¸\14\10å\135¹\6Zå\135º\10¯å\+ \\135½\14\159å\135¾\18Bå\136\128\13Áå\136\131\11nå\136\132\18Cå\136\134\+ \\15jå\136\135\11Øå\136\136\7 å\136\138\7'å\136\139\18Då\136\142\18Få\136\+ \\145\8Yå\136\148\18Eå\136\151\171å\136\157\10Éå\136¤\14»å\136¥\15\138å\+ \\136§\18Gå\136©\16Øå\136ª\18Hå\136®\18Iå\136°\13Þå\136³\18Jå\136¶\11§å\+ \\136·\9¼å\136¸\8\148å\136¹\18Kå\136º\9èå\136»\9Oå\137\131\13då\137\132\+ \\18Må\137\135\12eå\137\138\9\173å\137\139\18Nå\137\140\18Oå\137\141\12\+ \\15å\137\143\18Lå\137\148\18Qå\137\150\15Õå\137\155\9Då\137\158\18På\137\+ \£\8\149å\137¤\9\156å\137¥\14\141å\137©\18Tå\137ª\18Rå\137¯\15[å\137°\11(\+ \å\137±\18[å\137²\7\4å\137³\18Uå\137´\18Så\137µ\12.å\137½\18Wå\137¿\18Vå\+ \\138\131\6ãå\138\135\8\128å\138\136\18\92å\138\137\16ëå\138\141\18Xå\138\+ \\145\18]å\138\146\18Zå\138\148\18Yå\138\155\17\13å\138\159\8÷å\138 \6\+ \\129å\138£\172å\138©\10Õå\138ª\13·å\138«\9Eå\138¬\18`å\138\173\18aå\138±\+ \\17#å\138´\17Jå\138µ\18cå\138¹\8øå\138¼\18bå\138¾\6Îå\139\129\18då\139\+ \\131\15õå\139\133\13:å\139\135\16\133å\139\137\15\151å\139\141\18eå\139\+ \\146\29Óå\139\149\13îå\139\151\18få\139\152\7(å\139\153\161å\139\157\10ß\+ \å\139\158\18gå\139\159\15¥å\139 \18kå\139¢\11¨å\139£\18hå\139¤\8\14å\139\+ \¦\18iå\139§\7)å\139²\8Må\139³\18lå\139µ\18må\139¸\18nå\139¹\18oå\139º\10\+ \Yå\139¾\8ùå\139¿\16\92å\140\129\16få\140\130\145å\140\133\15¯å\140\134\+ \\18på\140\136\18qå\140\141\18så\140\143\18uå\140\144\18tå\140\149\18vå\+ \\140\150\6{å\140\151\15ëå\140\153\9ºå\140\154\18wå\140\157\128å\140 \10à\+ \å\140¡\7çå\140£\18xå\140ª\14Ùå\140¯\18yå\140±\18zå\140³\18{å\140¸\18|å\+ \\140¹\15\3å\140º\8&å\140»\5ãå\140¿\13ýå\141\128\18}å\141\129\10\156å\141\+ \\131\11çå\141\133\18\127å\141\134\18~å\141\135\10áå\141\136\8ßå\141\137\+ \\18\129å\141\138\14¼å\141\141\18\130å\141\145\14Úå\141\146\12rå\141\147\+ \\12¬å\141\148\7æå\141\151\14,å\141\152\12Ðå\141\154\14\142å\141\156\15íå\+ \\141\158\18\132å\141 \11èå\141¦\8Tå\141©\18\133å\141®\18\134å\141¯\6\11å\+ \\141°\5óå\141±\7kå\141³\12få\141´\7°å\141µ\16Ñå\141·\18\137å\141¸\6uå\+ \\141»\18\136å\141¿\7èå\142\130\18\138å\142\132\16oå\142\150\18\139å\142\+ \\152\17\16å\142\154\8úå\142\159\8´å\142 \18\140å\142¥\18\142å\142¦\18\+ \\141å\142¨\11~å\142©\6\24å\142\173\6=å\142®\18\143å\142°\18\144å\142³\8µ\+ \å\142¶\18\145å\142»\7Îå\143\130\9Ñå\143\131\18\146å\143\136\16\20å\143\+ \\137\9så\143\138\7¹å\143\139\16\134å\143\140\12/å\143\141\14½å\143\142\+ \\10{å\143\148\10¦å\143\150\10få\143\151\10så\143\153\10Öå\143\155\14¾å\+ \\143\159\18\149å\143¡\6\34å\143¢\120å\143£\8ûå\143¤\8Ãå\143¥\8%å\143¨\18\+ \\153å\143©\12Àå\143ª\12¼å\143«\7éå\143¬\10âå\143\173\18\154å\143®\18\152\+ \å\143¯\6\130å\143°\12¤å\143±\106å\143²\9êå\143³\6\5å\143¶\7\16å\143·\9Få\+ \\143¸\9éå\143º\18\155å\144\129\18\156å\144\131\7¨å\144\132\6åå\144\136\9\+ \Gå\144\137\7§å\144\138\13]å\144\139\6\4å\144\140\13ïå\144\141\16<å\144\+ \\142\9\0å\144\143\16Ùå\144\144\13¦å\144\145\8üå\144\155\8Nå\144\157\18¥å\+ \\144\159\8!å\144 \15éå\144¦\14Ûå\144©\18¤å\144«\7\92å\144¬\18\159å\144\+ \\173\18 å\144®\18¢å\144¶\18£å\144¸\7ºå\144¹\11\129å\144»\15kå\144¼\18¡å\+ \\144½\18\157å\144¾\8áå\145\128\18\158å\145\130\17Cå\145\134\15°å\145\136\+ \\13få\145\137\8àå\145\138\9På\145\142\18¦å\145\145\14\27å\145\159\18ªå\+ \\145¨\10|å\145ª\10tå\145°\18\173å\145±\18«å\145³\16!å\145µ\18¨å\145¶\18±\+ \å\145·\18¬å\145»\18¯å\145¼\8Äå\145½\16=å\146\128\18°å\146\132\18²å\146\+ \\134\18´å\146\139\9®å\146\140\17aå\146\142\18©å\146\143\18§å\146\144\18³\+ \å\146\146\18®å\146¢\18¶å\146¤\18Âå\146¥\18¸å\146¨\18¼å\146«\18Àå\146¬\18\+ \¹å\146¯\18Ýå\146²\9§å\146³\6Ðå\146¸\18·å\146¼\18Äå\146½\5ôå\146¾\18Ãå\+ \\147\128\5£å\147\129\15)å\147\130\18Áå\147\132\18ºå\147\135\18µå\147\136\+ \\18»å\147\137\9\134å\147\152\18Åå\147¡\5õå\147¢\18Îå\147¥\18Æå\147¦\18Çå\+ \\147¨\10ãå\147©\16\9å\147\173\18Ìå\147®\18Ëå\147²\13\142å\147º\18Íå\147½\+ \\18Êå\148\132\6\19å\148\134\9tå\148\135\11Oå\148\143\18Èå\148\144\13Âå\+ \\148\148\18Éå\148\150\5 å\148®\18Óå\148¯\16\130å\148±\10åå\148³\18Ùå\148\+ \¸\18Øå\148¹\18Ïå\148¾\12\129å\149\128\18Ðå\149\132\12\173å\149\133\18Õå\+ \\149\134\10äå\149\140\18Òå\149\143\16bå\149\147\8[å\149\150\18Öå\149\151\+ \\18×å\149\156\18Ôå\149\157\18Úå\149£\18Ñå\149»\18àå\149¼\18åå\149¾\18áå\+ \\150\128\18Üå\150\131\18æå\150\132\12\16å\150\135\18èå\150\137\9\1å\150\+ \\138\18Þå\150\139\13\29å\150\152\18âå\150\153\18Ûå\150\154\7+å\150\156\7\+ \lå\150\157\7\5å\150\158\18ãå\150\159\18ßå\150§\8\150å\150¨\18éå\150©\18ç\+ \å\150ª\122å\150«\7©å\150¬\7êå\150®\18äå\150°\82å\150¶\6#å\151\132\18íå\+ \\151\133\18ëå\151\135\19%å\151\148\18ðå\151\154\18êå\151\156\18îå\151\+ \\159\18ìå\151£\9ëå\151¤\18ïå\151·\18òå\151¹\18÷å\151½\18õå\151¾\18ôå\152\+ \\134\12Ñå\152\137\6\131å\152\148\18ñå\152\150\18óå\152\151\10æå\152\152\+ \\6\18å\152\155\18öå\152©\6\156å\152¯\19\2å\152±\11:å\152²\18ýå\152´\18ûå\+ \\152¶\18üå\152¸\18þå\153\130\6\28å\153\140\12\24å\153\142\18øå\153\144\+ \\18ùå\153\155\7\26å\153¤\19\1å\153¨\7må\153ª\19\4å\153«\19\0å\153¬\19\3å\+ \\153´\15lå\153¸\14\19å\153º\14¶å\154\128\19\6å\154\134\19\5å\154\135\6äå\+ \\154\138\19\7å\154\143\19\10å\154\148\19\9å\154 \19\8å\154¢\14Xå\154¥\19\+ \\11å\154®\19\12å\154´\19\14å\154¶\19\13å\154¼\19\16å\155\128\19\19å\155\+ \\129\19\17å\155\130\19\15å\155\131\19\18å\155\136\19\20å\155\142\19\21å\+ \\155\145\19\22å\155\147\19\23å\155\151\19\24å\155\152\18$å\155\154\10zå\+ \\155\155\9ìå\155\158\6±å\155 \5öå\155£\12ãå\155®\19\25å\155°\9bå\155²\5Í\+ \å\155³\11}å\155¹\19\26å\155º\8Åå\155½\9Qå\155¿\19\28å\156\128\19\27å\156\+ \\131\15\158å\156\132\19\29å\156\136\19\31å\156\137\19\30å\156\139\19 å\+ \\156\141\19!å\156\143\8\151å\156\146\6@å\156\147\19\34å\156\150\19$å\156\+ \\152\19#å\156\156\19&å\156\159\13¹å\156¦\19'å\156§\5³å\156¨\9\157å\156\+ \\173\8\92å\156°\12îå\156·\19(å\156¸\19)å\156»\19+å\157\128\19,å\157\130\+ \\9¢å\157\135\8\15å\157\138\15Öå\157\142\19*å\157\143\19-å\157\144\9\127å\+ \\157\145\9\2å\157¡\191å\157¤\9cå\157¦\12Òå\157©\19.å\157ª\13Xå\157¿\192å\+ \\158\130\11\130å\158\136\190å\158\137\193å\158\139\8^å\158\147\194å\158 \+ \\195å\158¢\9\3å\158£\6ßå\158¤\197å\158ª\198å\158°\199å\158³\196å\159\128\+ \\19/å\159\131\19:å\159\134\19;å\159\139\16\4å\159\142\11)å\159\146\19=å\+ \\159\147\19>å\159\148\19<å\159\150\19@å\159\156\14Wå\159\159\5æå\159 \15\+ \5å\159£\19Aå\159´\11;å\159·\107å\159¹\14|å\159º\7nå\159¼\9©å \128\15øå \+ \\130\13ðå \133\8\152å \134\12\141å \138\19?å \139\19Bå \149\12\130å \153\+ \\19Cå \157\19Då ¡\19Få ¤\13gå ª\7,å ¯\31\31å °\6Aå ±\15±å ´\11*å µ\13§å \+ \º\9¤å ½\19Lå¡\128\15{å¡\129\17\27å¡\138\6²å¡\139\19Hå¡\145\12\25å¡\146\+ \\19Kå¡\148\13Ãå¡\151\13¨å¡\152\13Äå¡\153\14·å¡\154\13Kå¡\158\9\135å¡¢\19\+ \Gå¡©\6Vå¡«\13\149å¡°\19I塲\19E塵\11o塹\19M塾\10\173å¢\131\7ëå¢\133\+ \\19Nå¢\147\15¦å¢\151\12]å¢\156\13Då¢\159\19P墨\15î墫\19Q墮\19V墳\15m\+ \墸\19U墹\19O墺\19R墻\19T墾\9då£\129\15\135å£\133\19Wå£\135\12äå£\+ \\138\6³å£\140\11+å£\145\19Yå£\147\19Xå£\149\9Hå£\151\19Zå£\152\19\92å£\+ \\153\19[å£\156\19^å£\158\19Så£\159\19`壤\19_壥\19]士\9í壬\11p壮\123\+ \壯\19a声\11ºå£±\5ë売\14\132壷\13Y壹\19c壺\19b壻\19d壼\19e壽\19f\+ \å¤\130\19gå¤\137\15\143å¤\138\19hå¤\143\6\132å¤\144\19iå¤\149\16\155å¤\+ \\150\6Ïå¤\152\18\135å¤\153\10§å¤\154\12}å¤\155\19jå¤\156\16i夢\162夥\+ \\19l大\12¥å¤©\13\150太\12~夫\156夬\19må¤\173\19n央\6[失\108夲\19o\+ \夷\5Î夸\19p夾\19qå¥\132\6Bå¥\135\7oå¥\136\14\30å¥\137\15²å¥\142\19uå¥\+ \\143\124å¥\144\19tå¥\145\8_å¥\148\15úå¥\149\19så¥\151\13Åå¥\152\19wå¥\+ \\154\19vå¥ \19y奢\19x奥\6\92奧\19z奨\10ç奩\19|奪\12Ä奬\19{奮\15q\+ \女\10×奴\13ºå¥¸\19\128好\9\4å¦\129\19\129å¦\130\14@å¦\131\14Üå¦\132\+ \\16Oå¦\138\14Då¦\141\19\138å¦\147\7\151å¦\150\16¤å¦\153\16-å¦\155\19êå¦\+ \\157\19\130妣\19\133妥\12\131妨\15×妬\13©å¦²\19\134妹\16\5妻\9\136\+ \妾\10èå§\134\19\135å§\137\9ïå§\139\9îå§\144\5·å§\145\8Æå§\147\11©å§\148\+ \\5Ïå§\153\19\139å§\154\19\140å§\156\19\137å§¥\6\23姦\7-姨\19\136姪\16\+ \Cå§«\15\16å§¶\5¦å§»\5÷å§¿\9ðå¨\129\5Ðå¨\131\5¡å¨\137\19\145å¨\145\19\143\+ \å¨\152\16:å¨\154\19\146å¨\156\19\144å¨\159\19\142å¨ \11P娥\19\141娩\15\+ \\152娯\8â娵\19\150娶\19\151娼\10éå©\128\19\147å©\129\17Kå©\134\14kå©\+ \\137\19\149å©\154\9eå©¢\19\152婦\157婪\19\153婬\19\148å©¿\169åª\146\+ \\14}åª\154\19\154åª\155\15\17媼\19\155媽\19\159媾\19\156å«\129\6\133å\+ \«\130\19\158å«\137\109å«\139\19\157å«\140\8\153å«\144\19«å«\150\19¤å«\+ \\151\19¡å«¡\13\4å«£\19 嫦\19¢å«©\19£å«º\19¥å«»\19¦å¬\137\7på¬\139\19¨å¬\+ \\140\19§å¬\150\19©å¬¢\11,嬪\19¬å¬¬\13Z嬰\6$嬲\19ªå¬¶\19\173嬾\19®å\+ \\173\128\19±å\173\131\19¯å\173\133\19°å\173\144\9ñå\173\145\19²å\173\148\+ \\9\5å\173\149\19³å\173\151\10\26å\173\152\12vå\173\154\19´å\173\155\19µå\+ \\173\156\9ùå\173\157\9\6å\173\159\16På\173£\7\135å\173¤\8Çå\173¥\19¶å\+ \\173¦\6÷å\173©\19·å\173«\12wå\173°\19¸å\173±\19áå\173³\19¹å\173µ\19ºå\+ \\173¸\19»å\173º\19½å®\128\19¾å®\131\19Àå®\133\12®å®\135\6\6å®\136\10gå®\+ \\137\5Àå®\139\126å®\140\7.å®\141\103å®\143\9\7å®\149\13Æå®\151\10\128å®\+ \\152\7/å®\153\13\8å®\154\13hå®\155\5¶å®\156\7\152å®\157\15³å®\159\10@客\+ \\7±å®£\11é室\10:宥\16\135宦\19Áå®®\7»å®°\9\137害\6Ñå®´\6C宵\10êå®¶\+ \\6\134宸\19Â容\16¥å®¿\10¨å¯\130\10bå¯\131\19Ãå¯\132\7qå¯\133\14\16å¯\+ \\134\16'å¯\135\19Äå¯\137\19Åå¯\140\158å¯\144\19Çå¯\146\7&å¯\147\85å¯\148\+ \\19Æå¯\155\70å¯\157\11Qå¯\158\19Ëå¯\159\9À寡\6\135寢\19Ê寤\19È寥\19Ì\+ \實\19É寧\14J寨\22K審\11R寫\19Í寮\16þ寰\19Î寳\19Ð寵\13\30寶\19Ï\+ \寸\11¡å¯º\10\27対\12\142寿\10uå°\129\15Uå°\130\11êå°\132\10Kå°\133\19\+ \Ñå°\134\10ëå°\135\19Òå°\136\19Óå°\137\5Ñå°\138\12xå°\139\11qå°\141\19Ôå°\+ \\142\13ñå°\143\10ìå°\145\10íå°\147\19Õå°\150\11ëå°\154\10îå° \19Öå°¢\19×\+ \å°¤\16^å°¨\19Øå°\173\8\4å°±\10\129å°¸\19Ùå°¹\19Úå°º\10Zå°»\11Kå°¼\142å°½\+ \\11så°¾\14öå°¿\14Aå±\128\8\7å±\129\19Ûå±\133\7Ïå±\134\19Üå±\136\8<å±\138\+ \\14\13å±\139\6nå±\141\9òå±\142\19Ýå±\143\19àå±\144\19ßå±\145\8;å±\147\19\+ \Þå±\149\13\151å±\158\12nå± \13ªå±¡\10F層\127å±¥\16Ú屬\19âå±®\19ã屯\14\+ \\20å±±\9Òå±¶\19åå±¹\19æå²\140\19çå²\144\7rå²\145\19èå²\148\19é岡\6j岨\+ \\12\26岩\7b岫\19ë岬\16&å²±\12\144å²³\6øå²¶\19íå²·\19ï岸\7]å²»\19ìå²¼\+ \\19îå²¾\19ñå³\133\19ðå³\135\19òå³\153\19óå³ \13û峡\7ì峨\6£å³©\19ô峪\+ \\19ùå³\173\19÷峯\15µå³°\15´å³¶\13Ç峺\19öå³»\10³å³½\19õå´\135\11\146å´\+ \\139\19úå´\142\9¨å´\145\20\0å´\148\20\1å´\149\19ûå´\150\6Òå´\151\19üå´\+ \\152\20\5å´\153\20\4å´\154\20\3å´\155\19ÿå´\159\19þå´¢\20\2å´©\15¶åµ\139\+ \\20\9åµ\140\20\6åµ\142\20\8åµ\144\16Òåµ\146\20\7åµ\156\19ý嵩\11\147嵬\+ \\20\10嵯\9uåµ³\20\11åµ¶\20\12å¶\130\20\15å¶\132\20\14å¶\135\20\13å¶\139\+ \\13Èå¶\140\19øå¶\144\20\21å¶\157\20\17å¶¢\20\16嶬\20\18å¶®\20\19å¶·\20\+ \\22嶺\17$å¶¼\20\23å¶½\20\20å·\137\20\24å·\140\7^å·\141\20\25å·\146\20\+ \\27å·\147\20\26å·\150\20\28å·\155\20\29å·\157\11ìå·\158\10\130å·¡\10Äå·£\+ \\12Cå·¥\9\8å·¦\9vå·§\9\9å·¨\7Ðå·«\20\30å·®\9wå·±\8Èå·²\20\31å·³\16$å·´\+ \\14bå·µ\20 å··\9\10å·»\7*å·½\12Æå·¾\8\16å¸\130\9óå¸\131\15:å¸\134\14¿å¸\+ \\139\20!å¸\140\7så¸\145\20$å¸\150\13\31å¸\153\20#å¸\154\20\34å¸\155\20%å\+ \¸\157\13i帥\11\131師\9ôå¸\173\11È帯\12\145帰\7\129帳\13 帶\20&帷\+ \\20'常\11-帽\15Øå¹\128\20*å¹\131\20)å¹\132\20(å¹\133\15]å¹\135\201å¹\+ \\140\15ùå¹\142\20+å¹\148\20-å¹\149\16\11å¹\151\20,å¹\159\20.幡\14¦å¹¢\+ \\20/å¹£\15|幤\200å¹²\71å¹³\15}å¹´\14Nå¹µ\202å¹¶\203幸\9\11å¹¹\72幺\20\+ \4å¹»\8¶å¹¼\16£å¹½\16\136å¹¾\7t广\206åº\129\13!åº\131\9\12åº\132\10ïåº\+ \\135\14Ýåº\138\10ðåº\143\10Øåº\149\13jåº\150\15·åº\151\13\152åº\154\9\13\+ \åº\156\15;åº \207度\13¸åº§\9\128庫\8Éåº\173\13k庵\5Á庶\10Î康\9\14åº\+ \¸\16¦å»\129\208å»\130\209å»\131\14på»\136\20:å»\137\175å»\138\17Lå»\143\+ \\20<å»\144\20;å»\147\6æå»\150\20@å»\154\20Cå»\155\20Då»\157\20Bå»\159\15\+ \\31å» \10ñ廡\20F廢\20E廣\20A廨\20G廩\20H廬\20Iå»°\20Lå»±\20J廳\20\+ \Kå»´\20Må»¶\6Då»·\13l廸\20N建\8\154å»»\6´å»¼\14U廾\20O廿\149å¼\129\+ \\15\153å¼\131\20På¼\132\17Må¼\137\20Qå¼\138\15~å¼\139\20Tå¼\140\17\159å¼\+ \\141\17¯å¼\143\10.å¼\144\143å¼\145\20Uå¼\147\7¼å¼\148\13\34å¼\149\5øå¼\+ \\150\20Vå¼\151\15då¼\152\9\15å¼\155\12ïå¼\159\13må¼¥\16m弦\8·å¼§\8Ê弩\+ \\20Wå¼\173\20X弯\20^å¼±\10cå¼µ\13#å¼·\7í弸\20Yå¼¼\15\10å¼¾\12åå½\129\+ \\20Zå½\136\20[å½\138\7îå½\140\20\92å½\142\20]å½\145\20_å½\147\13Öå½\150\+ \\20`å½\151\20aå½\153\20bå½\156\20Så½\157\20R彡\20cå½¢\8`彦\15\6彩\9\+ \\138彪\15\22彫\13$彬\15*å½\173\20då½°\10òå½±\6%å½³\20eå½·\20få½¹\16på\+ \½¼\14Þ彿\20iå¾\128\6]å¾\129\11ªå¾\130\20hå¾\131\20gå¾\132\8aå¾\133\12\+ \\146å¾\135\20må¾\136\20kå¾\138\20jå¾\139\16åå¾\140\8ãå¾\144\10Ùå¾\145\20\+ \lå¾\146\13«å¾\147\10\157å¾\151\13þå¾\152\20på¾\153\20oå¾\158\20nå¾ \20qå\+ \¾¡\8ä徨\20r復\15\92循\10ºå¾\173\20så¾®\14÷å¾³\13ÿå¾´\13%å¾¹\13\143å¾¼\+ \\20tå¾½\7\138å¿\131\11Så¿\133\15\11å¿\140\7uå¿\141\14Eå¿\150\20uå¿\151\9\+ \õå¿\152\15Ùå¿\153\15Úå¿\156\6^å¿\157\20zå¿ \13\9忤\20wå¿«\6µå¿°\20«å¿±\+ \\20y念\14O忸\20xå¿»\20v忽\9Zå¿¿\20|æ\128\142\20\131æ\128\143\20\137æ\+ \\128\144\20\129æ\128\146\13»æ\128\149\20\134æ\128\150\15<æ\128\153\20\+ \\128æ\128\155\20\133æ\128\156\17%æ\128\157\9öæ\128 \12\147æ\128¡\20}æ\+ \\128¥\7½æ\128¦\20\136æ\128§\11«æ\128¨\6Eæ\128©\20\130æ\128ª\6¶æ\128«\20\+ \\135æ\128¯\7ïæ\128±\20\132æ\128º\20\138æ\129\129\20\140æ\129\130\20\150æ\+ \\129\131\20\148æ\129\134\20\145æ\129\138\20\144æ\129\139\176æ\129\141\20\+ \\146æ\129\144\7ðæ\129\146\9\16æ\129\149\10Úæ\129\153\20\153æ\129\154\20\+ \\139æ\129\159\20\143æ\129 \20~æ\129¢\6¸æ\129£\20\147æ\129¤\20\149æ\129¥\+ \\12ðæ\129¨\9fæ\129©\6væ\129ª\20\141æ\129«\20\152æ\129¬\20\151æ\129\173\7\+ \ñæ\129¯\12gæ\129°\7\6æ\129µ\8bæ\129·\20\142æ\130\129\20\154æ\130\131\20\+ \\157æ\130\132\20\159æ\130\137\10;æ\130\139\20¥æ\130\140\13næ\130\141\20\+ \\155æ\130\146\20£æ\130\148\6·æ\130\150\20¡æ\130\151\20¢æ\130\154\20\158æ\+ \\130\155\20 æ\130\159\8åæ\130 \16\137æ\130£\73æ\130¦\68æ\130§\20¤æ\130©\+ \\14Yæ\130ª\5«æ\130²\14ßæ\130³\20{æ\130´\20ªæ\130µ\20®æ\130¶\16cæ\130¸\20\+ \§æ\130¼\13Éæ\130½\20¬æ\131\133\11.æ\131\134\20\173æ\131\135\14\21æ\131\+ \\145\17fæ\131\147\20©æ\131\152\20¯æ\131\154\9[æ\131\156\11Éæ\131\159\5Òæ\+ \\131 \20¨æ\131¡\20¦æ\131£\129æ\131§\20\156æ\131¨\9Óæ\131°\12\132æ\131±\+ \\20»æ\131³\12:æ\131´\20¶æ\131¶\20³æ\131·\20´æ\131¹\10dæ\131º\20·æ\131»\+ \\20ºæ\132\128\20µæ\132\129\10\132æ\132\131\20¸æ\132\134\20²æ\132\136\16z\+ \æ\132\137\16yæ\132\141\20¼æ\132\142\20½æ\132\143\5Óæ\132\149\20±æ\132\+ \\154\80æ\132\155\5¤æ\132\159\74æ\132¡\20¹æ\132§\20Áæ\132¨\20Àæ\132¬\20Åæ\+ \\132´\20Ææ\132¼\20Äæ\132½\20Çæ\132¾\20¿æ\132¿\20Ãæ\133\130\20Èæ\133\132\+ \\20Éæ\133\135\20¾æ\133\136\10\28æ\133\138\20Âæ\133\139\12\148æ\133\140\9\+ \\17æ\133\141\20°æ\133\142\11Tæ\133\147\20Öæ\133\149\15§æ\133\152\20Ìæ\+ \\133\153\20Íæ\133\154\20Îæ\133\157\20Õæ\133\159\20Ôæ\133¢\16\29æ\133£\75\+ \æ\133¥\20Òæ\133§\8dæ\133¨\6Óæ\133«\20Ïæ\133®\16öæ\133¯\20Ñæ\133°\5Ôæ\133\+ \±\20Óæ\133³\20Êæ\133´\20Ðæ\133µ\20׿\133¶\8cæ\133·\20Ëæ\133¾\16¼æ\134\+ \\130\16\138æ\134\135\20Úæ\134\138\20Þæ\134\142\12^æ\134\144\177æ\134\145\+ \\20ßæ\134\148\20Üæ\134\150\20Ùæ\134\153\20Øæ\134\154\20Ýæ\134¤\15næ\134§\+ \\13òæ\134©\8eæ\134«\20àæ\134¬\20Ûæ\134®\20áæ\134²\8\155æ\134¶\6oæ\134º\+ \\20éæ\134¾\76æ\135\131\20çæ\135\134\20èæ\135\135\9gæ\135\136\20ææ\135\+ \\137\20äæ\135\138\20ãæ\135\139\20êæ\135\140\20âæ\135\141\20ìæ\135\144\6¹\+ \æ\135£\20îæ\135¦\20íæ\135²\13&æ\135´\20ñæ\135¶\20ïæ\135·\20åæ\135¸\8\156\+ \æ\135º\20ðæ\135¼\20ôæ\135½\20óæ\135¾\20õæ\135¿\20òæ\136\128\20öæ\136\136\+ \\20÷æ\136\137\20øæ\136\138\15¨æ\136\140\20úæ\136\141\20ùæ\136\142\10\158\+ \æ\136\144\11¬æ\136\145\6¤æ\136\146\6ºæ\136\148\20ûæ\136\150\5½æ\136\154\+ \\11Êæ\136\155\20üæ\136\157\28Aæ\136\158\21\0æ\136\159\8\129æ\136¡\21\1æ\+ \\136¦\11íæ\136ª\21\2æ\136®\21\3æ\136¯\7\153æ\136°\21\4æ\136²\21\5æ\136³\+ \\21\6æ\136´\12\149æ\136¸\8Ëæ\136»\16_æ\136¿\15Ûæ\137\128\10Êæ\137\129\21\+ \\7æ\137\135\11îæ\137\136\28ûæ\137\137\14àæ\137\139\10hæ\137\141\9\139æ\+ \\137\142\21\8æ\137\147\12\133æ\137\149\15eæ\137\152\12¯æ\137\155\21\11æ\+ \\137\158\21\9æ\137 \21\12æ\137£\21\10æ\137¨\21\13æ\137®\15oæ\137±\5µæ\+ \\137¶\15=æ\137¹\14áæ\137¼\21\14æ\137¾\21\17æ\137¿\10óæ\138\128\7\154æ\+ \\138\130\21\15æ\138\131\21\22æ\138\132\10ôæ\138\137\21\16æ\138\138\14cæ\+ \\138\145\16½æ\138\146\21\18æ\138\147\21\19æ\138\148\21\23æ\138\149\13Êæ\+ \\138\150\21\20æ\138\151\9\18æ\138\152\11Üæ\138\155\21%æ\138\156\14²æ\138\+ \\158\12°æ\138«\14âæ\138¬\21kæ\138±\15¸æ\138µ\13oæ\138¹\16\21æ\138»\21\26\+ \æ\138¼\6_æ\138½\13\10æ\139\130\21#æ\139\133\12Óæ\139\134\21\29æ\139\135\+ \\21$æ\139\136\21\31æ\139\137\21&æ\139\138\21\34æ\139\140\21!æ\139\141\14\+ \\143æ\139\143\21\27æ\139\144\6»æ\139\145\21\25æ\139\146\7Ñæ\139\147\12±æ\+ \\139\148\21\21æ\139\151\21\24æ\139\152\9\19æ\139\153\11Ùæ\139\155\10õæ\+ \\139\156\21 æ\139\157\14qæ\139 \7Òæ\139¡\6çæ\139¬\7\7æ\139\173\11@æ\139®\+ \\21(æ\139¯\21-æ\139±\21)æ\139³\8\157æ\139µ\21.æ\139¶\9Áæ\139·\9Iæ\139¾\+ \\10\133æ\139¿\21\28æ\140\129\10\29æ\140\130\21+æ\140\135\9÷æ\140\136\21,\+ \æ\140\137\5Âæ\140\140\21'æ\140\145\13'æ\140\153\7Óæ\140\159\7òæ\140§\21*\+ \æ\140¨\5¥æ\140«\9\129æ\140¯\11Uæ\140º\13pæ\140½\14Òæ\140¾\210æ\140¿\12=æ\+ \\141\137\12hæ\141\140\9Êæ\141\141\211æ\141\143\213æ\141\144\21/æ\141\149\+ \\15\159æ\141\151\13;æ\141\156\12;æ\141§\15¹æ\141¨\10Læ\141©\21@æ\141«\21\+ \>æ\141®\11\152æ\141²\8\158æ\141¶\218æ\141·\10÷æ\141º\14&æ\141»\14Pæ\142\+ \\128\216æ\142\131\12<æ\142\136\10væ\142\137\21;æ\142\140\10öæ\142\142\21\+ \5æ\142\143\21:æ\142\146\14ræ\142\150\214æ\142\152\8@æ\142\155\6üæ\142\+ \\159\21<æ\142 \16éæ\142¡\9\140æ\142¢\12Ôæ\142£\219æ\142¥\11Úæ\142§\9\20æ\+ \\142¨\11\132æ\142©\6Fæ\142ª\12\27æ\142«\217æ\142¬\7¤æ\142²\8fæ\142´\13Mæ\+ \\142µ\21=æ\142»\12>æ\142¾\21Aæ\143\128\21Cæ\143\131\12uæ\143\132\21Iæ\+ \\143\134\21Dæ\143\137\21Fæ\143\143\15 æ\143\144\13qæ\143\146\21Gæ\143\+ \\150\16\139æ\143\154\16§æ\143\155\77æ\143¡\5¬æ\143£\21Eæ\143©\21Bæ\143®\+ \\7væ\143´\6Gæ\143¶\21Hæ\143º\16¨æ\144\134\21Læ\144\141\12yæ\144\143\21Sæ\+ \\144\147\21Mæ\144\150\21Jæ\144\151\21Qæ\144\156\212æ\144¦\21Næ\144¨\21Ræ\+ \\144¬\14Àæ\144\173\13Ëæ\144´\21Kæ\144¶\21Oæ\144º\8gæ\144¾\9¯æ\145\130\11\+ \Ûæ\145\142\21Wæ\145\152\13\133æ\145§\21Tæ\145©\16\0æ\145¯\21Uæ\145¶\21Væ\+ \\145¸\16Læ\145º\11 æ\146\131\8\130æ\146\136\21]æ\146\146\9Ôæ\146\147\21Z\+ \æ\146\149\21Yæ\146\154\14Qæ\146\158\13óæ\146¤\13\144æ\146¥\21[æ\146©\21\+ \\92æ\146«\15Oæ\146\173\14dæ\146®\9Âæ\146°\11ïæ\146²\15ïæ\146¹\6èæ\146»\+ \\21cæ\146¼\21^æ\147\129\16©æ\147\130\21eæ\147\133\21aæ\147\135\21bæ\147\+ \\141\12@æ\147\146\21`æ\147\148\21\30æ\147\152\21dæ\147\154\21_æ\147 \21i\+ \æ\147¡\21jæ\147¢\13\134æ\147£\21læ\147¦\9Ãæ\147§\21gæ\147¬\7\155æ\147¯\+ \\21mæ\147±\21fæ\147²\21qæ\147´\21pæ\147¶\21oæ\147º\21ræ\147½\21tæ\147¾\+ \\11/æ\148\128\21sæ\148\133\21wæ\148\152\21uæ\148\156\21væ\148\157\21Pæ\+ \\148£\21yæ\148¤\21xæ\148ª\21Xæ\148«\21zæ\148¬\21næ\148¯\9øæ\148´\21{æ\+ \\148µ\21|æ\148¶\21~æ\148·\21}æ\148¸\21\127æ\148¹\6¼æ\148»\9\21æ\148¾\15º\+ \æ\148¿\11\173æ\149\133\8Ìæ\149\136\21\129æ\149\141\21\132æ\149\143\151æ\+ \\149\145\7¾æ\149\149\21\131æ\149\150\21\130æ\149\151\14sæ\149\152\21\133\+ \æ\149\153\7óæ\149\157\21\135æ\149\158\21\134æ\149¢\78æ\149£\9Õæ\149¦\14\+ \\22æ\149¬\8hæ\149°\11\148æ\149²\21\136æ\149´\11®æ\149µ\13\135æ\149·\15>æ\+ \\149¸\21\137æ\150\130\21\138æ\150\131\21\139æ\150\135\15væ\150\136\19¼æ\+ \\150\137\11Äæ\150\140\15+æ\150\142\9\150æ\150\144\14ãæ\150\145\14Áæ\150\+ \\151\13¬æ\150\153\16ÿæ\150\155\21\141æ\150\156\10Næ\150\159\21\142æ\150¡\+ \\5´æ\150¤\8\18æ\150¥\11Ëæ\150§\15@æ\150«\21\143æ\150¬\9áæ\150\173\12ææ\+ \\150¯\9úæ\150°\11Væ\150·\21\144æ\150¹\15»æ\150¼\6Wæ\150½\9ûæ\151\129\21\+ \\147æ\151\131\21\145æ\151\132\21\148æ\151\133\16÷æ\151\134\21\146æ\151\+ \\139\11ùæ\151\140\21\149æ\151\143\12pæ\151\146\21\150æ\151\151\7xæ\151\+ \\153\21\152æ\151\155\21\151æ\151 \21\153æ\151¡\21\154æ\151¢\7yæ\151¥\14:\+ \æ\151¦\12Õæ\151§\7Ìæ\151¨\9üæ\151©\12Aæ\151¬\10»æ\151\173\5®æ\151±\21\+ \\155æ\151º\6`æ\151»\21\159æ\152\130\9\22æ\152\131\21\158æ\152\134\9iæ\+ \\152\135\10øæ\152\138\21\157æ\152\140\10ùæ\152\142\16>æ\152\143\9hæ\152\+ \\147\5Õæ\152\148\11Ìæ\152\156\21¤æ\152\159\11¯æ\152 \6&æ\152¥\10´æ\152§\+ \\16\6æ\152¨\9°æ\152\173\10úæ\152¯\11¥æ\152´\21£æ\152µ\21¡æ\152¶\21¢æ\152\+ \¼\13\11æ\152¿\21Åæ\153\129\21¨æ\153\130\10\30æ\153\131\9\23æ\153\132\21¦\+ \æ\153\137\21§æ\153\139\11Wæ\153\143\21¥æ\153\146\9Îæ\153\157\21ªæ\153\+ \\158\21©æ\153\159\21®æ\153¢\21¯æ\153¤\21«æ\153¦\6Áæ\153§\21¬æ\153¨\21\+ \\173æ\153©\14Óæ\153®\15Aæ\153¯\8iæ\153°\21°æ\153´\11°æ\153¶\10ûæ\153º\12\+ \ñæ\154\129\8\5æ\154\131\21±æ\154\132\21µæ\154\135\6\137æ\154\136\21²æ\+ \\154\137\21´æ\154\142\21³æ\154\145\10Ëæ\154\150\12çæ\154\151\5Ãæ\154\152\+ \\21¶æ\154\157\21·æ\154¢\13(æ\154¦\17/æ\154«\9âæ\154®\15©æ\154´\15Üæ\154¸\+ \\21Áæ\154¹\21¹æ\154¼\21¼æ\154¾\21»æ\155\129\21¸æ\155\132\21Àæ\155\135\14\+ \\28æ\155\137\21ºæ\155\150\21Âæ\155\153\10Ìæ\155\154\21Ãæ\155\156\16ªæ\+ \\155\157\14\152æ\155 \21Äæ\155¦\21Ææ\155©\21Çæ\155°\21Èæ\155²\8\8æ\155³\+ \\6'æ\155´\9\24æ\155µ\21Éæ\155·\21Êæ\155¸\10Ñæ\155¹\12Bæ\155¼\18\150æ\155\+ \½\12\29æ\155¾\12\28æ\155¿\12\150æ\156\128\9\133æ\156\131\17ðæ\156\136\8\+ \\142æ\156\137\16\140æ\156\139\15¼æ\156\141\15^æ\156\143\21Ëæ\156\148\9±æ\+ \\156\149\13=æ\156\150\21Ìæ\156\151\17Næ\156\155\15Ýæ\156\157\13)æ\156\+ \\158\21Íæ\156\159\7zæ\156¦\21Îæ\156§\21Ïæ\156¨\16Xæ\156ª\16\34æ\156«\16\+ \\22æ\156¬\15ûæ\156\173\9Äæ\156®\21Ñæ\156±\10iæ\156´\15ðæ\156¶\21Óæ\156·\+ \\21Öæ\156¸\21Õæ\156º\7wæ\156½\7Àæ\156¿\21Òæ\157\129\21Ôæ\157\134\21׿\+ \\157\137\11\153æ\157\142\16Ûæ\157\143\5Çæ\157\144\9\158æ\157\145\12zæ\+ \\157\147\10[æ\157\150\111æ\157\153\21Úæ\157\156\13\173æ\157\158\21Øæ\157\+ \\159\12iæ\157 \21Ùæ\157¡\110æ\157¢\16[æ\157£\21Ûæ\157¤\21Üæ\157¥\16Èæ\+ \\157ª\21áæ\157\173\9\25æ\157¯\14tæ\157°\21Þæ\157±\13Ìæ\157²\21\156æ\157³\+ \\21 æ\157µ\7®æ\157·\14fæ\157¼\21àæ\157¾\10üæ\157¿\14Âæ\158\133\21ææ\158\+ \\135\14øæ\158\137\21Ýæ\158\139\21ãæ\158\140\21âæ\158\144\11Íæ\158\149\16\+ \\13æ\158\151\17\17æ\158\154\16\7æ\158\156\6\138æ\158\157\9ýæ\158 \17gæ\+ \\158¡\21åæ\158¢\11\149æ\158¦\21äæ\158©\21ßæ\158¯\8Íæ\158³\21ëæ\158´\21éæ\+ \\158¶\6\139æ\158·\21çæ\158¸\21íæ\158¹\21óæ\159\129\12\134æ\159\132\15\+ \\127æ\159\134\21õæ\159\138\15\1æ\159\142\21ôæ\159\143\14\144æ\159\144\15\+ \Þæ\159\145\79æ\159\147\11õæ\159\148\10\159æ\159\152\13Qæ\159\154\16\141æ\+ \\159\157\21ðæ\159\158\21ïæ\159¢\21ñæ\159¤\21îæ\159§\21öæ\159©\21ìæ\159¬\+ \\21êæ\159®\21òæ\159¯\21èæ\159±\13\12æ\159³\16væ\159´\10Dæ\159µ\9²æ\159»\+ \\9xæ\159¾\16\15æ\159¿\6àæ \130\13Læ \131\14\8æ \132\6(æ \147\11ðæ \150\+ \\11²æ \151\8Iæ \158\21øæ ¡\9\26æ ¢\7\28æ ©\21úæ ª\7\20æ «\22\1æ ²\21ýæ ´\+ \\11ñæ ¸\6êæ ¹\9jæ ¼\6éæ ½\9\141æ¡\128\21ûæ¡\129\8\133æ¡\130\8jæ¡\131\13Í\+ \æ¡\134\21ùæ¡\136\5Äæ¡\141\21üæ¡\142\21þæ¡\144\8\11æ¡\145\8Kæ¡\147\7:æ¡\+ \\148\7ªæ¡\153\22\2æ¡\156\9·æ¡\157\16\17æ¡\159\9Öæ¡£\22\3æ¡§\15\15æ¡´\22\+ \\15æ¡¶\6qæ¡·\22\4桾\22\21æ¡¿\22\5æ¢\129\17\0æ¢\131\22\12æ¢\133\14~æ¢\+ \\141\22\20æ¢\143\22\7æ¢\147\5²æ¢\148\22\9æ¢\151\9\27æ¢\155\22\11æ¢\157\+ \\22\10æ¢\159\22\6æ¢ \22\17梢\10ý梦\19k梧\8ææ¢¨\16Üæ¢\173\22\8梯\13ræ\+ \¢°\6Âæ¢±\9k梳\22\0梵\22\16梶\7\1梹\22\14梺\22\18梼\13Îæ£\132\7|æ£\+ \\134\220æ£\137\16Gæ£\138\22\23æ£\139\7{æ£\141\22\30æ£\146\15ßæ£\148\22\+ \\31æ£\149\22!æ£\151\22%æ£\152\22\25æ£\154\12Éæ£\159\13Ïæ£ \22)棡\22\28æ\+ \££\22&棧\22 森\11X棯\22*棲\11±æ£¹\22(棺\7;æ¤\128\17oæ¤\129\22\22æ¤\+ \\132\22$æ¤\133\5Öæ¤\136\22\24æ¤\139\168æ¤\140\22\29æ¤\141\11Aæ¤\142\13Eæ\+ \¤\143\22\19æ¤\146\22#æ¤\153\11\154æ¤\154\22-æ¤\155\7\17æ¤\156\8\159椡\+ \\22/椢\22\26椣\22.椥\22'椦\22\27椨\22+椪\22,椰\22=椴\14\12椶\22\+ \\34椹\229椽\22;椿\13Væ¥\138\16«æ¥\147\15Væ¥\148\226æ¥\149\12\136æ¥\+ \\153\22<æ¥\154\12\30æ¥\156\223æ¥\157\22@æ¥\158\22?æ¥ \14-楡\22>楢\14(æ\+ \¥ª\22B楫\225æ¥\173\8\6楮\228楯\10¼æ¥³\14\128楴\22:極\8\9楷\222楸\+ \\224楹\221楼\17O楽\6ù楾\227æ¦\129\22Aæ¦\130\6Ôæ¦\138\9¥æ¦\142\6<æ¦\+ \\145\22Ræ¦\148\17Pæ¦\149\22Uæ¦\155\11Yæ¦\156\22Tæ¦ \22S榧\22P榮\22D榱\+ \\22a榲\22C榴\22V榻\22N榾\22I榿\22Fæ§\129\22Gæ§\131\22Oæ§\135\31 æ§\+ \\138\22Læ§\139\9\28æ§\140\13Fæ§\141\12Dæ§\142\22Jæ§\144\22Eæ§\147\22Hæ§\+ \\152\16¬æ§\153\16\10æ§\157\22Mæ§\158\22Wæ§§\22_槨\22Xæ§«\22eæ§\173\22cæ\+ \§²\22^æ§¹\22]æ§»\13Næ§½\12Eæ§¿\22[æ¨\130\22Yæ¨\133\22`æ¨\138\22fæ¨\139\+ \\14óæ¨\140\22læ¨\146\22gæ¨\147\22jæ¨\148\22dæ¨\151\13\20æ¨\153\15\23æ¨\+ \\155\22Zæ¨\158\22bæ¨\159\10þ模\16M樢\22v樣\22i権\8 横\6a樫\6þ樮\+ \\22Q樵\10ÿ樶\22n樸\22u樹\10w樺\7\18樽\12Íæ©\132\22kæ©\135\22pæ©\+ \\136\22tæ©\139\7ôæ©\152\7«æ©\153\22ræ©\159\7\128æ©¡\14\9æ©¢\22q橦\22sæ©\+ \²\22m橸\22oæ©¿\7\0æª\128\12èæª\132\22zæª\141\22xæª\142\8çæª\144\22wæª\+ \\151\22\128æª\156\21÷æª \22y檢\22{檣\22|檪\22\139檬\22\135檮\22\13æ\+ \ª³\22\134檸\22\133檻\22\130æ«\129\22hæ«\130\22\132æ«\131\22\131æ«\145\+ \\22\137æ«\147\17Eæ«\154\22\140æ«\155\89æ«\158\22\136æ«\159\22\138櫨\14¥\+ \櫪\22\141櫺\22\145æ«»\22\142æ¬\132\16Óæ¬\133\22\143æ¬\138\22\92æ¬\146\+ \\22\146æ¬\150\22\147æ¬\157\6\20æ¬\159\22\149æ¬ \8\135次\10\31欣\8\19æ¬\+ \§\6b欲\16¾æ¬·\22\151欸\22\150欹\22\153欺\7\156欽\8\20款\7<æ\173\+ \\131\22\156æ\173\135\22\155æ\173\137\22\157æ\173\140\6\140æ\173\142\12Öæ\+ \\173\144\22\158æ\173\147\7=æ\173\148\22 æ\173\153\22\159æ\173\155\22¡æ\+ \\173\159\22¢æ\173¡\22£æ\173¢\9þæ\173£\11³æ\173¤\9_æ\173¦\15Pæ\173©\15 æ\+ \\173ª\17cæ\173¯\10\21æ\173³\9\142æ\173´\170æ\173¸\22¤æ\173¹\22¥æ\173»\10\+ \\0æ\173¿\22¦æ®\128\22§æ®\131\22©æ®\132\22¨æ®\134\15÷æ®\137\10½æ®\138\10j\+ \æ®\139\9ãæ®\141\22ªæ®\149\22¬æ®\150\11Bæ®\152\22«æ®\158\22\173殤\22®æ®ª\+ \\22¯æ®«\22°æ®¯\22±æ®±\22³æ®²\22²æ®³\22´æ®´\6c段\12éæ®·\22µæ®º\9Åæ®»\6ëæ\+ \®¼\22¶æ®¿\13¡æ¯\128\19Jæ¯\133\7\130æ¯\134\22·æ¯\139\22¸æ¯\141\15ªæ¯\142\+ \\16\8æ¯\146\14\5æ¯\147\22¹æ¯\148\14保\152\14ùæ¯\155\16Qæ¯\159\22ºæ¯«\22\+ \¼æ¯¬\22»æ¯¯\22¾æ¯³\22½æ°\136\22Áæ°\143\10\1æ°\145\16/æ°\147\22Âæ°\148\22\+ \Ãæ°\151\7\131æ°\155\22Äæ°£\22Ææ°¤\22Åæ°´\11\133æ°·\15\24æ°¸\6)æ°¾\14Ãæ±\+ \\128\13sæ±\129\10 æ±\130\7Áæ±\142\14Äæ±\144\10,æ±\149\22Èæ±\151\7>æ±\154\+ \\6Xæ±\157\140æ±\158\22Çæ±\159\9\29æ± \12òæ±¢\22Éæ±¨\22Ñæ±ª\22Êæ±°\12\127\+ \æ±²\7Âæ±³\22Òæ±º\8\136æ±½\7\132æ±¾\22Ðæ²\129\22Îæ²\130\22Ëæ²\131\16Àæ²\+ \\136\13>æ²\140\14\23æ²\141\22Ìæ²\144\22Ôæ²\146\22Óæ²\147\8Bæ²\150\6kæ²\+ \\153\9yæ²\154\22Íæ²\155\22Ïæ²¡\15öæ²¢\12²æ²«\16\23æ²®\22Üæ²±\22Ýæ²³\6\+ \\141沸\15fæ²¹\16{沺\22ßæ²»\10!æ²¼\11\0æ²½\22Øæ²¾\22Þæ²¿\6Hæ³\129\7õæ³\+ \\132\22Õæ³\133\22Úæ³\137\11òæ³\138\14\145æ³\140\14åæ³\147\22׿³\149\15Àæ\+ \³\151\22Ùæ³\153\22âæ³\155\22àæ³\157\22Ûæ³¡\15Áæ³¢\14gæ³£\7Ãæ³¥\13\132注\+ \\13\13泪\22ãæ³¯\22áæ³°\12\151æ³±\22Öæ³³\6*æ´\139\16\173æ´\140\22îæ´\146\+ \\22íæ´\151\11ôæ´\153\22êæ´\155\16Ìæ´\158\13ôæ´\159\22äæ´¥\13Cæ´©\6+æ´ª\9\+ \\30æ´«\22çæ´²\10\134æ´³\22ìæ´µ\22ëæ´¶\22ææ´¸\22éæ´»\7\8æ´½\22èæ´¾\14hæµ\+ \\129\16ìæµ\132\112æµ\133\11óæµ\153\22ôæµ\154\22òæµ\156\15,æµ£\22ïæµ¤\22ñ\+ \浦\6\25浩\9\31浪\17Q浬\6Üæµ®\15Bæµ´\16Áæµ·\6Ãæµ¸\11Zæµ¹\22óæ¶\133\22\+ \øæ¶\136\11\1æ¶\140\16\143æ¶\142\22õæ¶\147\22ðæ¶\149\22öæ¶\153\17\28æ¶\+ \\155\13Óæ¶\156\14\0涯\6Õæ¶²\64æ¶µ\22ü涸\22ÿæ¶¼\17\1æ·\128\16Äæ·\133\23\+ \\6æ·\134\23\0æ·\135\22ýæ·\139\17\18æ·\140\23\3æ·\145\10©æ·\146\23\5æ·\+ \\149\23\10æ·\152\13Ñæ·\153\23\8æ·\158\23\2æ·¡\12׿·¤\23\9æ·¦\22þæ·¨\23\4\+ \æ·ª\23\11æ·«\5úæ·¬\23\1æ·®\23\12æ·±\11[æ·³\10¾æ·µ\15cæ··\9læ·¹\22ùæ·º\23\+ \\7æ·»\13\153æ¸\133\11´æ¸\135\7\9æ¸\136\9\143æ¸\137\11\2æ¸\138\22ûæ¸\139\+ \\10¡æ¸\147\8kæ¸\149\22úæ¸\153\23\16æ¸\154\10Íæ¸\155\8¸æ¸\157\23\31æ¸\159\+ \\23\25æ¸ \7Ôæ¸¡\13®æ¸£\23\20渤\23\29渥\5\173渦\6\17温\6w渫\23\22測\+ \\12jæ¸\173\23\13渮\23\15港\9 游\23 渺\23\27渾\23\19æ¹\131\23\26æ¹\+ \\138\16)æ¹\141\23\24æ¹\142\23\28æ¹\150\8Îæ¹\152\11\3æ¹\155\12Øæ¹\159\23\+ \\18æ¹§\16\142湫\23\21æ¹®\23\14湯\13Òæ¹²\23\17æ¹¶\23\23æ¹¾\17p湿\10<æº\+ \\128\16\30æº\130\23!æº\140\14¬æº\143\23-æº\144\8¹æº\150\10Àæº\152\23#æº\+ \\156\16íæº\157\9!æº\159\230溢\5ìæº¥\23.溪\23\34溯\23(溲\23*溶\16®æº\+ \·\23%溺\13\141溽\23'æ»\130\23/æ»\132\23)æ»\133\16Eæ»\137\23$æ»\139\10 \+ \æ»\140\23<æ»\145\7\10æ»\147\23&æ»\148\23+æ»\149\23,æ»\157\12ªæ»\158\12\+ \\152滬\234滯\23:滲\238æ»´\13\136æ»·\23B滸\235滾\236滿\23\30æ¼\129\+ \\7Ùæ¼\130\15\25æ¼\134\10=æ¼\137\9Wæ¼\143\17Ræ¼\145\232æ¼\147\23Aæ¼\148\6\+ \Iæ¼\149\12Fæ¼ \14\153æ¼¢\7?æ¼£\178漫\16\31漬\13Pæ¼±\239æ¼²\23;漸\12\+ \\17æ¼¾\23@漿\237æ½\129\231æ½\133\7Aæ½\148\8\137æ½\152\23Næ½\155\23Iæ½\+ \\156\11öæ½\159\7\3潤\10Á潦\23Ræ½\173\23Kæ½®\13*潯\23Hæ½°\13Wæ½´\23kæ½\+ \¸\23E潺\23Dæ½¼\23Mæ¾\128\23Gæ¾\129\23Fæ¾\130\23Læ¾\132\11\159æ¾\134\23C\+ \æ¾\142\23Oæ¾\145\23Pæ¾\151\7@澡\23Uæ¾£\23T澤\23V澪\23Yæ¾±\13¢æ¾³\23Sæ\+ \¾¹\23Wæ¿\128\8\131æ¿\129\12·æ¿\130\23Qæ¿\131\14Zæ¿\134\23Xæ¿\148\23]æ¿\+ \\149\23[æ¿\152\23^æ¿\155\23aæ¿\159\23Zæ¿ \9Jæ¿¡\14G濤\22÷æ¿«\16Ôæ¿¬\23\+ \\92æ¿®\23`濯\12³æ¿±\23_濳\23Jæ¿¶\29\137濺\23d濾\23hç\128\129\23fç\+ \\128\137\23bç\128\139\23cç\128\143\23gç\128\145\23eç\128\149\15-ç\128\+ \\152\23mç\128\154\23jç\128\155\23iç\128\157\23lç\128\158\14\18ç\128\159\+ \\23nç\128¦\13\21ç\128§\12«ç\128¬\11£ç\128°\23oç\128²\23qç\128¾\23pç\129\+ \\140\233ç\129\145\23rç\129\152\14%ç\129£\23sç\129«\6\142ç\129¯\13Ôç\129°\+ \\6Äç\129¸\7Äç\129¼\10\92ç\129½\9\144ç\130\137\17Fç\130\138\11\134ç\130\+ \\142\6Jç\130\146\23uç\130\153\23tç\130¬\23xç\130\173\12Ùç\130®\23{ç\130¯\+ \\23vç\130³\23zç\130¸\23yç\130¹\13\159ç\130º\5×ç\131\136\173ç\131\139\23}\+ \ç\131\143\6\7ç\131\153\23\128ç\131\157\23~ç\131\159\23|ç\131±\23wç\131¹\+ \\15Âç\131½\23\130ç\132\137\23\129ç\132\148\6Kç\132\153\23\132ç\132\154\+ \\15pç\132\156\23\131ç\132¡\163ç\132¦\11\5ç\132¶\12\18ç\132¼\11\4ç\133\+ \\137\179ç\133\140\23\138ç\133\142\11÷ç\133\149\23\134ç\133\150\23\139ç\+ \\133\153\6Lç\133¢\23\137ç\133¤\14\129ç\133¥\23\133ç\133¦\23\136ç\133§\11\+ \\6ç\133©\14Ïç\133¬\23\140ç\133®\10Oç\133½\11øç\134\132\23\143ç\134\136\+ \\23\135ç\134\138\8Fç\134\143\23\141ç\134\148\16¯ç\134\149\23\144ç\134\+ \\153\31$ç\134\159\10®ç\134¨\23\145ç\134¬\23\146ç\134±\14Mç\134¹\23\148ç\+ \\134¾\23\149ç\135\131\14Rç\135\136\13Õç\135\137\23\151ç\135\142\23\153ç\+ \\135\144\17\19ç\135\146\23\150ç\135\148\23\152ç\135\149\6Mç\135\151\23\+ \\147ç\135\159\18úç\135 \23\154ç\135¥\12Gç\135¦\9×ç\135§\23\156ç\135¬\23\+ \\155ç\135\173\11Cç\135®\18\151ç\135µ\23\157ç\135¹\23\159ç\135»\23\142ç\+ \\135¼\23\158ç\135¿\23 ç\136\134\14\154ç\136\141\23¡ç\136\144\23¢ç\136\+ \\155\23£ç\136¨\23¤ç\136ª\13\92ç\136¬\23¦ç\136\173\23¥ç\136°\23§ç\136²\23\+ \¨ç\136µ\10]ç\136¶\15Cç\136º\16jç\136»\23©ç\136¼\23ªç\136½\125ç\136¾\10\+ \\34ç\136¿\23«ç\137\128\23¬ç\137\134\23\173ç\137\135\15\144ç\137\136\14Åç\+ \\137\139\23®ç\137\140\14vç\137\146\13+ç\137\152\23¯ç\137\153\6¥ç\137\155\+ \\7Íç\137\157\16Dç\137\159\164ç\137¡\6rç\137¢\17Sç\137§\15ñç\137©\15hç\+ \\137²\11µç\137´\23°ç\137¹\14\1ç\137½\8¡ç\137¾\23±ç\138\128\9\146ç\138\+ \\129\23³ç\138\130\23²ç\138\135\23´ç\138\146\23µç\138\150\23¶ç\138 \7\157\+ \ç\138¢\23·ç\138§\23¸ç\138¬\8¢ç\138¯\14Æç\138²\23ºç\138¶\113ç\138¹\23¹ç\+ \\139\130\7öç\139\131\23»ç\139\132\23½ç\139\134\23¼ç\139\142\23¾ç\139\144\+ \\8Ïç\139\146\23¿ç\139\151\8'ç\139\153\12\31ç\139\155\9]ç\139 \23Áç\139¡\+ \\23Âç\139¢\23Àç\139©\10kç\139¬\14\6ç\139\173\7÷ç\139·\23Äç\139¸\12Ëç\139\+ \¹\23Ãç\139¼\17Tç\139½\14\130ç\140\138\23Çç\140\150\23Éç\140\151\23Æç\140\+ \\155\16Rç\140\156\23Èç\140\157\23Êç\140\159\17\2ç\140¥\23Îç\140©\23Íç\+ \\140ª\13\22ç\140«\14Lç\140®\8£ç\140¯\23Ìç\140´\23Ëç\140¶\16\144ç\140·\16\+ \\145ç\140¾\23Ïç\140¿\6Nç\141\132\9Vç\141\133\10\2ç\141\142\23Ðç\141\143\+ \\23Ñç\141\151\23Óç\141£\10¢ç\141¨\23Õç\141ª\23Ôç\141°\23Öç\141²\6ìç\141µ\+ \\23Øç\141¸\23×ç\141º\23Úç\141»\23Ùç\142\132\8ºç\142\135\16æç\142\137\8\+ \\10ç\142\139\6dç\142\150\8(ç\142©\7_ç\142²\17&ç\142³\23Üç\142»\23Þç\143\+ \\128\23ßç\143\130\6\143ç\143\136\23Ûç\143\138\9Øç\143\141\13?ç\143\142\+ \\23Ýç\143\158\23âç\143 \10lç\143¥\23àç\143ª\8]ç\143\173\14Çç\143®\23áç\+ \\143±\23üç\143¸\23çç\143¾\8»ç\144\131\7Åç\144\133\23äç\144\134\16Ýç\144\+ \\137\16îç\144¢\12´ç\144¥\23æç\144²\23èç\144³\17\20ç\144´\8\21ç\144µ\14úç\+ \\144¶\14iç\144º\23éç\144¿\23ëç\145\129\23îç\145\149\23êç\145\153\23íç\+ \\145\154\8èç\145\155\6,ç\145\156\23ïç\145\158\11\144ç\145\159\23ìç\145 \+ \\17\26ç\145£\23òç\145¤\31\34ç\145©\23ðç\145ª\23óç\145¯\23åç\145°\23ñç\+ \\145³\9zç\145¶\23ôç\145¾\23õç\146\131\16Þç\146\139\23öç\146\158\23÷ç\146\+ \¢\23ãç\146§\23øç\146°\7Bç\146½\10#ç\147\138\23ùç\147\143\23úç\147\148\23\+ \ûç\147\156\6\26ç\147 \24\0ç\147¢\15\26ç\147£\24\1ç\147¦\7\34ç\147§\24\2ç\+ \\147©\24\3ç\147®\24\4ç\147°\24\6ç\147±\24\7ç\147²\24\5ç\147¶\152ç\147·\+ \\24\9ç\147¸\24\8ç\148\131\24\11ç\148\132\24\10ç\148\133\24\12ç\148\140\+ \\24\13ç\148\141\24\15ç\148\142\24\14ç\148\145\9Yç\148\147\24\17ç\148\149\+ \\24\16ç\148\152\7Cç\148\154\11rç\148\156\13\155ç\148\158\24\18ç\148\159\+ \\11¶ç\148£\9Ùç\148¥\6Yç\148¦\24\19ç\148¨\16°ç\148«\15¡ç\148¬\24\20ç\148°\+ \\13£ç\148±\16\146ç\148²\9\34ç\148³\11\92ç\148·\12êç\148¸\18rç\148º\13,ç\+ \\148»\6¦ç\148¼\24\21ç\149\132\24\22ç\149\134\24\27ç\149\137\24\25ç\149\+ \\138\24\24ç\149\139\21\128ç\149\140\6Åç\149\141\24\23ç\149\143\5Øç\149\+ \\145\14¨ç\149\148\14Èç\149\153\16ïç\149\154\24\28ç\149\155\24\26ç\149\+ \\156\12ûç\149\157\11¤ç\149 \14©ç\149¢\15\12ç\149¤\24\30ç\149¥\16êç\149¦\+ \\8lç\149§\24\31ç\149©\24\29ç\149ª\14Ôç\149«\24 ç\149\173\24!ç\149°\5Ùç\+ \\149³\114ç\149´\24&ç\149¶\24#ç\149·\14+ç\149¸\24\34ç\149¿\7\133ç\150\130\+ \\24)ç\150\134\24$ç\150\135\24%ç\150\137\24(ç\150\138\24'ç\150\139\15\4ç\+ \\150\142\12!ç\150\143\12 ç\150\145\7\158ç\150\148\24*ç\150\154\24+ç\150\+ \\157\24,ç\150£\24.ç\150¥\24-ç\150«\65ç\150±\246ç\150²\14æç\150³\240ç\150\+ \µ\242ç\150¸\244ç\150¹\11]ç\150¼\245ç\150½\243ç\150¾\10>ç\151\130\24/ç\+ \\151\131\241ç\151\133\15!ç\151\135\11\7ç\151\138\248ç\151\141\247ç\151\+ \\146\249ç\151\148\10$ç\151\149\9mç\151\152\13×ç\151\153\24:ç\151\155\13I\+ \ç\151\158\24<ç\151¢\16ßç\151£\24;ç\151©\12Iç\151°\24Bç\151²\24Dç\151³\24\+ \Eç\151´\12óç\151º\24Cç\151¼\24@ç\151¾\24=ç\151¿\24>ç\152\129\24Aç\152\+ \\137\24Hç\152\139\24Fç\152\141\24Gç\152\159\24Iç\152 \24Kç\152¡\24Lç\152\+ \¢\24Mç\152¤\24Nç\152§\24Jç\152°\24Pç\152´\24Oç\152»\24Qç\153\130\17\3ç\+ \\153\134\24Tç\153\135\24Rç\153\136\24Sç\153\140\7`ç\153\146\16|ç\153\150\+ \\15\136ç\153\152\24Vç\153\156\24Uç\153¡\24Wç\153¢\24Xç\153§\24\92ç\153¨\+ \\24Yç\153©\24Zç\153ª\24[ç\153¬\24]ç\153°\24^ç\153²\24_ç\153¶\24`ç\153¸\+ \\24aç\153º\14\173ç\153»\13¯ç\153¼\24bç\153½\14\146ç\153¾\15\19ç\154\128\+ \\24cç\154\131\24dç\154\132\13\137ç\154\134\6Æç\154\135\9#ç\154\136\24eç\+ \\154\139\24fç\154\142\24gç\154\144\9Èç\154\147\24iç\154\150\24hç\154\153\+ \\24jç\154\154\24kç\154®\14çç\154°\24lç\154´\24mç\154·\31\9ç\154¸\24nç\+ \\154¹\24oç\154º\24pç\154¿\9Íç\155\130\24qç\155\131\14uç\155\134\15þç\155\+ \\136\6-ç\155\138\66ç\155\141\24rç\155\146\24tç\155\150\24sç\155\151\13Ðç\+ \\155\155\11·ç\155\156\22\152ç\155\158\24uç\155\159\16?ç\155¡\24vç\155£\7\+ \Dç\155¤\14Õç\155¥\24wç\155§\24xç\155ª\24yç\155®\16Zç\155²\16Sç\155´\13<ç\+ \\155¸\12Jç\155»\24{ç\155¾\10Âç\156\129\11\8ç\156\132\24~ç\156\135\24}ç\+ \\156\136\24|ç\156\137\14ûç\156\139\7Eç\156\140\8§ç\156\155\24\132ç\156\+ \\158\24\129ç\156\159\11^ç\156 \160ç\156¤\24\128ç\156¥\24\130ç\156¦\24\+ \\131ç\156©\24\127ç\156·\24\133ç\156¸\24\134ç\156º\13-ç\156¼\7aç\157\128\+ \\13\5ç\157\135\24\135ç\157\154\24\136ç\157\155\24\139ç\157¡\11\135ç\157£\+ \\14\2ç\157¥\24\140ç\157¦\15òç\157¨\24\137ç\157«\24\138ç\157¹\24\143ç\157\+ \¾\24\142ç\157¿\24\141ç\158\139\24\145ç\158\142\24\144ç\158\145\24\146ç\+ \\158\158\24\148ç\158 \24\147ç\158¥\15\139ç\158¬\10µç\158\173\17\4ç\158°\+ \\24\149ç\158³\13õç\158¶\24\150ç\158¹\24\151ç\158»\24\155ç\158¼\24\153ç\+ \\158½\24\154ç\158¿\24\152ç\159\135\24\156ç\159\141\24\157ç\159\151\24\+ \\158ç\159\154\24\159ç\159\155\165ç\159\156\24 ç\159¢\16nç\159£\24¡ç\159¥\+ \\12íç\159§\14\138ç\159©\8)ç\159\173\12Úç\159®\24¢ç\159¯\7øç\159³\11Îç\+ \\159¼\24£ç \130\9{ç \140\24¤ç \146\24¥ç \148\8¤ç \149\9\147ç \24§ç ¥\13\+ \µç ¦\9\148ç §\7\173ç ²\15Ãç ´\14jç º\13¶ç ¿\9;ç¡\133\24©ç¡\157\11\9ç¡«\+ \\16ð硬\9$硯\8¥ç¡²\14¡ç¡´\24«ç¡¼\24\173ç¢\129\8éç¢\134\24¬ç¢\135\13tç¢\+ \\140\24¯ç¢\141\6Öç¢\142\24ªç¢\145\14èç¢\147\6\15ç¢\149\9ªç¢\151\17qç¢\+ \\154\24®ç¢£\24°ç¢§\15\137碩\11×碪\24²ç¢¯\24³ç¢µ\24±ç¢º\6í碼\24¹ç¢¾\24\+ \¸ç£\129\10%ç£\133\24ºç£\134\24µç£\138\24»ç£\139\24¶ç£\144\14Öç£\145\24´ç\+ \£\148\24·ç£\154\24Á磧\24À磨\16\1磬\24¼ç£¯\5é磴\24Ã磽\24Âç¤\129\11\+ \\10ç¤\135\24Äç¤\142\12\34ç¤\145\24Æç¤\146\24Åç¤\153\24Ç礦\24¦ç¤ª\24¨ç¤«\+ \\24É礬\24È示\10&礼\17'社\10Pç¥\128\24Êç¥\129\8Vç¥\135\7\159ç¥\136\7\+ \\134ç¥\137\10\3ç¥\144\16\147ç¥\147\24Ðç¥\149\24Ïç¥\150\12#ç¥\151\24Ìç¥\+ \\154\24Îç¥\157\10ªç¥\158\11_ç¥\159\24Íç¥ \24Ë祢\14I祥\11\11票\15\27ç¥\+ \\173\9\149祷\13Øç¥º\24Ñ祿\24Òç¦\128\24èç¦\129\8\22ç¦\132\17\92ç¦\133\+ \\12\20ç¦\138\24Óç¦\141\6\144ç¦\142\13uç¦\143\15_ç¦\157\24Ô禦\7Ú禧\24Õç\+ \¦ª\24×禮\24Øç¦°\14H禳\24Ù禹\24Ú禺\24Û禽\8\23禾\6\145禿\14\3ç§\128\+ \\10\135ç§\129\10\4ç§\137\24Üç§\139\10\136ç§\145\6\136ç§\146\15\34ç§\149\+ \\24Ýç§\152\14éç§\159\12$ç§¡\24àç§£\24á秤\14\137秦\11`ç§§\24Þç§©\13\1ç§\+ \¬\24ßç§°\11\12ç§»\5Úç¨\128\7\136ç¨\136\24âç¨\139\13vç¨\141\24ãç¨\142\11Å\+ \ç¨\148\16+ç¨\151\15\2ç¨\152\24äç¨\153\24åç¨\154\12ôç¨\156\17\5ç¨\159\24ç\+ \ç¨ \24æç¨®\10m稱\24é稲\5î稷\24ì稻\24ê稼\6\146稽\8m稾\24ë稿\9%ç©\+ \\128\9Rç©\130\15¤ç©\131\24íç©\134\15óç©\137\24ïç©\141\11Ïç©\142\6.ç©\143\+ \\6xç©\144\5ªç©\151\24îç©¡\24ðç©¢\24ñç©£\115ç©©\24òç©«\6îç©°\24ôç©´\8\138\+ \ç©¶\7Æç©¹\24õ空\83穽\24öç©¿\11úçª\129\14\11çª\131\11Þçª\132\9³çª\136\+ \\24÷çª\146\13\2çª\147\12Kçª\149\24ùçª\150\24ûçª\151\24øçª\152\24úçª\159\+ \\8A窩\24ü窪\8E窮\7Ç窯\16±çª°\24þ窶\25\0窺\6\13窿\25\3ç«\131\7\22ç\+ \«\132\25\2ç«\133\25\1ç«\135\25\5ç«\136\24ýç«\138\25\6ç«\139\16çç«\141\25\+ \\7ç«\143\25\8ç«\146\19rç«\147\25\10ç«\149\25\9ç«\153\25\11ç«\154\25\12ç«\+ \\156\16óç«\157\25\13ç«\159\29íç« \11\13ç«¡\25\14ç«¢\25\15ç«£\10¶ç«¥\13öç\+ \«¦\25\16竪\12Çç«\173\25\17端\12Ûç«°\25\18ç«¶\7ã竸\18\30竹\12ü竺\101\+ \ç«¿\7Fç¬\130\25\19ç¬\132\25 ç¬\134\25\22ç¬\136\7Èç¬\138\25\21ç¬\139\25\+ \\34ç¬\143\25\20ç¬\145\11\14ç¬\152\25\24ç¬\153\25\25ç¬\155\13\138ç¬\158\+ \\25\26ç¬ \6ý笥\11y符\15D笨\25\28第\12¦ç¬³\25\23笵\25\27笶\25\29笹\+ \\9¹ç\173\133\25$ç\173\134\15\13ç\173\136\14¤ç\173\137\13Ùç\173\139\8\24ç\+ \\173\140\25#ç\173\141\25!ç\173\143\14³ç\173\144\25\30ç\173\145\12ýç\173\+ \\146\13Ûç\173\148\13Úç\173\150\9´ç\173\157\256ç\173¥\25&ç\173§\25(ç\173¬\+ \\25+ç\173®\25,ç\173°\25)ç\173±\25*ç\173´\25'ç\173µ\25%ç\173º\25\31ç®\134\+ \\15\141ç®\135\6\147ç®\139\253ç®\141\250ç®\143\255ç®\146\254ç®\148\14\147\+ \ç®\149\16%ç®\151\9Úç®\152\25.ç®\153\257ç®\154\252ç®\156\251ç®\157\25-ç®\+ \\159\25/管\7G箪\12Üç®\173\11ûç®±\14 ç®´\25<箸\14¢ç¯\128\11ßç¯\129\259\+ \ç¯\132\14Íç¯\134\25=ç¯\135\15\145ç¯\137\12úç¯\139\258ç¯\140\25:ç¯\143\25\+ \;ç¯\157\25>ç¯ \10B篤\14\4篥\25C篦\25B篩\25?ç¯\173\17U篳\25H篶\25Lç\+ \¯·\25Iç°\128\25Eç°\135\25Fç°\141\25Kç°\145\25@ç°\146\18\147ç°\147\25Gç°\+ \\148\25Aç°\151\25Jç°\159\25Pç°¡\7Hç°£\25Mç°§\25Nç°ª\25Oç°«\25Rç°·\25Qç°¸\+ \\14ôç°½\25Sç°¾\17:ç°¿\15«ç±\128\25Xç±\131\25Uç±\140\25Tç±\141\11Ðç±\143\+ \\25Wç±\144\25Yç±\148\25Vç±\150\25]ç±\152\25Zç±\159\25[ç± \25D籤\25\92ç±\+ \¥\25^籬\25_ç±³\15\132ç±µ\25`ç±¾\16`ç²\129\8\12ç²\130\8Hç²\131\25aç²\137\+ \\15rç²\139\11\136ç²\141\16.ç²\144\25bç²\146\16ñç²\149\14\148ç²\151\12%ç²\+ \\152\14Sç²\155\10¬ç²\159\5¾ç²¡\25gç²¢\25e粤\25cç²¥\7\31ç²§\11\15粨\25h\+ \粫\25fç²\173\25dç²®\25lç²±\25kç²²\25jç²³\25iç²¹\25mç²½\25nç²¾\11¸ç³\128\+ \\25oç³\130\25qç³\133\25pç³\138\8Ðç³\142\12\23ç³\146\25sç³\150\13Üç³\152\+ \\25rç³\156\25tç³\158\15sç³\159\12Lç³ \9&ç³¢\25uç³§\17\6糯\25wç³²\25xç³´\+ \\25yç³¶\25z糸\10\5糺\25{ç³»\8nç³¾\7Êç´\128\7\137ç´\130\25\128ç´\132\16\+ \qç´\133\9'ç´\134\25|ç´\138\25\131ç´\139\16dç´\141\14[ç´\144\15\18ç´\148\+ \\10Ãç´\149\25\130ç´\151\10Qç´\152\9(ç´\153\10\6ç´\154\7Éç´\155\15tç´\156\+ \\25\129ç´ \12&ç´¡\15áç´¢\9µç´«\10\7ç´¬\13[ç´®\25\134ç´¯\17\29ç´°\9\151ç´\+ \²\25\135ç´³\11aç´µ\25\137ç´¹\11\16ç´º\9nç´¿\25\136çµ\130\10\137çµ\131\8¼\+ \çµ\132\12'çµ\133\25\132çµ\134\25\138çµ\139\25\133çµ\140\8oçµ\142\25\141ç\+ \µ\143\25\145çµ\144\8\139çµ\150\25\140çµ\155\25\149çµ\158\9)絡\16Íçµ¢\5º\+ \çµ£\25\146給\7Ë絨\25\143çµ®\25\144çµ±\13Ýçµ²\25\142çµ³\25\139çµµ\6Ççµ¶\+ \\11âçµ¹\8¦çµ½\25\151ç¶\137\25\148ç¶\143\25\150ç¶\147\25\147ç¶\153\8pç¶\+ \\154\12qç¶\155\25\152ç¶\156\12Nç¶\159\25¥ç¶¢\25¡ç¶£\25\155ç¶«\25\159綬\+ \\10xç¶\173\5Ûç¶®\25\154綯\25¢ç¶°\25¦ç¶±\9*ç¶²\16Tç¶´\13Tç¶µ\25\156綸\+ \\25¤ç¶º\25\153ç¶»\12Ýç¶½\25\158ç¶¾\5»ç¶¿\16Hç·\135\25\157ç·\138\8\25ç·\+ \\139\14êç·\143\12Mç·\145\17\14ç·\146\10Ïç·\149\25Îç·\152\25§ç·\154\11üç·\+ \\156\25£ç·\157\25¨ç·\158\25ªç· \13wç·¡\25\173ç·¤\25©ç·¨\15\146ç·©\7Iç·¬\+ \\16Iç·¯\5Üç·²\25¬ç·´\17;ç·»\25«ç¸\129\6Oç¸\132\14*ç¸\133\25®ç¸\137\25µç¸\+ \\138\25¯ç¸\139\25¶ç¸\146\25²ç¸\155\14\155ç¸\158\10Hç¸\159\25´ç¸¡\25±ç¸¢\+ \\25·ç¸£\25°ç¸¦\10£ç¸«\15Ä縮\10«ç¸±\25³ç¸²\25À縵\25»ç¸·\25¾ç¸¹\25¼ç¸º\+ \\25Á縻\25ºç¸½\25 績\11Ñç¹\129\14Éç¹\131\25½ç¹\134\25¸ç¹\138\12\0ç¹\139\+ \\8qç¹\141\10\138ç¹\148\11Dç¹\149\12\21ç¹\150\25Äç¹\153\25Æç¹\154\25Çç¹\+ \\157\25Ãç¹\158\25Å繦\25¹ç¹§\25Â繩\25Ê繪\25Éç¹\173\16\26ç¹°\8Jç¹¹\25Èç\+ \¹»\25Ìç¹¼\25Ëç¹½\25Ï繿\25Ñçº\130\9Ûçº\131\25Íçº\136\25Òçº\137\25Óçº\140\+ \\25Ôçº\142\25Úçº\143\13\154çº\144\25Öçº\146\25Õçº\147\25×çº\148\25Øçº\+ \\150\25Ùçº\155\25Ûçº\156\25Üç¼¶\7J缸\25Ý缺\25Þç½\133\25ßç½\140\25àç½\+ \\141\25áç½\142\25âç½\144\25ãç½\145\25äç½\148\25æç½\149\25åç½\152\25çç½\+ \\159\25èç½ \25éç½§\25ì罨\25ê罩\25ë罪\9\159罫\8rç½®\12õç½°\14±ç½²\10Ð\+ \ç½µ\14lç½·\14ë罸\25íç½¹\20ëç¾\130\25îç¾\131\25ðç¾\133\16Åç¾\134\25ïç¾\+ \\135\25òç¾\136\25ñç¾\138\16²ç¾\140\25óç¾\142\14üç¾\148\25ôç¾\154\25÷ç¾\+ \\157\25öç¾\158\25õç¾£\25øç¾¤\8Q羨\12\1義\7 ç¾®\25ü羯\25ùç¾²\25úç¾¶\25\+ \ý羸\25þç¾¹\25ûç¾½\6\8ç¿\129\6eç¿\133\26\0ç¿\134\26\1ç¿\138\26\2ç¿\140\+ \\16Âç¿\146\10\139ç¿\148\26\4ç¿\149\26\3ç¿ \11\137ç¿¡\26\5翦\26\6ç¿©\26\+ \\7ç¿«\7cç¿°\7K翳\26\8翹\26\9ç¿»\15ü翼\16Ãè\128\128\16³è\128\129\17Vè\+ \\128\131\9,è\128\132\26\12è\128\133\10Rè\128\134\26\11è\128\139\26\13è\+ \\128\140\10'è\128\144\12\143è\128\146\26\14è\128\149\9+è\128\151\16Uè\+ \\128\152\26\15è\128\153\26\16è\128\156\26\17è\128¡\26\18è\128¨\26\19è\+ \\128³\10(è\128¶\16kè\128»\26\21è\128½\12Þè\128¿\26\20è\129\134\26\23è\+ \\129\138\26\22è\129\146\26\24è\129\150\11¹è\129\152\26\25è\129\154\26\26\+ \è\129\158\15wè\129\159\26\27è\129¡\12Oè\129¢\26\28è\129¨\26\29è\129¯\17<\+ \è\129°\26 è\129²\26\31è\129³\26\30è\129´\13.è\129¶\26!è\129·\11Eè\129¹\+ \\26\34è\129½\26#è\129¾\17Wè\129¿\26$è\130\132\26%è\130\133\26'è\130\134\+ \\26&è\130\135\14£è\130\137\147è\130\139\17]è\130\140\14§è\130\147\26)è\+ \\130\150\11\17è\130\152\15\9è\130\154\26*è\130\155\26(è\130\157\7Lè\130¡\+ \\8Òè\130¢\10\8è\130¥\14ìè\130©\8¨è\130ª\15âè\130¬\26-è\130\173\26+è\130¯\+ \\9-è\130±\9.è\130²\5çè\130´\9¦è\130º\14xè\131\131\5Ýè\131\132\262è\131\+ \\134\12ßè\131\140\14wè\131\142\12\153è\131\150\264è\131\153\260è\131\154\+ \\263è\131\155\26.è\131\157\261è\131\158\15Åè\131¡\8Óè\131¤\5ûè\131¥\26/è\+ \\131¯\266è\131±\267è\131´\13÷è\131¸\7ùè\131¼\26Eè\131½\14\92è\132\130\10\+ \\9è\132\133\7úè\132\134\11Æè\132\135\17eè\132\136\16,è\132\137\265è\132\+ \\138\11Òè\132\154\7²è\132\155\268è\132£\26:è\132©\269è\132¯\26;è\132±\12\+ \Åè\132³\14]è\132¹\13/è\132¾\26Bè\133\134\26Aè\133\139\26<è\133\142\11tè\+ \\133\144\15Eè\133\145\26Dè\133\147\26Cè\133\148\9/è\133\149\17rè\133\159\+ \\26Tè\133¥\26Hè\133¦\26Iè\133«\10nè\133®\26Gè\133°\9Xè\133±\26Fè\133´\26\+ \Jè\133¸\130è\133¹\15`è\133º\12\2è\133¿\12\154è\134\128\26Nè\134\130\26Oè\+ \\134\131\26Kè\134\136\26Lè\134\138\26Mè\134\143\90è\134\147\26Uè\134\149\+ \\26Qè\134\154\15Fè\134\156\16\12è\134\157\15\7è\134 \26Pè\134£\26Sè\134¤\+ \\26Rè\134¨\15ãè\134©\26Vè\134°\26Wè\134³\12\22è\134µ\26Xè\134¸\26Zè\134º\+ \\26^è\134½\26[è\134¾\26Yè\134¿\14^è\135\128\26\92è\135\130\26]è\135\134\+ \\6pè\135\136\26dè\135\137\26_è\135\141\26`è\135\145\26aè\135\147\12_è\+ \\135\152\26cè\135\153\26bè\135\154\26eè\135\159\26fè\135 \26gè\135£\11bè\+ \\135¥\6§è\135§\26hè\135¨\17\21è\135ª\10)è\135\173\10\140è\135³\10\10è\+ \\135´\12öè\135º\26iè\135»\26jè\135¼\6\16è\135¾\26kè\136\129\26lè\136\130\+ \\26mè\136\133\26nè\136\135\26oè\136\136\7ûè\136\137\21hè\136\138\26pè\+ \\136\140\11ãè\136\141\26qè\136\142\10Iè\136\144\26rè\136\146\17®è\136\+ \\150\26sè\136\151\15\156è\136\152\7Zè\136\155\12\3è\136\156\10·è\136\158\+ \\15Qè\136\159\10\141è\136©\26tè\136ª\91è\136«\26uè\136¬\14Êè\136®\26\132\+ \è\136³\26wè\136µ\12\135è\136¶\14\149è\136·\8½è\136¸\26vè\136¹\12\4è\137\+ \\128\26xè\137\135\13xè\137\152\26zè\137\153\26yè\137\154\26|è\137\157\26\+ \{è\137\159\26}è\137¢\26\128è\137¤\26~è\137¦\7Mè\137¨\26\129è\137ª\26\130\+ \è\137«\26\131è\137®\9oè\137¯\17\7è\137±\26\133è\137²\11Fè\137¶\6Pè\137·\+ \\26\134è\137¸\26\135è\137¾\26\136è\138\139\5ðè\138\141\26\137è\138\146\+ \\26\138è\138\153\15Gè\138\157\10Eè\138\159\26\140è\138¥\6Èè\138¦\5°è\138\+ \«\26\139è\138¬\26\142è\138\173\14mè\138¯\11cè\138±\6\148è\138³\15Æè\138¸\+ \\8|è\138¹\8\26è\138»\26\141è\138½\6¨è\139\133\7!è\139\145\6Qè\139\146\26\+ \\146è\139\147\17(è\139\148\12\155è\139\151\15#è\139\153\26\158è\139\155\+ \\6\149è\139\156\26\156è\139\158\26\154è\139\159\26\145è\139¡\26\143è\139\+ \£\26\144è\139¥\10aè\139¦\8*è\139§\13\23è\139«\14\15è\139±\60è\139³\26\+ \\148è\139´\26\147è\139¹\26\153è\139º\26\149è\139»\26\152è\140\130\16Nè\+ \\140\131\26\151è\140\132\6\150è\140\133\7\29è\140\134\26\155è\140\137\26\+ \\157è\140\142\8sè\140\150\26¡è\140\151\26ªè\140\152\26«è\140\156\5©è\140\+ \£\26²è\140¨\5ïè\140«\26©è\140¯\26¨è\140±\26£è\140²\26¢è\140´\26 è\140µ\+ \\26\159è\140¶\13\3è\140¸\12¹è\140¹\26¥è\141\128\26¤è\141\133\26§è\141\+ \\137\12Pè\141\138\8tè\141\143\6 è\141\144\26¦è\141\146\92è\141\152\12Qè\+ \\141³\26¸è\141µ\26¹è\141·\6\151è\141»\6lè\141¼\26¶è\142\133\26¬è\142\135\+ \\26´è\142\137\26»è\142\138\26µè\142\142\26³è\142\147\26\150è\142\150\26±\+ \è\142\154\26\173è\142\158\7Nè\142\159\26¯è\142 \26ºè\142¢\26°è\142¨\26¼è\+ \\142ª\26®è\142«\14\156è\142±\16Éè\142µ\26·è\142½\26Íè\143\129\26Åè\143\+ \\133\11\155è\143\138\7¥è\143\140\8\27è\143\142\26Àè\143\147\6\153è\143\+ \\150\11\18è\143\152\26Ãè\143\156\9\152è\143\159\13°è\143 \26Èè\143©\15¬è\+ \\143«\26¿è\143¯\6\152è\143°\8Ôè\143±\15\8è\143²\26Éè\143´\26½è\143·\26Æè\+ \\143»\26Ðè\143½\26Áè\144\131\26Âè\144\132\13øè\144\135\26Çè\144\139\26Äè\+ \\144\140\15Çè\144\141\26Êè\144\142\5Þè\144\147\26¾è\144 \26Ìè\144¢\26Ëè\+ \\144©\14\139è\144ª\26Òè\144¬\26Ýè\144±\7\30è\144µ\26àè\144¸\26Îè\144¼\26\+ \Óè\144½\16Îè\145\134\26Üè\145\137\16´è\145\142\16èè\145\151\13\24è\145\+ \\155\7\11è\145¡\15Rè\145¢\26âè\145£\13ßè\145¦\5¯è\145©\26Ûè\145«\26×è\+ \\145¬\12Rè\145\173\26Ñè\145®\26Ùè\145¯\26Þè\145±\14Kè\145µ\5¨è\145·\26Öè\+ \\145¹\26ßè\145º\15Xè\146\130\26Úè\146\132\26Õè\146\139\11\19è\146\144\10\+ \\142è\146\148\10*è\146\153\16Vè\146\156\15&è\146\159\26åè\146¡\26îè\146\+ \\173\26Øè\146²\7\23è\146¸\116è\146¹\26ãè\146»\26èè\146¼\12Sè\146¿\26äè\+ \\147\129\26ëè\147\132\12þè\147\134\26ìè\147\137\16µè\147\138\26áè\147\+ \\139\6×è\147\141\26çè\147\144\26êè\147\145\16*è\147\150\26íè\147\153\26æ\+ \è\147\154\26éè\147¬\15Èè\147®\17@è\147´\26ñè\147¼\26øè\147¿\26ðè\148\128\+ \\10Aè\148\134\26Ïè\148\145\15\140è\148\147\16 è\148\148\26÷è\148\149\26ö\+ \è\148\151\26òè\148\152\26óè\148\154\6\21è\148\159\26õè\148¡\26ïè\148¦\13\+ \Sè\148¬\26ôè\148\173\5üè\148µ\12`è\148½\15\129è\149\128\26ùè\149\129\27\+ \\0è\149\131\14×è\149\136\26üè\149\137\11\20è\149\138\10Gè\149\139\27\2è\+ \\149\142\7üè\149\149\27\3è\149\151\15Yè\149\152\26ûè\149\154\26Ôè\149£\+ \\26úè\149¨\17nè\149©\13àè\149ª\15Sè\149\173\27\10è\149·\27\16è\149¾\27\+ \\17è\150\128\27\4è\150\132\14\150è\150\135\27\14è\150\136\27\6è\150\138\+ \\27\8è\150\144\27\18è\150\145\27\7è\150\148\27\11è\150\151\6Rè\150\153\+ \\14#è\150\155\27\12è\150\156\27\15è\150¤\27\5è\150¦\12\5è\150¨\27\9è\150\+ \©\9Æè\150ª\11dè\150«\8Oè\150¬\16rè\150®\16wè\150¯\10Òè\150¹\27\22è\150º\+ \\27\20è\151\129\17mè\151\137\27\19è\151\141\16Õè\151\143\27\21è\151\144\+ \\27\23è\151\149\27\24è\151\156\27\27è\151\157\27\25è\151¤\13áè\151¥\27\+ \\26è\151©\14Ëè\151ª\27\13è\151·\10Óè\151¹\27\28è\151º\27!è\151»\12Tè\151\+ \¾\27 è\152\130\27\1è\152\134\27\34è\152\135\12(è\152\138\27\29è\152\139\+ \\27\31è\152\147\27\30è\152\150\22\144è\152\151\22\129è\152\154\27$è\152¢\+ \\27#è\152\173\16Öè\152¯\24zè\152°\27%è\152¿\27&è\153\141\27'è\153\142\8Õ\+ \è\153\144\7³è\153\148\27)è\153\149\18<è\153\154\7Õè\153\156\16øè\153\158\+ \\81è\153\159\27*è\153§\27+è\153«\13\14è\153±\27,è\153¹\148è\153»\5¸è\154\+ \\138\6¡è\154\139\271è\154\140\272è\154\147\27-è\154\149\9Üè\154£\27.è\+ \\154¤\14aè\154©\27/è\154ª\270è\154«\27:è\154¯\274è\154°\277è\154¶\273è\+ \\155\132\275è\155\134\276è\155\135\10Vè\155\137\278è\155\139\12àè\155\+ \\141\8uè\155\142\6áè\155\148\27;è\155\153\6Þè\155\155\27Aè\155\158\27<è\+ \\155\159\27@è\155¤\14¸è\155©\27=è\155¬\27>è\155\173\15'è\155®\14Øè\155¯\+ \\27Bè\155¸\12»è\155¹\27Lè\155»\27Hè\155¾\6©è\156\128\27Fè\156\130\15Éè\+ \\156\131\27Gè\156\134\27Dè\156\136\27Eè\156\137\27Jè\156\138\27Mè\156\+ \\141\27Kè\156\145\27Iè\156\146\27Cè\156\152\12÷è\156\154\27Tè\156\156\16\+ \(è\156¥\27Rè\156©\27Sè\156´\27Nè\156·\27Pè\156»\27Qè\156¿\27Oè\157\137\+ \\11äè\157\139\17Xè\157\140\27Xè\157\142\27Yè\157\147\27_è\157\149\11Iè\+ \\157\151\27[è\157\153\27^è\157\159\27Vè\157 \27Uè\157£\27`è\157¦\6\154è\+ \\157¨\27\92è\157ª\27aè\157®\27]è\157´\27Zè\157¶\131è\157¸\27Wè\157¿\14\+ \\136è\158\130\27eè\158\141\16\154è\158\159\27dè\158¢\27cè\158«\27lè\158¯\+ \\27fè\158³\27nè\158º\16Æè\158»\27qè\158½\27hè\159\128\27iè\159\132\27mè\+ \\159\134\27pè\159\135\27oè\159\139\27gè\159\144\27jè\159\146\27{è\159 \+ \\27tè\159¯\27rè\159²\27sè\159¶\27xè\159·\27yè\159¹\6Éè\159»\7¡è\159¾\27w\+ \è \133\27bè \141\27vè \142\27zè \143\27uè \145\27|è \149\27~è \150\27}è \+ \¡\27\128è ¢\27\127è £\279è §\27\132è ±\27\129è ¶\27\130è ¹\27\131è »\27\+ \\133è¡\128\8\140è¡\130\27\135è¡\132\27\134è¡\134\10\143è¡\140\93è¡\141\+ \\22åè¡\146\27\136è¡\147\10°è¡\151\6Øè¡\153\27\137è¡\155\61è¡\157\11\21è¡\+ \\158\27\138è¡¡\94è¡¢\27\139è¡£\5ß表\15\28è¡«\27\140è¡°\11\138衲\27\147\+ \衵\27\144è¡·\13\15衽\27\145衾\27\142è¡¿\8\28è¢\129\27\141è¢\130\27\+ \\148è¢\136\8Uè¢\139\12\156è¢\141\27\154è¢\146\27\150è¢\150\12sè¢\151\27\+ \\149è¢\153\27\152è¢\158\27\143袢\27\153袤\27\155被\14í袮\27\151袰\+ \\27\156袱\27\158袴\8Ñ袵\27\146袷\5¿è¢¿\27\157è£\129\9\153è£\130\174è\+ \£\131\27\159è£\132\27 è£\133\12Uè£\143\16àè£\148\27¡è£\149\16\148è£\152\+ \\27¢è£\153\27£è£\156\15¢è£\157\27¤è£\159\9~裡\16á裨\27©è£²\27ªè£³\11\+ \\22裴\27¨è£¸\16Ç裹\27¥è£¼\27§è£½\11»è£¾\11\158è¤\130\27¦è¤\132\27«è¤\+ \\135\15aè¤\138\27\173è¤\140\27¬è¤\144\7\12è¤\146\15Êè¤\147\27®è¤\157\27º\+ \è¤\158\27°è¤¥\27±è¤ª\27²è¤«\27³è¤¶\27·è¤¸\27¸è¤»\27¶è¥\129\27´è¥\131\27¯\+ \è¥\132\27µè¥\140\27¹è¥\141\29µè¥\150\6fè¥\158\27¼è¥\159\8\29è¥ \27»è¥¤\+ \\27Á襦\27À襪\27Ãè¥\173\27Â襯\27Ä襲\10\144襴\27Å襷\27Æè¥¾\27Ç西\11\+ \¼è¦\129\16¶è¦\131\27Èè¦\134\15bè¦\135\14eè¦\136\27Éè¦\138\27Êè¦\139\8©è¦\+ \\143\7\139è¦\147\27Ëè¦\150\10\11è¦\151\14`è¦\152\27Ìè¦\154\6ï覡\27Í覦\+ \\27Ï覧\16×覩\27Î親\11e覬\27Ð覯\27Ñ覲\27Ò観\7O覺\27Ó覽\27Ô覿\27\+ \Õè§\128\27Öè§\146\6ðè§\154\27×è§\156\27Øè§\157\27Ùè§£\6°è§¦\11Gè§§\27Úè§\+ \´\27Û觸\27Üè¨\128\8¾è¨\130\13yè¨\131\27Ýè¨\136\8vè¨\138\11uè¨\140\27àè¨\+ \\142\13âè¨\144\27ßè¨\147\8Pè¨\150\27Þè¨\151\12µè¨\152\7\140è¨\155\27áè¨\+ \\157\27âè¨\159\11\23訣\8\141訥\27ã訪\15Ëè¨\173\11Ý許\7Ö訳\16s訴\12\+ \)訶\27ä診\11f註\13\16証\11\24è©\129\27åè©\134\27èè©\136\27éè©\144\9|\+ \è©\145\12\128è©\146\27çè©\148\11\25è©\149\15\29è©\155\27æè©\158\10\12è© \+ \\62è©¢\27íè©£\8w試\10\14è©©\10\13è©«\17l詬\27ìè©\173\27ëè©®\12\6è©°\7¬\+ \話\17b該\6Ù詳\11\26詼\27êèª\130\27ïèª\132\27ðèª\133\27îèª\135\8Öèª\+ \\137\16\159èª\140\10\15èª\141\14Fèª\145\27óèª\147\11¾èª\149\12áèª\152\16\+ \\149èª\154\27öèª\158\8êèª \11½èª¡\27ò誣\27÷誤\8ë誥\27ô誦\27õ誨\27ñè\+ \ª¬\11àèª\173\14\7誰\12Î課\6\155誹\14î誼\7¢èª¿\132è«\130\27úè«\132\27\+ \øè«\135\12ëè«\139\11¿è«\140\7Pè«\141\27ùè«\143\11zè«\146\17\8è«\150\17_è\+ \«\154\27ûè«\155\28\7è«\156\133è«\158\28\6è« \28\3è«¡\28\11è«¢\28\4諤\28\+ \\0諦\13zè«§\27þè««\27üè«\173\16\128è«®\10\16諱\28\1諳\27ýè«·\28\5諸\+ \\10Ô諺\8¿è«¾\12¸è¬\128\15äè¬\129\69è¬\130\5àè¬\132\13ãè¬\135\28\9è¬\140\+ \\28\8è¬\142\14$è¬\144\28\13è¬\148\28\2è¬\150\28\12è¬\151\28\14è¬\153\8ªè\+ \¬\154\28\10è¬\155\95è¬\157\10Sè¬ \28\15謡\16·è¬¦\28\18謨\28\21謫\28\+ \\19謬\15\20謳\28\16謹\8\30謾\28\20è\173\129\28\22è\173\137\28\26è\+ \\173\140\28\23è\173\142\28\25è\173\143\28\24è\173\150\28\27è\173\152\10/\+ \è\173\154\28\29è\173\155\28\28è\173\156\15Hè\173\159\28\31è\173¦\8xè\173\+ \«\28\30è\173¬\28 è\173¯\28!è\173°\7£è\173±\25ÿè\173²\117è\173´\28\34è\+ \\173·\8ìè\173½\28#è®\128\28$è®\131\9Ýè®\138\21\140è®\140\28%è®\142\28&è®\+ \\144\10\145è®\146\28'è®\147\28(è®\150\28)è®\153\28*è®\154\28+è°·\12Êè°º\+ \\28,è°¿\28.è±\129\28-è±\134\13äè±\136\28/è±\138\15Ìè±\140\280è±\142\281è\+ \±\144\282è±\149\283è±\154\14\24象\11\27è±¢\284豪\9K豫\17¬è±¬\285豸\+ \\286è±¹\15\30豺\287è±¼\28?è²\130\288è²\133\28:è²\137\289è²\138\28;è²\+ \\140\15åè²\141\28<è²\142\28=è²\148\28>è²\152\28@è²\157\6Ìè²\158\13eè² \+ \\15I財\9 è²¢\96è²§\15.貨\6\157販\14Ì貪\28C貫\7Q責\11Óè²\173\28Bè²®\+ \\28G貯\13\25è²°\16aè²²\28Eè²³\28Fè²´\7\141è²¶\28Hè²·\14\131貸\12\157è²\+ \»\14ïè²¼\13\156è²½\28D貿\15æè³\128\6ªè³\129\28Jè³\130\17Gè³\131\13@è³\+ \\132\17dè³\135\10\17è³\136\28Iè³\138\12oè³\141\28Zè³\142\12\7è³\145\146è\+ \³\147\15/è³\154\28Mè³\155\9Þè³\156\10\18è³\158\11\28è³ \14\133è³¢\8«è³£\+ \\28L賤\28K賦\15J質\10?è³\173\13±è³º\28Oè³»\28Pè³¼\97è³½\28Nè´\132\28Q\+ \è´\133\28Rè´\135\28Tè´\136\12aè´\138\28Sè´\139\7dè´\141\28Vè´\143\28Uè´\+ \\144\28Wè´\147\28Yè´\148\28[è´\150\28\92赤\11Ô赦\10Mèµ§\28]赫\6ñèµ\+ \\173\28^èµ°\12Vèµ±\28_èµ³\28`èµ´\15Kèµ·\7\142è¶\129\28aè¶\133\134è¶\138\+ \\6:è¶\153\28bè¶£\10o趨\11\150è¶³\12k趺\28eè¶¾\28dè·\130\28cè·\139\28kè\+ \·\140\28iè·\143\28fè·\150\28hè·\154\28gè·\155\28jè·\157\7×è·\159\28nè·¡\+ \\11Õè·£\28oè·¨\8×è·ª\28lè·«\28mè·¯\17Hè·³\135è·µ\12\8è·¼\28pè·¿\28sè¸\+ \\136\28qè¸\137\28rè¸\138\16¸è¸\143\13åè¸\144\28vè¸\157\28tè¸\158\28uè¸\+ \\159\28w踪\28\136踰\28z踴\28{踵\28yè¹\130\28xè¹\132\13{è¹\135\28\128\+ \è¹\136\28\132è¹\137\28\129è¹\138\28|è¹\140\28\130è¹\144\28\131è¹\149\28\+ \\138è¹\153\28\133è¹\159\11Öè¹ \28\135è¹£\28\137蹤\28\134è¹²\28\140è¹´\+ \\10\146è¹¶\28\139è¹¼\28\141èº\129\28\142èº\132\28\145èº\133\28\144èº\135\+ \\28\143èº\138\28\147èº\139\28\146èº\141\16tèº\145\28\149èº\147\28\148èº\+ \\148\28\150èº\153\28\151躡\28\153躪\28\152身\11g躬\28\154躯\8+躰\+ \\28\155躱\28\157躾\28\158è»\133\28\159è»\134\28\156è»\136\28 è»\138\10\+ \Tè»\139\28¡è»\140\7\143è»\141\8Rè»\146\8¬è»\155\28¢è»\159\14.転\13\157è\+ \»£\28£è»«\28¦è»¸\102è»»\28¥è»¼\28¤è»½\8y軾\28§è¼\131\6òè¼\133\28©è¼\137\+ \\9\154è¼\138\28¨è¼\140\28±è¼\146\28«è¼\147\28\173è¼\148\15£è¼\149\28ªè¼\+ \\153\28¬è¼\155\28°è¼\156\28®è¼\157\7\144è¼\159\28¯è¼¦\28²è¼©\14y輪\17\+ \\22輯\10\147è¼³\28³è¼¸\16\129è¼¹\28µè¼»\28´è¼¾\28¸è¼¿\16 è½\130\28·è½\+ \\132\7\13è½\133\28¶è½\134\28»è½\137\28ºè½\140\28¹è½\141\13\145è½\142\28¼\+ \è½\151\28½è½\156\28¾è½\159\9L轡\8Dè½¢\28Àè½£\28Á轤\28Âè¾\155\11hè¾\156\+ \\28Ãè¾\158\10+è¾\159\28Äè¾£\28Åè¾§\18_辨\18^è¾\173\28Æè¾®\25Ð辯\28Çè¾°\+ \\12Ãè¾±\11Jè¾²\14_è¾·\28È辺\15\147è¾»\13Rè¾¼\9^辿\12Èè¿\130\6\9è¿\132\+ \\16\24è¿\133\11vè¿\142\8}è¿\145\8\31è¿\148\15\148è¿\154\28Éè¿¢\28Ëè¿¥\28\+ \Ê迦\6\158è¿©\144迪\28Ìè¿«\14\151è¿\173\13\146迯\28Íè¿°\10±è¿´\28Ïè¿·\+ \\16@迸\28Þ迹\28Ñ迺\28Ò追\13Gé\128\128\12\158é\128\129\12Wé\128\131\+ \\13æé\128\133\28Ðé\128\134\7´é\128\139\28Ùé\128\141\28Öé\128\142\28ãé\+ \\128\143\13çé\128\144\13\0é\128\145\28Óé\128\147\13|é\128\148\13²é\128\+ \\149\28Ôé\128\150\28Øé\128\151\11\128é\128\153\14\135é\128\154\13Jé\128\+ \\157\11Àé\128\158\28×é\128\159\12lé\128 \12bé\128¡\28Õé\128¢\5§é\128£\17\+ \Aé\128§\28Úé\128®\12\159é\128±\10\148é\128²\11ié\128µ\28Üé\128¶\28Ûé\128\+ \¸\5íé\128¹\28Ýé\128¼\15\14é\128¾\28åé\129\129\14\25é\129\130\11\139é\129\+ \\133\12øé\129\135\86é\129\137\28äé\129\138\16\150é\129\139\6\30é\129\141\+ \\15\149é\129\142\6\159é\129\143\28ßé\129\144\28àé\129\145\28áé\129\146\+ \\28âé\129\147\13ùé\129\148\12Âé\129\149\5áé\129\150\28æé\129\152\28çé\+ \\129\153\31!é\129\156\12{é\129\158\28èé\129 \6Sé\129¡\12+é\129£\8\173é\+ \\129¥\16¹é\129¨\28éé\129©\13\139é\129\173\12Xé\129®\10Ué\129¯\28êé\129²\+ \\28íé\129µ\10Åé\129¶\28ëé\129·\12\10é\129¸\12\9é\129º\5âé\129¼\17\9é\129\+ \½\28ïé\129¿\14ðé\130\128\28ñé\130\129\28ðé\130\130\28îé\130\131\25\4é\+ \\130\132\7Ré\130\135\28Îé\130\137\28óé\130\138\28òé\130\143\28ôé\130\145\+ \\16\151é\130£\14\31é\130¦\15Íé\130¨\28õé\130ª\10Wé\130¯\28öé\130±\28÷é\+ \\130µ\28øé\130¸\13\128é\131\129\5èé\131\138\98é\131\142\17Yé\131\155\28ü\+ \é\131¡\8Sé\131¢\28ùé\131¤\28úé\131¨\15Té\131\173\6óé\131µ\16\152é\131·\7\+ \ýé\131½\13³é\132\130\28ýé\132\146\28þé\132\153\28ÿé\132\173\13\129é\132°\+ \\29\1é\132²\29\0é\133\137\14\17é\133\138\29\2é\133\139\10\149é\133\140\+ \\10^é\133\141\14zé\133\142\13\17é\133\146\10pé\133\148\11\140é\133\150\+ \\29\3é\133\152\29\4é\133¢\11|é\133£\29\5é\133¥\29\6é\133©\29\7é\133ª\16Ï\+ \é\133¬\10\150é\133²\29\9é\133³\29\8é\133µ\99é\133·\9Sé\133¸\9ßé\134\130\+ \\29\12é\134\135\10Æé\134\137\29\11é\134\139\29\10é\134\141\12§é\134\144\+ \\8íé\134\146\11Áé\134\151\14®é\134\156\10\152é\134¢\29\13é\134¤\11\29é\+ \\134ª\29\16é\134«\29\14é\134¯\29\15é\134´\29\18é\134µ\29\17é\134¸\118é\+ \\134º\29\19é\135\128\29\20é\135\129\29\21é\135\134\14Îé\135\135\9\145é\+ \\135\136\10_é\135\137\29\22é\135\139\29\23é\135\140\16âé\135\141\10¤é\+ \\135\142\16lé\135\143\17\10é\135\144\29\24é\135\145\8 é\135\150\29\25é\+ \\135\152\13\130é\135\155\29\28é\135\156\7\24é\135\157\11jé\135\159\29\26\+ \é\135¡\29\27é\135£\13^é\135¦\15ôé\135§\8:é\135µ\29\30é\135¶\29\31é\135¼\+ \\29\29é\135¿\29!é\136\141\14\29é\136\142\6âé\136\145\29%é\136\148\29\34é\+ \\136\149\29$é\136\158\29 é\136©\29né\136¬\29#é\136´\17)é\136·\8Øé\136¿\+ \\29-é\137\132\13\147é\137\133\29(é\137\136\29+é\137\137\29)é\137\139\29.\+ \é\137\144\29/é\137\151\29'é\137\154\294é\137\155\6Té\137\158\29&é\137¢\+ \\14«é\137¤\29*é\137¦\11\30é\137±\9:é\137¾\15çé\138\128\8\34é\138\131\10¥\+ \é\138\133\13úé\138\145\12\12é\138\147\292é\138\149\29,é\138\150\291é\138\+ \\152\16Aé\138\154\136é\138\155\293é\138\156\290é\138\173\12\11é\138·\297\+ \é\138¹\296é\139\143\295é\139\146\15Îé\139¤\10Ûé\139©\298é\139ª\15\157é\+ \\139\173\63é\139²\15%é\139³\13\18é\139¸\7Øé\139º\29:é\139¼\9<é\140\134\9\+ \Ëé\140\143\299é\140\144\11\141é\140\152\11\142é\140\153\29@é\140\154\29B\+ \é\140 \119é\140¢\29Aé\140£\29Cé\140¦\8\17é\140¨\15$é\140«\10`é\140¬\17Bé\+ \\140®\29<é\140¯\9¶é\140²\17^é\140µ\29Eé\140º\29Dé\140»\29Fé\141\132\29;é\+ \\141\139\14'é\141\141\13´é\141\148\13Ué\141\150\29Ké\141\155\12âé\141\+ \\156\29Gé\141 \29Hé\141¬\8Lé\141®\29Jé\141µ\8®é\141¼\29Ié\141¾\11\31é\+ \\142\140\7\25é\142\148\29Oé\142\150\9}é\142\151\12Yé\142\154\13Hé\142§\6\+ \Úé\142¬\29Mé\142\173\29Né\142®\13Aé\142°\29Lé\142¹\29Pé\143\131\29Vé\143\+ \\136\29Yé\143\144\29Xé\143\145\13\140é\143\150\29Qé\143\151\29Ré\143\152\+ \\29Ué\143\157\29Wé\143¡\7þé\143¤\29Zé\143¥\29Té\143¨\29Sé\144\131\29^é\+ \\144\135\29_é\144\144\29`é\144\147\29]é\144\148\29\92é\144\152\11 é\144\+ \\153\13èé\144\154\29[é\144¡\29dé\144«\29bé\144µ\29cé\144¶\29aé\144¸\12¶é\+ \\144º\29eé\145\129\29fé\145\132\29hé\145\145\7Sé\145\146\29gé\145\147\16\+ \xé\145\154\29sé\145\155\29ié\145\158\29lé\145 \29jé\145¢\29ké\145ª\29mé\+ \\145°\29oé\145µ\29pé\145·\29qé\145¼\29té\145½\29ré\145¾\29ué\145¿\29wé\+ \\146\129\29vé\149·\137é\150\128\16eé\150\130\29xé\150\131\12\13é\150\135\+ \\29yé\150\137\15\130é\150\138\29zé\150\139\6Êé\150\143\6\27é\150\145\7Ué\+ \\150\147\7Té\150\148\29{é\150\150\29|é\150\152\29}é\150\153\29~é\150 \29\+ \\128é\150¢\7Vé\150£\6ôé\150¤\9=é\150¥\14´é\150§\29\130é\150¨\29\129é\150\+ \\173\29\131é\150²\6;é\150¹\29\134é\150»\29\133é\150¼\29\132é\150¾\29\135\+ \é\151\131\29\138é\151\135\5Åé\151\138\29\136é\151\140\29\140é\151\141\29\+ \\139é\151\148\29\142é\151\149\29\141é\151\150\29\143é\151\152\13ìé\151\+ \\156\29\144é\151¡\29\145é\151¢\29\147é\151¥\29\146é\152\156\15Lé\152¡\29\+ \\148é\152¨\29\149é\152ª\9£é\152®\29\150é\152¯\29\151é\152²\15èé\152»\12*\+ \é\152¿\5¢é\153\128\12\137é\153\130\29\152é\153\132\15Mé\153\139\29\155é\+ \\153\140\29\153é\153\141\9>é\153\143\29\154é\153\144\8Àé\153\155\15\131é\+ \\153\156\29\157é\153\157\29\159é\153\158\29\158é\153\159\29 é\153¢\6\0é\+ \\153£\11wé\153¤\10Üé\153¥\7Wé\153¦\29¡é\153ª\14\134é\153¬\29£é\153°\6\1é\+ \\153²\29¢é\153³\13Bé\153µ\17\11é\153¶\13éé\153·\29\156é\153¸\16äé\153º\8\+ \¯é\153½\16ºé\154\133\87é\154\134\16òé\154\136\8Gé\154\138\12 é\154\139\+ \\26@é\154\141\29¤é\154\142\6Ëé\154\143\11\143é\154\148\6õé\154\149\29¦é\+ \\154\151\29§é\154\152\29¥é\154\153\8\132é\154\155\9\155é\154\156\11!é\+ \\154 \6\2é\154£\17\23é\154§\29©é\154¨\28ìé\154ª\29¨é\154°\29¬é\154±\29ªé\+ \\154²\29«é\154´\29\173é\154¶\29®é\154·\17*é\154¸\29¯é\154¹\29°é\154»\11Ç\+ \é\154¼\14¹é\155\128\11\157é\155\129\7eé\155\132\16\153é\155\133\6«é\155\+ \\134\10\151é\155\135\8Ùé\155\137\29³é\155\139\29²é\155\140\10\19é\155\+ \\141\29´é\155\142\29±é\155\145\9Çé\155\149\29¸é\155\150\27ké\155\153\18\+ \\148é\155\155\11\151é\155\156\29¶é\155¢\16ãé\155£\14/é\155¨\6\10é\155ª\+ \\11áé\155«\104é\155°\15ué\155²\6\31é\155¶\17+é\155·\16Ëé\155¹\29¹é\155»\+ \\13¤é\156\128\10yé\156\132\29ºé\156\134\29»é\156\135\11ké\156\136\29¼é\+ \\156\138\17,é\156\141\29·é\156\142\29¾é\156\143\29Àé\156\145\29¿é\156\+ \\147\29½é\156\150\29Áé\156\153\29Âé\156\156\12Zé\156\158\6 é\156¤\29Ãé\+ \\156§\166é\156ª\29Äé\156°\29Åé\156²\17Ié\156¸\21Ðé\156¹\29Æé\156½\29Çé\+ \\156¾\29Èé\157\130\29Ìé\157\132\29Éé\157\134\29Êé\157\136\29Ëé\157\137\+ \\29Íé\157\146\11Âé\157\150\16ué\157\153\11Ãé\157\156\29Îé\157\158\14ñé\+ \\157 \29Ïé\157¡\30òé\157¢\16Jé\157¤\29Ðé\157¦\29Ñé\157¨\29Òé\157©\6öé\+ \\157«\29Ôé\157\173\11xé\157±\29Õé\157´\8Cé\157¹\29Öé\157º\29Úé\157¼\29Øé\+ \\158\129\29Ùé\158\132\7\19é\158\133\29×é\158\134\29Ûé\158\139\29Üé\158\+ \\141\5Æé\158\143\29Ýé\158\144\29Þé\158\152\11\34é\158\156\29ßé\158 \7¦é\+ \\158£\29âé\158¦\29áé\158¨\29àé\158«\28\17é\158\173\15\154é\158³\29ãé\158\+ \´\29äé\159\131\29åé\159\134\29æé\159\136\29çé\159\139\29èé\159\147\7Xé\+ \\159\156\29éé\159\173\29êé\159®\14Bé\159²\29ìé\159³\6yé\159µ\29ïé\159¶\+ \\29îé\159»\6\3é\159¿\7ÿé \129\15\133é \130\138é \131\9`é \133\9@é \134\+ \\10Çé \136\11{é \140\29ñé \143\29ðé \144\16¡é \145\7fé \146\14Ðé \147\14\+ \\26é \151\11\156é \152\17\12é \154\8zé ¡\29ôé ¤\29óé ¬\15êé \173\13êé ´\+ \\6/é ·\29õé ¸\29òé »\150é ¼\16Êé ½\29öé¡\134\29÷é¡\139\29ùé¡\140\12¨é¡\+ \\141\6úé¡\142\6ûé¡\143\29øé¡\148\7gé¡\149\8°é¡\152\7hé¡\155\13\158é¡\158\+ \\17\30é¡§\8Úé¡«\29ú顯\29ûé¡°\29ü顱\30\0顳\30\2é¡´\30\1風\15W颪\30\3\+ \颯\30\4颱\30\5颶\30\6é£\131\30\8é£\132\30\7é£\134\30\9é£\155\14òé£\+ \\156\26\10é£\159\11H飢\7\145飩\30\10飫\30\11é£\173\18j飮\22\154飯\+ \\14Ñ飲\5ù飴\5¹é£¼\10\20飽\15Ï飾\11<é¤\131\30\12é¤\133\16]é¤\137\30\+ \\13é¤\138\16»é¤\140\6!é¤\144\9àé¤\146\30\14é¤\147\6¬é¤\148\30\15é¤\152\+ \\30\16é¤\157\30\18é¤\158\30\19é¤ \30\21餡\30\17餤\30\20館\7Y餬\30\22\+ \餮\30\23餽\30\24餾\30\25é¥\130\30\26é¥\133\30\28é¥\137\30\27é¥\139\30\+ \\30é¥\140\30!é¥\144\30\29é¥\145\30\31é¥\146\30 é¥\149\30\34é¥\151\8\0é¦\+ \\150\10qé¦\151\30#é¦\152\30$é¦\153\9A馥\30%馨\6Ý馬\14né¦\173\30&馮\+ \\30'馳\12ù馴\14)馼\30(é§\129\14\157é§\132\12\138é§\133\67é§\134\8,é§\+ \\136\8-é§\144\13\19é§\145\30-é§\146\8.é§\149\6\173é§\152\30,é§\155\30*é§\+ \\157\30+é§\159\30)é§¢\307é§\173\30.é§®\30/é§±\300é§²\301駸\303é§»\302é§\+ \¿\10¸é¨\129\304é¨\133\306é¨\142\7\146é¨\143\305é¨\146\12[é¨\147\8±é¨\153\+ \\308騨\12\139騫\309騰\13ë騷\30:騾\30@é©\128\30=é©\130\30<é©\131\30>\+ \é©\133\30;é©\141\30Bé©\149\30Aé©\151\30Dé©\154\8\1é©\155\30Cé©\159\30Eé©\+ \¢\30F驤\30Hé©¥\30Gé©©\30I驪\30Ké©«\30J骨\9\92éª\173\30L骰\30M骸\6Ûé\+ \ª¼\30Né«\128\30Oé«\132\11\145é«\143\30Pé«\145\30Qé«\147\30Ré«\148\30Sé«\+ \\152\9Bé«\158\30Té«\159\30Ué«¢\30Vé«£\30W髦\30X髪\14¯é««\30Zé«\173\15\+ \\5é«®\30[髯\30Y髱\30]é«´\30\92é«·\30^é«»\30_é¬\134\30`é¬\152\30aé¬\154\+ \\30bé¬\159\30c鬢\30d鬣\30e鬥\30f鬧\30g鬨\30h鬩\30i鬪\30j鬮\30ké¬\+ \¯\30l鬱\22\148鬲\30m鬻\25v鬼\7\147é\173\129\6Àé\173\130\9pé\173\131\+ \\30oé\173\132\30né\173\133\16#é\173\141\30qé\173\142\30ré\173\143\30pé\+ \\173\145\30sé\173\148\16\2é\173\152\30té\173\154\7Ûé\173¯\17Dé\173´\30ué\+ \®\131\30wé®\142\5¼é®\145\30xé®\146\15ié®\147\30vé®\150\30yé®\151\30zé®\+ \\159\30{é® \30|鮨\30}鮪\16\14鮫\9Ìé®\173\9¸é®®\12\14é®´\30~鮹\30\129\+ \é¯\128\30\127é¯\134\30\130é¯\137\8ïé¯\138\30\128é¯\143\30\131é¯\145\30\+ \\132é¯\146\30\133é¯\148\30\137é¯\150\9Éé¯\155\12¢é¯¡\30\138鯢\30\135鯣\+ \\30\134鯤\30\136鯨\8~鯰\30\142鯱\30\141鯲\30\140鯵\5±é°\132\30\152\+ \é°\134\30\148é°\136\30\149é°\137\30\145é°\138\30\151é°\140\30\147é°\141\+ \\7\2é°\144\17ké°\146\30\150é°\147\30\146é°\148\30\144é°\149\30\143é°\155\+ \\30\154é°¡\30\157é°¤\30\156é°¥\30\155é°\173\15(é°®\30\153é°¯\5ñé°°\30\+ \\158é°²\30 é°¹\7\15é°º\30\139é°»\6\22é°¾\30¢é±\134\30¡é±\135\30\159é±\+ \\136\12Ìé±\146\16\16é±\151\17\24é±\154\30£é± \30¤é±§\30¥é±¶\30¦é±¸\30§é³\+ \¥\139é³§\30¨é³©\14µé³«\30\173鳬\30©é³°\30ªé³³\15Ðé³´\16Bé³¶\14\14é´\131\+ \\30®é´\134\30¯é´\135\13üé´\136\30¬é´\137\30«é´\142\6hé´\146\30·é´\149\30\+ \¶é´\155\6Ué´\159\30´é´£\30³é´¦\30±é´¨\7\27é´ª\30°é´«\100é´¬\6gé´»\9Cé´¾\+ \\30ºé´¿\30¹éµ\129\30¸éµ\132\30µéµ\134\30»éµ\136\30¼éµ\144\30Äéµ\145\30Ãé\+ \µ\153\30Åéµ\156\6\12éµ\157\30Àéµ\158\30Áéµ \9T鵡\167鵤\30Â鵬\15Ñ鵯\+ \\30Êéµ²\30Æéµº\30Ëé¶\135\30Èé¶\137\30Çé¶\143\8{é¶\154\30Ì鶤\30Íé¶©\30Îé\+ \¶«\30É鶯\30²é¶²\30Ïé¶´\13_鶸\30Ó鶺\30Ôé¶»\30Òé·\129\30Ñé·\130\30×é·\+ \\132\30Ðé·\134\30Õé·\143\30Öé·\147\30Ùé·\153\30Øé·¦\30Ûé·\173\30Üé·¯\30Ý\+ \é·²\17hé·¸\30Úé·¹\12©é·º\9«é·½\30Þé¸\154\30ßé¸\155\30àé¸\158\30áé¹µ\30âé\+ \¹¸\8²é¹¹\30ãé¹½\30ä鹿\10-éº\129\30åéº\136\30æéº\139\30çéº\140\30èéº\145\+ \\30ëéº\146\30ééº\147\17[éº\149\30êéº\151\17-éº\157\30ìéº\159\17\25麥\30\+ \í麦\14\158麩\30î麪\30ðéº\173\30ñ麸\30ï麹\9M麺\16K麻\16\3麼\205éº\+ \¾\22À麿\16\27é»\132\6ié»\140\30óé»\141\7¯é»\142\30ôé»\143\30õé»\144\30ö\+ \é»\146\9Ué»\148\30÷é»\152\23Òé»\153\16Yé»\155\12¡é»\156\30øé»\157\30úé»\+ \\158\30ùé» \30û黥\30ü黨\30ý黯\30þé»´\31\0é»¶\31\1é»·\31\2黹\31\3é»»\+ \\31\4黼\31\5黽\31\6é¼\135\31\7é¼\136\31\8é¼\142\13\131é¼\147\8Ûé¼\149\+ \\31\10é¼ \12,鼡\31\11鼬\31\12é¼»\15\0é¼¾\31\13é½\138\31\14é½\139\24Öé½\+ \\142\28Xé½\143\29ëé½\146\31\15é½\148\31\16é½\159\31\18é½ \31\19齡\31\20\+ \é½¢\17.é½£\31\17齦\31\21é½§\31\22齪\31\24齬\31\23é½²\31\26é½¶\31\27é½\+ \·\31\25é¾\141\16ôé¾\149\31\28é¾\156\31\29é¾\157\24óé¾ \31\30ï¼\129\0\9ï¼\+ \\131\0Tï¼\132\0Pï¼\133\0Sï¼\134\0Uï¼\136\0)ï¼\137\0*ï¼\138\0Vï¼\139\0;ï¼\+ \\140\0\3ï¼\142\0\4ï¼\143\0\30ï¼\144\0Ïï¼\145\0Ðï¼\146\0Ñï¼\147\0Òï¼\148\+ \\0Óï¼\149\0Ôï¼\150\0Õï¼\151\0Öï¼\152\0×ï¼\153\0Øï¼\154\0\6ï¼\155\0\7ï¼\+ \\156\0Cï¼\157\0Aï¼\158\0Dï¼\159\0\8ï¼ \0WA\0àï¼¢\0áï¼£\0âD\0ãï¼¥\0äï\+ \¼¦\0åï¼§\0æï¼¨\0çI\0èJ\0éK\0êL\0ëï¼\173\0ìï¼®\0íO\0îï¼°\0ïï¼±\+ \\0ðï¼²\0ñï¼³\0òï¼´\0óï¼µ\0ôï¼¶\0õï¼·\0öX\0÷ï¼¹\0øï¼º\0ùï¼»\0-ï¼¼\0\31ï\+ \¼½\0.ï¼¾\0\15_\0\17ï½\128\0\13ï½\129\1\1ï½\130\1\2ï½\131\1\3ï½\132\1\4\+ \ï½\133\1\5ï½\134\1\6ï½\135\1\7ï½\136\1\8ï½\137\1\9ï½\138\1\10ï½\139\1\11\+ \ï½\140\1\12ï½\141\1\13ï½\142\1\14ï½\143\1\15ï½\144\1\16ï½\145\1\17ï½\146\+ \\1\18ï½\147\1\19ï½\148\1\20ï½\149\1\21ï½\150\1\22ï½\151\1\23ï½\152\1\24ï\+ \½\153\1\25ï½\154\1\26ï½\155\0/ï½\156\0\34ï½\157\00ï¿£\0\16ï¿¥\0O"++{-+-- Compile with:+-- stack ghc --package iconv --package bytestring --package containers --package binary -- <name>.hs++module Main where++import Codec.Text.IConv (convertStrictly)+import Data.Binary (encode)+import Data.Bits (shiftL, shiftR, (.&.))+import qualified Data.ByteString.Lazy as BL+import Data.Char (chr, isDigit)+import Data.List (intercalate)+import qualified Data.Map as M+import Data.Maybe (mapMaybe)+import Data.Word (Word16, Word32, Word8)++unicodeToKanji :: Word32 -> Maybe (Char, Word16)+unicodeToKanji cw =+ case convertStrictly "UTF-32BE" "Shift_JIS" cb of+ Left kc+ | BL.length kc == 2 ->+ case fromIntegral (kc `BL.index` 0) `shiftL` 8 + fromIntegral (kc `BL.index` 1) of+ k+ | k >= 0x8140 && k <= 0x9ffc -> Just (cc, go (k - 0x8140))+ | k >= 0xe040 && k <= 0xebbf -> Just (cc, go (k - 0xc140))+ | otherwise -> Nothing+ _ -> Nothing+ where+ go :: Word16 -> Word16+ go k = (k `shiftR` 8) * 0xc0 + (k .&. 0xff)+ cc :: Char+ cc = chr (fromIntegral cw)+ cb :: BL.ByteString+ cb =+ BL.pack+ [ fromIntegral (cw `shiftR` 24)+ , fromIntegral (cw `shiftR` 16)+ , fromIntegral (cw `shiftR` 8)+ , fromIntegral cw+ ]++showB :: Word8 -> String+showB c+ -- c0-ctrl quote backslash del + c1-ctrl-chars shy+ | c < 0x20 || c == 0x22 || c == 0x5c || (c >= 0x7f && c < 0xa0) || c == 0xad =+ '\\' : show c+ | otherwise =+ -- This character can be encoded directly+ [chr (fromIntegral c)]++addEmptyString :: [String] -> [String]+addEmptyString (x@('\\':_) : y@(y1:_) : zs)+ | isDigit y1 = x : "\&" : y : addEmptyString zs+addEmptyString (x:xs) = x : addEmptyString xs+addEmptyString [] = []++chunksOf :: Int -> [[a]] -> [[a]]+chunksOf n0 x0 = go [] n0 x0+ where+ go :: [a] -> Int -> [[a]] -> [[a]]+ go p _ [] = [p]+ go p n (x:xs) =+ let+ n' = n - length x+ in+ case n' `compare` 0 of+ LT -> p : go [] n0 (x:xs)+ EQ -> (p++x) : go [] n0 xs+ GT -> go (p++x) n' xs++main :: IO ()+main = do+ let+ kanjiMap :: M.Map Char Word16+ kanjiMap = M.fromList (mapMaybe unicodeToKanji [0 .. 0x10ffff])+ stream :: [String]+ stream = addEmptyString (map showB (BL.unpack (encode kanjiMap)))+ putStrLn "kanjiMap :: M.Map Char Word16"+ putStrLn "kanjiMap = decode"+ putStrLn (" \"" ++ intercalate "\\\n \\" (chunksOf 72 stream) ++ "\"")+-}
+ src/Codec/QRCode/Mode/Mixed.hs view
@@ -0,0 +1,303 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Mode.Mixed+ ( mixed+ ) where++import Codec.QRCode.Base++import qualified Data.DList as DL+import qualified Data.Map.Strict as M++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.TextEncoding+import Codec.QRCode.Data.ToInput+import Codec.QRCode.Data.Version+import Codec.QRCode.Mode.Alphanumeric+import Codec.QRCode.Mode.Byte+import Codec.QRCode.Mode.ECI+import Codec.QRCode.Mode.Kanji+import Codec.QRCode.Mode.Numeric++-- | Encode a string using any mode that seems fit, will encode the input in parts, each as+-- `numeric`, `alphanumeric`, `kanji` and `Codec.QRCode.Mode.Byte.text` based on the contents.+--+-- Please refer to the specific documentations for details.+--+-- Should result in the shortest encoded data.++mixed :: ToText a => TextEncoding -> a -> Result QRSegment+mixed te s =+ case te of+ Iso8859_1 -> encIso1+ Utf8WithoutECI -> encUtf8+ Utf8WithECI -> encUtf8Eci+ Iso8859_1OrUtf8WithoutECI -> encIso1 <|> encUtf8+ Iso8859_1OrUtf8WithECI -> encIso1 <|> encUtf8Eci+ where+ encIso1 :: Result QRSegment+ encIso1 = run EncISO1 <$> toIso1 ci s'+ encUtf8 :: Result QRSegment+ encUtf8 = run EncUtf8 <$> toUtf8 ci s'+ encUtf8Eci :: Result QRSegment+ encUtf8Eci = (eciEx 26 <>) <$> encUtf8+ s' :: [Char]+ s' = toString s+ ci = isCI s++--+-- Internal types+--++data Type+ = TNumeric+ | TAlphanumeric+ | TKanji+ | T8Bit+ deriving (Eq)++data EightBitEncoding+ = EncUtf8+ | EncISO1+ deriving (Eq)++data Segment+ = S+ !Int -- Number of characters in the string+ !Int -- Number of bytes required to encode the string segment in `EightBitEncoding`+ -- (never used for Kanji characters when in `EncISO1` mode)+ !(DL.DList Char) -- String of the Segment++instance Semigroup Segment where+ {-# INLINE (<>) #-}+ (S i1 j1 s1) <> (S i2 j2 s2) = S (i1+i2) (j1+j2) (s1 `DL.append` s2)++type TypedSegment = (Type, Segment)++--+-- parse input+--++toIso1 :: Bool -> String -> Result [TypedSegment]+toIso1 ci = traverse toSeg+ where+ toSeg :: Char -> Result TypedSegment+ toSeg c =+ let+ tyc = typeOfChar ci c+ oc = ord c+ in+ if tyc == T8Bit && (oc < 0 || oc >= 256) -- in case of numeric, aplhanumeric or kanji it's aready proven that it's a valid char+ then empty+ else pure (tyc, S 1 1 (DL.singleton c))++toUtf8 :: Bool -> String -> Result [TypedSegment]+toUtf8 ci = traverse toSeg+ where+ toSeg :: Char -> Result TypedSegment+ toSeg c =+ let+ tyc = typeOfChar ci c+ oc = ord c+ in+ case () of+ _ | oc < 0 -> empty+ _ | oc < 0x80 -> pure (tyc, S 1 1 (DL.singleton c))+ _ | oc < 0x800 -> pure (tyc, S 1 2 (DL.singleton c))+ _ | oc < 0x10000 -> pure (tyc, S 1 3 (DL.singleton c))+ _ | oc < 0x110000 -> pure (tyc, S 1 4 (DL.singleton c))+ _ | otherwise -> empty++typeOfChar :: Bool -> Char -> Type+typeOfChar ci c+ | isDigit c = TNumeric+ | c `M.member` alphanumericMap ci = TAlphanumeric+ | c `M.member` kanjiMap = TKanji+ | otherwise = T8Bit++--+-- optimise segments and encode output+--++run :: EightBitEncoding -> [TypedSegment] -> QRSegment+run te sg = QRSegment $ \vr -> go vr sg'+ where+ go :: VersionRange -> [TypedSegment] -> Result BSB.ByteStreamBuilder+ go vr =+ fmap mconcat .+ traverse (encode te vr) .+ mergeTwo te vr .+ mergeMiddle 3 te vr .+ mergeMiddle 2 te vr .+ mergeMiddle 1 te vr+ sg' :: [TypedSegment]+ sg' = mergeEqual sg++--+-- encode output+--++encode :: EightBitEncoding -> VersionRange -> TypedSegment -> Result BSB.ByteStreamBuilder+encode te vr (ty, S i j s) =+ case (ty, te) of+ (TNumeric, _) -> go 0b0001 i =<< numericB (DL.toList s)+ (TAlphanumeric, _) -> go 0b0010 i =<< alphanumericB True (DL.toList s)+ (T8Bit, EncISO1) -> go 0b0100 j (BSB.fromList $ map (fromIntegral . ord) (DL.toList s))+ (T8Bit, EncUtf8) -> go 0b0100 j (BSB.fromList $ encodeUtf8 $ DL.toList s)+ (TKanji, _) -> go 0b1000 i =<< kanjiB (DL.toList s)+ where+ go :: Int -> Int -> BSB.ByteStreamBuilder -> Result BSB.ByteStreamBuilder+ go mode l sb+ | l < (1 `shiftL` pl) = pure (BSB.encodeBits 4 mode <> BSB.encodeBits pl l <> sb)+ | otherwise = empty+ where+ pl = pfxLen vr ty - 4 -- subtract the 4 bits for the mode from the length of the prefix++--+-- check sub/super relation between types+--++isSuper :: EightBitEncoding -> Type -> Type -> Bool+isSuper _ TAlphanumeric TNumeric = True+isSuper _ T8Bit TNumeric = True+isSuper _ T8Bit TAlphanumeric = True+isSuper EncUtf8 T8Bit TKanji = True+isSuper _ _ _ = False++commonSuper :: EightBitEncoding -> Type -> Type -> Maybe Type+commonSuper _ a b+ | a == b = Just a+commonSuper _ TNumeric TAlphanumeric = Just TAlphanumeric+commonSuper _ TAlphanumeric TNumeric = Just TAlphanumeric+commonSuper _ TNumeric T8Bit = Just T8Bit+commonSuper _ T8Bit TNumeric = Just T8Bit+commonSuper _ TAlphanumeric T8Bit = Just T8Bit+commonSuper _ T8Bit TAlphanumeric = Just T8Bit+commonSuper EncUtf8 TKanji _ = Just T8Bit+commonSuper EncUtf8 _ TKanji = Just T8Bit+commonSuper _ _ _ = Nothing++--+-- calculate length of a TypedSegment+--++-- length of prefix (mode and length bits, depends on version range and type)++pfxLen :: VersionRange -> Type -> Int+pfxLen Version1to9 TNumeric = 4 + 10+pfxLen Version10to26 TNumeric = 4 + 12+pfxLen Version27to40 TNumeric = 4 + 14+pfxLen Version1to9 TAlphanumeric = 4 + 9+pfxLen Version10to26 TAlphanumeric = 4 + 11+pfxLen Version27to40 TAlphanumeric = 4 + 13+pfxLen Version1to9 TKanji = 4 + 8+pfxLen Version10to26 TKanji = 4 + 10+pfxLen Version27to40 TKanji = 4 + 12+pfxLen Version1to9 T8Bit = 4 + 8+pfxLen Version10to26 T8Bit = 4 + 16+pfxLen Version27to40 T8Bit = 4 + 16++-- length of the data (depends on type)++encLen :: Type -> Segment -> Int+encLen TNumeric (S i _ _) = let (j,k) = i `divMod` 3 in j * 10 + ([0,4,7] !! k)+encLen TAlphanumeric (S i _ _) = let (j,k) = i `divMod` 2 in j * 11 + k * 6+encLen TKanji (S i _ _) = i * 13+encLen T8Bit (S _ j _) = j * 8++-- length of a full segment (mode, length and data bits)++pfxEncLen :: VersionRange -> Type -> Segment -> Int+pfxEncLen vr ty g = pfxLen vr ty + encLen ty g++--+-- functions for merging segments+--++-- merge segments of equal type (not dependent on version range end encoding)++mergeEqual :: [TypedSegment] -> [TypedSegment]+mergeEqual ((t1, g1):(t2, g2):xs)+ | t1 == t2 = mergeEqual ((t1, g1<>g2):xs)+mergeEqual (x:xs) = x:mergeEqual xs+mergeEqual [] = []++-- merge tree neighboring segments (left, middle and right)++mergeMiddle :: Int -> EightBitEncoding -> VersionRange -> [TypedSegment] -> [TypedSegment]+mergeMiddle mt te vr = go+ where+ go (e1@(t1, g1):e2@(t2, g2):e3@(t3, g3):xs)+ -- (Phase 1-3) left and right are identical and are a super type of middle+ | t1 == t3 && isSuper te t1 t2 =+ if pfxEncLen vr t2 g2 + pfxLen vr t1 < encLen t1 g2+ then e1:go (e2:e3:xs)+ else go ((t1, g1<>g2<>g3):xs)+ -- (Phase 2-3) left and right are super of middle, left and right have a common super+ | mt >= 2 && isSuper te t1 t2 && isSuper te t3 t2 && isJust (commonSuper te t1 t3) =+ let+ g12 = g1 <> g2+ g23 = g2 <> g3+ g123 = g1 <> g2 <> g3+ Just tn = commonSuper te t1 t3+ x1 = pfxEncLen vr t1 g12 + pfxEncLen vr t3 g3+ x2 = pfxEncLen vr t1 g1 + pfxEncLen vr t2 g2 + pfxEncLen vr t3 g3+ x3 = pfxEncLen vr t1 g1 + pfxEncLen vr t3 g23+ xn = pfxEncLen vr tn g123+ in+ if x2 <= x1 && x2 <= x3 && x2 < xn+ then e1:go (e2:e3:xs)+ else+ if xn <= x1 && xn <= x3+ then go ((tn, g123):xs)+ else+ if x1 <= x3+ then go ((t1,g12):e3:xs)+ else go (e1:(t3,g23):xs)+ -- (Phase 2-3) left, middle and right have a common super+ | mt >= 2 && isJust (commonSuper te t2 =<< commonSuper te t1 t3) =+ let+ Just tn = commonSuper te t2 =<< commonSuper te t1 t3+ x2 = pfxEncLen vr t1 g1 + pfxEncLen vr t2 g2 + pfxEncLen vr t3 g3+ g123 = g1 <> g2 <> g3+ xn = pfxEncLen vr tn g123+ in+ if x2 <= xn+ then e1:go (e2:e3:xs)+ else go ((tn, g123):xs)+ -- (Phase 3) left and right are super of middle+ | mt >= 3 && isSuper te t1 t2 && isSuper te t3 t2 =+ let+ x1 = encLen t1 g2+ x2 = pfxLen vr t2 + encLen t2 g2+ x3 = encLen t3 g2+ in+ if x2 <= x1 && x2 <= x3+ then e1:go (e2:e3:xs)+ else+ if x1 <= x3+ then go ((t1, g1<>g2):e3:xs)+ else go (e1:(t3, g2<>g3):xs)+ go (e1:xs) = e1 : go xs+ go [] = []++-- merge two neighboring segments when they use less space combined+mergeTwo :: EightBitEncoding -> VersionRange -> [TypedSegment] -> [TypedSegment]+mergeTwo te vr = go+ where+ go (e1@(t1,g1):e2@(t2,g2):xs) =+ case commonSuper te t1 t2 of+ Just t3 ->+ let+ x12 = pfxEncLen vr t1 g1 + pfxEncLen vr t2 g2+ g12 = g1<>g2+ x3 = pfxEncLen vr t3 g12+ in+ if x12 < x3+ then e1 : go (e2:xs)+ else go ((t3,g12):xs)+ Nothing -> e1 : go (e2:xs)+ go xs = xs
+ src/Codec/QRCode/Mode/Numeric.hs view
@@ -0,0 +1,35 @@+{-# LANGUAGE BinaryLiterals #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Codec.QRCode.Mode.Numeric+ ( numeric+ , numericB+ ) where++import Codec.QRCode.Base++import qualified Codec.QRCode.Data.ByteStreamBuilder as BSB+import Codec.QRCode.Data.QRSegment.Internal+import Codec.QRCode.Data.Result+import Codec.QRCode.Data.ToInput++-- | Generate a segment representing the specified string of decimal digits encoded in numeric mode.+numeric :: ToNumeric a => a -> Result QRSegment+numeric s =+ ((encodeBits 4 0b0001 <> lengthSegment (10, 12, 14) (length s')) <>) . constStream <$> numericB s'+ where+ s' :: [Int]+ s' = toNumeric s++numericB :: ToNumeric a => a -> Result BSB.ByteStreamBuilder+numericB s+ | all (\c -> c >= 0 && c <= 9) s' = pure (go s')+ | otherwise = empty+ where+ s' :: [Int]+ s' = toNumeric s+ go :: [Int] -> BSB.ByteStreamBuilder+ go (a:b:c:cs) = BSB.encodeBits 10 (a * 100 + b * 10 + c) <> go cs+ go [a,b] = BSB.encodeBits 7 (a * 10 + b)+ go [a] = BSB.encodeBits 4 a+ go [] = mempty