!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred4Integer encoding. The first argument is N of prefix. encode 5 10[10] encode 5 1337 [31,154,10] encode 8 42[42]4Integer decoding. The first argument is N of prefix.decode 5 10 $ BS.empty10decode 5 31 $ BS.pack [154,10]1337decode 8 42 $ BS.empty426parseInteger 7 127 $ BS.pack [210,211,212,87,88,89,90](183839313,"XYZ") Safe-InferredNone&let bs = BS.pack [0x12,0x34,0xf3,0xab]unpack4bits bs[1,2,3,4,15,3,10,11]unpack4bits $ BS.tail bs[3,4,15,3,10,11] Safe-Inferred Bit stream.Data type for Bit.OneZeroFrom  of length 8 to .fromBits [T,F,T,F,T,F,T,F]170fromBits [F,T,F,T,F,T,F,T]85 Safe-Inferred  Safe-InferredType for Huffman decoding. Creating .Marking the EOS path   NoneHuffman encoding.toShifted [T,T,T,T] 0Shifted 1 4 "\240"toShifted [T,T,T,T] 4Shifted 1 0 "\SI"toShifted [T,T,T,T] 5Shifted 2 1 "\a\128"Huffman encoding.  None  Safe-Inferred  Safe-Inferred+$(The data type for HTTP/2 frame payloads. 'The data type for HTTP/2 frame headers. The data type for HTTP/2 frames.0NCooked version of settings. This is suitable to be stored in a HTTP/2 context.8Settings containing raw values.A)The connection error or the stream error.U"The length of HTTP/2 frame header.frameHeaderLength9VfromErrorCodeId NoError0"fromErrorCodeId InadequateSecurity12WtoErrorCodeId 0NoErrortoErrorCodeId 0xcInadequateSecuritytoErrorCodeId 0xeUnknownErrorCode 14X Obtaining D from A.Y)fromSettingsKeyId SettingsHeaderTableSize1,fromSettingsKeyId SettingsMaxHeaderBlockSize6ZtoSettingsKeyId 0NothingtoSettingsKeyId 1Just SettingsHeaderTableSizetoSettingsKeyId 6Just SettingsMaxHeaderBlockSizetoSettingsKeyId 7Nothing[ Checking 8 and reporting an error if any.*checkSettingsList [(SettingsEnablePush,2)]AJust (ConnectionError ProtocolError "enable push must be 0 or 1")\The default settings.defaultSettingsSettings {headerTableSize = 4096, enablePush = True, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Nothing}]Updating settings.XupdateSettings defaultSettings [(SettingsEnablePush,0),(SettingsMaxHeaderBlockSize,200)]Settings {headerTableSize = 4096, enablePush = False, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Just 200}^fromFrameTypeId FrameData0!fromFrameTypeId FrameContinuation9!fromFrameTypeId (FrameUnknown 10)10_toFrameTypeId 0 FrameDatatoFrameTypeId 9FrameContinuationtoFrameTypeId 10FrameUnknown 10`%The maximum length of HTTP/2 payload.maxPayloadLength16384a defaultFlags0btestEndStream 0x1Truec testAck 0x1TruedtestEndHeader 0x4TrueetestPadded 0x8TrueftestPriority 0x20TruegsetEndStream 01hsetAck 01isetEndHeader 04j setPadded 08k setPriority 032ltoStreamIdentifier 0StreamIdentifier 0m+fromStreamIdentifier (toStreamIdentifier 0)0n isControl $ toStreamIdentifier 0True isControl $ toStreamIdentifier 1Falseo isRequest $ toStreamIdentifier 0False isRequest $ toStreamIdentifier 1Truep!isResponse $ toStreamIdentifier 0False!isResponse $ toStreamIdentifier 2TruesGetting * from .,framePayloadToFrameTypeId (DataFrame "body") FrameDatat2Checking if padding is defined in this frame type.{  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstw  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst;    )('&%$#"! *+,-./0123456789:@?>=<;ACBDSRQPONMLKJIHGFETUVWXYZ[\]^_`abcdefghijklmnopqrst Safe-InferredNone u)Auxiliary information for frame encoding.w!Flags to be set in a frame headerx%Stream id to be set in a frame headeryPadding if any. In the case where this value is set but the priority flag is not set, this value gets preference over the priority flag. So, if this value is set, the priority flag is also set.zA smart builder of u.encodeInfo setAck 0ZEncodeInfo {encodeFlags = 1, encodeStreamId = StreamIdentifier 0, encodePadding = Nothing}{Encoding an HTTP/2 frame to f. This function is not efficient enough for high performace program because of the concatenation of .0encodeFrame (encodeInfo id 1) (DataFrame "body")*"\NUL\NUL\EOT\NUL\NUL\NUL\NUL\NUL\SOHbody"|Encoding an HTTP/2 frame to [$]. This is suitable for sendMany.}GEncoding an HTTP/2 frame header. The frame header must be completed.~`Encoding an HTTP/2 frame payload. This returns a complete frame header and chunks of payload.uvwxyzstream identifier{|}~Payload length. uvwxyz{|}~uvwxyz{|}~NoneEDecoding an HTTP/2 frame to . The second argument must be include the entire of frame. So, this function is not useful for real applications but useful for testing.8Decoding an HTTP/2 frame header. Must supply 9 bytes.6Checking a frame header and reporting an error if any.let stid = toStreamIdentifier 0EcheckFrameHeader defaultSettings (FrameData,(FrameHeader 100 0 stid))DLeft (ConnectionError ProtocolError "cannot used in control stream")!Decoding an HTTP/2 frame payload.Helper function to pull off the padding if its there, and will eat up the trailing padding automatically. Calls the decoder func passed in with the length of the unpadded portion between the padding octet and the actual paddingHTTP/2 settingsInput byte-stream Decoded frameNoneThe preface of HTTP/2.connectionPreface""PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"Length of the preface.connectionPrefaceLength24  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  t{|}~uvwxyz)('&%$#"! s*^_+,-./mlnopqrabcdefghijk89:@?>=<;YZ[01234567\]TDSRQPONMLKJIHGFEVWACBXU` Safe-Inferred+Errors for decoder.Header block is emptyEncoded string has no length)Eos of huffman string is more than 7 bits,Non-eos appears in the end of huffman string+Eos appears in the middle of huffman stringIndex is out of rangeStrategy for HPACK encoding.$Which compression algorithm is used.3Whether or not to use Huffman encoding for strings.*Compression algorithms for HPACK encoding.Using indices onlyUsing the static table onlyNo compressionIndex for table.To be a  or . Header list.Header. Header value. Header name.Default .defaultEncodeStrategy<EncodeStrategy {compressionAlgo = Linear, useHuffman = True}   None Huffman decoding. Huffman decoding.           None   Safe-InferredIndex or literal.!Whether or not adding to a table.Type for representation.Type for header block.Empty header block.  !"#$% !"#$%"! %$#None& Encoding  to  according to HuffmanEncoding.'Parsing  from . The second (: is whether or not huffman encoding is used. The third )% is the length of the encoded string.&'&'&'None*#Converting the low level format to .+#Converting the low level format to . ! forms a pair with corresponding .*+,-./0123456789:;*+*+,-./0123456789:;None< Converting  to the low level format. =<>?@ABCDEFGH< =<>?@ABCDEFGH Safe-Inferred I>Type for table entry. Size includes the 32 bytes magic number.Size in bytes.JFrom  to I.KFrom I to .LGetting the size of I.MGetting .NGetting .OGetting .PDummy I to initialize a dynamic table.Q2How many entries can be stored in a dynamic table? IRSJKLMNOPQIJKLMNOPQ IRSJKLMNOPQ Safe-Inferred TUVWXYZ[\]^_ TUVWXZ[\]^_TWVUXYZ[\]^_ Safe-Inferred`The size of static table.aGet I from the static table.toStaticEntry (SIndex 1)(42,(":authority",""))toStaticEntry (SIndex 8)(42,(":status","200"))toStaticEntry (SIndex 50)(37,("range",""))bPre-defined static table. cdefg`abhicdefg`ah cdefg`abhiNone3EType for dynamic table.jAn arrayk Start pointlThe current number of entriesmThe size of the arrayn1The current dynamic table size (defined in HPACK)o-The max dynamic table size (defined in HPACK)pjHeader to the index in Dynamic Table for encoder. Static Table is not included. Nothing for decoder.q Printing . Creating r. The default maxDynamicTableSize is 4096 bytes, an array has 128 entries, resulting 1024 bytes in 64bit machine Creating r. The default maxDynamicTableSize is 4096 bytes, an array has 128 entries, resulting 1024 bytes in 64bit machiner Renewing  with necessary entries copied.sIs the size of  really changed?t Inserting I to  . New , the largest new  and a set of dropped OLD  are returned.#uvwjklmnopxyqz{|}~rstwjklmnopq{|}~rtuvwjklmnopxyqz{|}~rstNoneE)Is header key-value stored in the tables?Which table does  refer to?MResolving an index from a header. Static table is prefer to dynamic table.Which table does  belong to? IJKLMNOPQq{rtNone Decoding  to .Decoding step for one $. Exporting for the test purpose.None Encoding  to .  None !"#$%*+<NoneHPACK decoding, from  to .HPACK encoding, from  to . Converting * for HTTP request to the low level format.4Converting the low level format for HTTP request to .  would be thrown.   ! " # $ % & ' ( ) * + + , - . / / 0 1 2 3 4 5 6 7 8 8 9 : ; < = > ? @ A B C D E F G G H I J K K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~                      !"##$%&'()*+,-./0123456789:;<=><=?@ABCDEFGHIJKLMNOPQRSTUHIVWXYZ[\]^_`abcdefghijkklmnopqrsttuvwxyz{|}L~ http2-0.9.1 Network.HTTP2Network.HTTP2.Internal Network.HPACK!Network.HPACK.HeaderBlock.IntegerNetwork.HPACK.Huffman.Params Network.HPACK.Huffman.ByteStringNetwork.HPACK.Huffman.BitNetwork.HPACK.Huffman.TableNetwork.HPACK.Huffman.TreeNetwork.HPACK.Huffman.EncodeNetwork.HPACK.Builder.Word8Network.HPACK.BuilderNetwork.HTTP2.TypesNetwork.HTTP2.EncodeNetwork.HTTP2.DecodeNetwork.HPACK.TypesNetwork.HPACK.Huffman.DecodeNetwork.HPACK.Huffman%Network.HPACK.HeaderBlock.HeaderField Network.HPACK.HeaderBlock.String Network.HPACK.HeaderBlock.Decode Network.HPACK.HeaderBlock.EncodeNetwork.HPACK.Table.EntryNetwork.HPACK.Table.HashPSQNetwork.HPACK.Table.StaticNetwork.HPACK.Table.DynamicNetwork.HPACK.TableNetwork.HPACK.HeaderBlock.FromNetwork.HPACK.HeaderBlock.ToNetwork.HPACK.HeaderBlock FramePayload UnknownFrameContinuationFrameWindowUpdateFrame GoAwayFrame PingFramePushPromiseFrame SettingsFrameRSTStreamFrame PriorityFrame HeadersFrame DataFrame FrameHeader payloadLengthflagsstreamIdFrame frameHeader framePayloadPaddingHeaderBlockFragmentWindowSizeIncrementPromisedStreamId LastStreamIdStreamDependencyStreamIdentifier FrameFlags FrameTypeId FrameUnknownFrameContinuationFrameWindowUpdate FrameGoAway FramePingFramePushPromise FrameSettingsFrameRSTStream FramePriority FrameHeaders FrameData FrameTypePriority exclusivestreamDependencyweightSettingsheaderTableSize enablePushmaxConcurrentStreamsinitialWindowSize maxFrameSizemaxHeaderBlockSize SettingsList SettingsValue SettingsKeyIdSettingsMaxHeaderBlockSizeSettingsMaxFrameSizeSettingsInitialWindowSizeSettingsMaxConcurrentStreamsSettingsEnablePushSettingsHeaderTableSize HTTP2Error StreamErrorConnectionError ErrorCodeIdUnknownErrorCodeHTTP11RequiredInadequateSecurityEnhanceYourCalm ConnectErrorCompressionErrorCancel RefusedStreamFrameSizeError StreamClosedSettingsTimeoutFlowControlError InternalError ProtocolErrorNoError ErrorCodeframeHeaderLengthfromErrorCodeId toErrorCodeId errorCodeIdfromSettingsKeyIdtoSettingsKeyIdcheckSettingsListdefaultSettingsupdateSettingsfromFrameTypeId toFrameTypeIdmaxPayloadLength defaultFlags testEndStreamtestAck testEndHeader testPadded testPriority setEndStreamsetAck setEndHeader setPadded setPrioritytoStreamIdentifierfromStreamIdentifier isControl isRequest isResponse testExclusive setExclusiveframePayloadToFrameTypeIdisPaddingDefined EncodeInfo encodeFlagsencodeStreamId encodePadding encodeInfo encodeFrameencodeFrameChunksencodeFrameHeaderencodeFramePayloadFramePayloadDecoder decodeFramedecodeFrameHeadercheckFrameHeaderdecodeFramePayloaddecodeDataFramedecodeHeadersFramedecodePriorityFramedecoderstStreamFramedecodeSettingsFramedecodePushPromiseFramedecodePingFramedecodeGoAwayFramedecodeWindowUpdateFramedecodeContinuationFrameconnectionPrefaceconnectionPrefaceLength DecodeError EmptyBlockEmptyEncodedString TooLongEos IllegalEosEosInTheMiddle IndexOverrunEncodeStrategycompressionAlgo useHuffmanCompressionAlgoLinearStaticNaiveIndex HeaderListHeader HeaderValue HeaderNamedefaultEncodeStrategySize DynamicTablenewDynamicTableForEncodingnewDynamicTableForDecoding HPACKDecoding HPACKEncoding encodeHeader decodeHeaderencodedecode parseInteger powerArrayencode'decode'idxEos unpack4bitsc_memcpycopymemcpyBitsBTFfromBitsbaseGHC.WordWord8fromBit huffmanTableHTreetoHTreemarkBinTipEOSInfoeosInfoshowTree showTree' printTreebuildflattenHuffmanEncoding toShiftedShifted ShiftedArrayAOSAaosatoShiftedArray Word8Builder<|w8empty toByteStringBuilder<<empty singletonrunminSettingsKeyIdmaxSettingsKeyIdcheckSettingsValue minFrameType maxFrameType$fExceptionHTTP2Errorbytestring-0.10.4.0Data.ByteString.Internal ByteStringbuildFramePayload buildPadding buildPrioritybuildFramePayloadDatabuildFramePayloadHeadersbuildFramePayloadPrioritybuildFramePayloadRSTStreambuildFramePayloadSettingsbuildFramePayloadPushPromisebuildFramePayloadPingbuildFramePayloadGoAwaybuildFramePayloadWindowUpdatebuildFramePayloadContinuationbuildFramePayloadUnknownpoke8poke16poke24poke32 bytestring4decodeWithPadding+.zeroFrameTypesnonZeroFrameTypespayloadDecodersdecodeUnknownFramecheckFrameSizestreamIdentifierpriority intFromWord8word32word32'word16' HeaderStuff$fExceptionDecodeErrorHuffmanDecodingWay256Way16PinGoBackForward EndOfStringnextdecway256 constructstepbits4sNamingIndexing HeaderField HeaderBlockemptyHeaderBlockLitIdxNeverNotAddAddLiteralIndexedChangeTableSize parseStringghc-prim GHC.TypesBoolIntfromByteStringfromByteStringDebug toHeaderFieldindexedincrementalIndexingmaxSizewithoutIndexing neverIndexing indexedNamenewName headerStuffmask6mask5mask4isIndexedName1isIndexedName2 isHuffman dropHuffmanSetterfromHeaderFieldchangeindexset1set01set001set0001set0000setHEntrytoEntry fromEntry entrySize entryHeaderentryHeaderNameentryHeaderValue dummyEntry maxNumbersheaderSizeMagicNumber headerSizeResKVKNHashPSQinsertdeletefromList deleteListsearchstaticTableSize toStaticEntry staticTableSIndexfromStaticIndex toStaticIndex isSIndexValid staticHashPSQstaticTableList circularTableoffset numOfEntriesmaxNumOfEntriesmaxDynamicTableSize reverseIndexprintDynamicTablerenewDynamicTable shouldRenew insertEntryHIndexTableadj printEntryisDynamicTableEmptyfromHIndexToIndexfromIndexToHIndexfromSIndexToIndexfromIndexToSIndexnewDynamicTable copyTable getEntries copyEntries insertFrontadjustTableSizeadjust insertEnd removeEnd toHeaderEntry HeaderCache WhichTable lookupTablewhichKeyValueKeyOnlyNone InStaticTableInDynamicTableisInfromHeaderBlock decodeStepStepCtx decodeLoop decodeFinal fromNaming toHeaderBlock encodeFinal encodeLoop naiveStep staticStep linearStep smartStepcheckheadersNotToIndex