3723 lines
932 KiB
Go
3723 lines
932 KiB
Go
|
// Copyright 2018 The Go Authors. All rights reserved.
|
|||
|
// Use of this source code is governed by a BSD-style
|
|||
|
// license that can be found in the LICENSE file.
|
|||
|
|
|||
|
// Code generated by "makestatic"; DO NOT EDIT.
|
|||
|
|
|||
|
package static
|
|||
|
|
|||
|
var Files = map[string]string{
|
|||
|
"analysis/call3.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03N\x00\x00\x01\xea\b\x03\x00\x00\x00\x04l\xeeb\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x04\x06\x03\x06\t\x05\x0e\x10\r\x16\x17\x15$\x18\x0f\x1e\x1d\x17!# #$\"$%#&(%)(\"()'-+\x1f*+),-+-/,41&J-\x1202/241S/\x0e564,7M796<:.:<9!?p=?<B@4@B?DECLH9?JVHIGvD\x13JLIMOLVQ@QRPUWT_ZHY[X,`\xae7]\xaduWG8`\xaa\\^[A`\xa5:b\xab;b\xac<c\xad_a^=d\xae@f\xb0bdaRe\x99lfP\x90^8Ci\xb4egdMj\xafhjgFm\xb1Ol\xb2fj\x90Ip\xb4\xa7c\"}iflnkKr\xb7oqnNu\xba\xb3h\"{s[Xv\xb6tvs\u007fr\u007fZx\xb8ry\x81]{\xbb\\}\xb6y{x_}\xbeX\x80\xbf`\x80\xba\x96xpb\x80\xc0}\u007f|\x89\x80eb\x83\xbd\u007f\x81~\x9a{oe\x85\xc0\x82\x83\x81k\x85\xbb\xa7}fh\x88\xc3m\x88\xbdj\x8aľ~G\x87\x89\x86q\x8c\xc1\x8a\x8c\x89\xbe\x82Y\x96\x8cnt\x8e\xc4z\x8f\xc0\x8f\x91\x8ex\x92\xc8~\x93\xc3x\x95\xc4z\x94ʒ\x94\x91\x80\x95\xc5ӊJz\x98ǂ\x96Ǡ\x96w|\x99ȕ\x97\x94\x83\x98ɂ\x9aė\x99\x96\x86\x9a\xcc\xe4\x8dA\x80\x9d̅\x9dǚ\x9c\x98\x83\xa0Ϝ\x9e\x9b\xa8\x9e\u007f\x88\xa0\xcb\xf3\x915\x8a\xa2̙\xa0\xb5\x9f\xa1\x9e\x8e\xa2Nj\xa3Ρ\xa3\xa0\xfa\x95/\xa2\xa4\xa1\x8e\xa6\xd0\xff\x952\x92\xa6˳\xa6\x82\xa5\xa7\xa4\x91\xa9ԧ\xa9\xa6\x94\xac֙\xacҪ\xac\xa8\xb9\xac\x88\x9e\xaeΛ\xafԭ\xaf\xac\x9d\xb1֢\xb1ѯ\xb1\xae\xa1\xb5ڥ\xb5ճ\xb5\xb2µ\x90\xa3\xb7ݵ\xb7\xb4\xac\xb7Ҫ\xb9ٷ\xb9\xb6\xac\xbcܺ\xbc\xb9\xb1\xbd\u05ef\xbe\xdf˾\x98\xbd\xbf\xbc\xb1\xc0\xe0\xba\xc1\xd6\xc0¾\xb7\xc2\xdd\xc2\xc4\xc1\xb9\xc5\xe0\xbd\xc5\xda\xc4\xc6û\xc7\xe2\xd6ǝ\xbc\xc8\xe3\xbb\xca\xde\xc7\xc9ƿ\xca\xe5\xc6\xca\xda\xc0\xcc\xda\xca\xcc\xc8\xc1\xcc\xe7\xbf\xcf\xe2\xc2\xce\xe9\xcd\xcf\xcc\xc4\xd0\xde\xcb\xcf\xdf\xc8\xd0\xe5\xcf\xd1\xce\xdfѥ\xca\xd1\xe7\xcc\xd3\xe9\xd2\xd4\xd1\xcc\xd5\xdd\xd3\xd3\xde\xce\xd6\xeb\xd6\xd8\xd5\xd0\xd8\xed\xe7ج\xd2\xda\xe2\xcb\xdb\xee\xd5\xd9\xe9\xd9\xd9\xe4\xd7\xdb\xeb\xda\xdc\xd9\xd8\xdc\xec\xd2\xde\xec\xd9\xdd\xed\xdc\xdd\xe7\xdd\xdf\xdc\xd4\xe0\xef\xdb\xdf\xef\xf0\xe0\xb3\xdc\xe1\xe4\xdd\xe1\xf1\xe0\xe2\xdf\xd9\xe5\xf4\xe0\xe5\xe8\xe0\xe4\xf4\xe3\xe5\xe2\xde\xe6\xef\xe7\xe5\xe9\xe5\xe7\xe4\xe6\xe7\xf1\xe0\xe9\xf1\xe4\xe9\xeb\xe7\xe9\xe6\xe3\xec\xf4\xeb\xed\xea\xe6\xee\xf7\xec\xed\xf7\xe8\xf0\xf9\xf0\xf0\xfb\xf0\xf3\xef\xf4\xf2\xf6\xee\xf4\xf6\xf0\xf6\xf8\xf4\xf7\xf3\xf2\xf7\xfa\xf5\xfa\xfd\xf8\xfa\xf7\xfd\xfb\xff\xf7\xfd\xff\xf9\xff\xff\xfe\xff\xfc\x9cx\xeb\xab\x00\x00 \x00IDATx^\xed\x9d\x0fp\x14ׁ\xa7C\x9c\xf3\x83\x89-\x94\x95V\xa7\xb0\x04r\xac8\x14\xd37l\tF\\N\xa0\xd1\xe9N\xb27\xd2q\x0e\x845\xc1+\xbc\xb6N\xb0\x11\xb2\x1d\xd8(K!\x8e\x15\n\xa9S \"\x18\bZ\x82\x10QJ\x12\b,\x84A\x90\n\x10\xe1\"\xe0\x80b\xc9v\xe2\x12Nd\x1bk\x89\xd6\xc4j;\x80\x8d\x8d\xf0\xd4Խ\xd7\xdd3\xf3\xba\xa7{zz\xd4j\x8dF\xbf\xaf\xa8\xa1\xe7\xe9\xbd\xd7\u007f\xa6\xbf\xe9\xee7=\xbf\xf9\x8c?fD\x00\x80\x8aϘIc\x8cY\xd7\x00L4\xa0\x13\x00\xb6\x01\x9d\x00\xb0\r\xe8\x04\x80m@'\x00l\x03:%27\xcc*\x00{\x81N\tKwA\x1aYhV\t\xd8\ntJXfάj|ɬ\x12\xb0\x15Gu\xea\xde_[]w\xa8\x9fM\xde8\xb1\xa7z\xd7\x19m\xa9\xd3\xf4\x15\xa7%͋\xf2\x8c\xa81\xb5ެJ\\q\x82\xec7\xab\x02\xec\xc6I\x9dz\xab\xea\xcft\x9f\xd9U;@\xa7\xebk\x8e_h\xafnה:Mfچ\x82\xa4>\xb3Z2\xf5Sw\x99U\x89+\xdaI\xb3Y\x15`7N\xea\xd4U\xd5M\x1f\a\xaa\xe8A\xe9x5ۉ\xbb\xaa\xfbU\xa5N\xd3G։\xe2\x98\x1c\x16\x1d\xa0\x8d\xb4\x99U\x01v\xe3\xa4N\xa2t\x00\xeae\xfa\xd4\xcb'\"\xb5\xed\xaaR\xa7\xe9\"\xe3\xeb\xfc\xcd\x12\xd0i\fpT'\xca@w\x1dۅw\xc9'\"{\xeaU\xa5\x8e2\x98J$\x96J\xcf6d$el\xa0\xff\x9f\x98BȪ\xae\xdc\xe9I\xf3\x06\xf9\xca}I\x84L\xae\xd5\xeb&H\xd7\xc2TWڼ\xb07\x85\x9a\xb4*\xf6_w\xb2<7\x92\xcc\xd7\xe0\xe7ֿ(\xdd5m\xc1\tZZL\\UKg$=$\xd5\xec\xcdMM_\xba4uj\x1d\x9d\xae\x9d3u\xc6R\xedѴ\xf3\x89|\xf7\xe2\xa7\xf2\x874\xc5b\x13tr\x1egu\uab6a\xaa\xaaa\xfbáZ\xb6\xb7\x0e\xd4\xecR\x95:\xcb\xf1\xe6\xed\xa4\xac\xb9Y\xdai\v\\\xab\xeaW\xb9r\xe9\"\xd5\xd5N\x9b\x91<mi.Q\x0f\x8a\xb577\xbb\xcat\xbbQh\x9a\x9aQ\xd1XF*\xb4\xe5\v\xc9<\xf6\xdf`\xcd:\x99\x1a^S~n\xf5\xe4ᦺ\x05\x93\xa9\x03gj\xa7\x90Բ\x8ad6\xca=83}C\x99+\xa9\xfa!\xdaq\xc1\xe4\xe2\xfau\xa9\x19ꡓ_\xce}\xa6\xa5\xe3\xc0b\xe1]U\xe9`o\xd3\xec\x14\xe77\xe9\x84\xc7Y\x9d\xc4\xde\xeeSu\xb5\xf4e\uebe9\xef\x1d\xe8\xdeSU\xa7*u\x9a\xe0\xc9\xde~i\x14L~\x143Hf\xbf\xde%UR$\
|
|||
|
|
|||
|
"analysis/call-eg.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\x1e\x00\x00\x01\xc8\b\x03\x00\x00\x006\x92\x13\xd7\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x05\a\x03\n\r\t\r\x12\x14\x0e\x12\x1d\x11\x13\x10\x1b\x1a\x14 \x19\x15\"6\x1f#%!# $%#&(&+)\x1e++$*,*0.\"-/,\x1c0Z120463/6B;8-8:7<>;C@4#Cx@B?AFHDFDKH<MH7\x00f\x00IJH\x00i\x01\x00j\x02LNK8P|0R\x95\am\x06PROYTC\x0fp\vTVS/Z\xa3\x0es\x18,`\xae7]\xad\x15v\x1c[]Zb]K9a\xab\x19y\x1e;b\xac_a^=d\xae@f\xb0*{!bdaBh\xb3efdDi\xb4fheMj\xaf.\x81.Fm\xb1qjROl\xb2Ho\xb3kmj0\x859Jq\xb5Kr\xb7npmMs\xb8;\x86:cr\x8fNu\xba|t]Xv\xb6sur?\x8a>Zx\xb8vxu]{\xbb_}\xbez|y\x84|dX\x80\xbfL\x91K`\x81\xbbb\x80\xc0}\u007f|\u007f\x81~c\x83\xbdN\x95Ue\x85\xbf\u007f\x83\x92W\x95V\x82\x84\x81\x8d\x84fg\x88\xc2m\x87\xbci\x89\xc3j\x8a\xc4[\x9aZ\x87\x89\x86q\x8c\xc1\x8a\x8b\x88\\\x9dc\x96\x8cnt\x8e\xc4v\x90\xc6g\xa0g}\x91\u008f\x91\x8ey\x93ɒ\x94\x91\x80\x95\xc6z\x97Ƃ\x96\xc7s\xa4l\xa1\x96x\x95\x97\x94\x83\x98ɂ\x9aė\x99\x96\u007f\x9d\xcct\xa9v\x86\x9b́\x9eΚ\x9c\x99\x82\xa0Ϩ\x9d\u007f\x9c\x9e\x9b\x88\xa0\xca\u007f\xabz\x8a\xa2̟\xa1\x9e\x9e\xa3\xa5\xa1\xa3\xa0\x8d\xa6Ђ\xb1\x85\xa3\xa5\xa2\xb3\xa7\x83\x91\xa9ԧ\xa9\xa6\x8d\xb5\x8a\x94\xac֙\xacѪ\xac\xa9\xa4\xac\xc0\x9e\xad͍\xb8\x93\x9b\xafԻ\xae\x89\x9d\xb1֯\xb1\xae\x97\xbb\x97\x9f\xb3ء\xb5\xdaµ\x90\xb4\xb6\xb3\xa3\xbf\x9d\xac\xb7Ң\xc0\xa4\xa9\xb9ٷ\xb9\xb6\xac\xbcܺ\xbc\xb9\xa6Ũ\xb1\xbd\u05ef\xbe\u07fd\xbf\xbc̿\x9a\xb1\xc0\xe1\xb8\xc0ձȭ\xc0¿\xb7\xc2ݹ\xc5\xe0\xbd\xc5ڲͷ\xc2\xc6ֻ\xc7\xe2\xd6ǝ\xc6\xc8ż\xc8\xe3\xbf\xca\xe5\xbdм\xc6\xcb\xdb\xca\xcc\xc8\xc1\xcc\xe7\xc2\xcd\xe9\xbf\xcf\xe2\xc7\xce\xe4\xca\xcf\xdf\xce\xd0\xcd\xc8\xd3\xc1\xc8\xd0\xe6\xdfѥ\xca\xd1\xe7\xcb\xd3\xe9\xca\xd8\xcc\xd3\xd5\xd1\xce\xd6\xeb\xd3\xd7\xe0\xd6\xd8\xd4\xd0\xd8\xed\xe7ج\xd5\xdb\xd0\xcb\xdb\xee\xd5\xd9\xe9\xd9\xdb\xd8\xd7\xdb\xeb\xd8\xdc\xec\xd2\xde\xec\xd5\xdf\xda\xd9\xdd\xed\xdc\xdd\xe7\xdd\xdf\xdc\xd7\xe1\xdb\xdb\xdf\xef\xd5\xe1\xef\xf0\xe0\xb3\xdd\xe1\xf1\xe0\xe2\xdf\xde\xe3\xe6\xd9\xe5\xf4\xe0\xe4\xf4\xe3\xe5\xe2\xde\xe6\xef\xe8\xe5\xea\xe5\xe7\xe4\xe6\xe7\xf1\xe0\xe9\xf1\xe3\xe9\xeb\xe7\xe9\xe6\xe3\xec\xf4\xeb\xed\xea\xe6\xee\xf7\xec\xed\xf7\xe8\xf0\xf9\xef\xf0\xfb\xf0\xf3\xef\xf4\xf2\xf6\xef\xf4\xf7\xf4\xf7\xf3\xf2\xf7\xfa\xf5\xfa\xfd\xf8\xfa\xf7\xfd\xfb\xff\xf7\xfd\xff\xf9\xfe\xff\xfe\xff\xfcA\x10\x8d\xd1\x00\x00 \x00IDATx^\xed\x9d\x0ft\x14U\xbe\xe7\awqv+\xfd^\xcc&O\x98\xe51\xd3@vaȆ\x82\x89M\"\x98`^\xc0\x13a} \b\x0e\x88\x99l\x1c=A\x98\xe1\xafg2\xcf3YI\x8eA\xf2@$\x98\xacsL\x00\xb3J\x88\x12\x91\x80\xae\xe6\x80ᨼ#\x90LD\x87\x93\x991\x83о\xc9L\xc4RQD\x12\xfb\xd4\xd9{oUu\xdd[\xa9\xbe71\xe9\xaa\xea\xee\xdf\xe7p\x92ە[\xb7nU}\xba\xeaVu\u007f\xa9\xef\xa9#@\x01\xe2\x9c\xef\x89\x14\xe0!j\x1c\x88u@\x0f\x80\x03\xe8\x01p\x00=\x00\x0e\xa0\a\xc0\x01\xf4\x008\xb8\xa7G_kMeM\x9b\xfe\xa2\xad\xaejG\v\xaf6\xe0\n\xee\xe9QW\xd5z\xaa\xa5\xb2\x05\x17{\x1bʛO\xb5\x94\xb7\v\xe6\x00\x1c\xc75=Z+\xbb\xd0\xcf\xf6\xca\x1e\xf4\xb3\xa1\xb2CQ\xbaʍC\t\xe0\x19\\ӣ\xae\x81\xfc\xaanQ\x94\x8e\xf2V\\\xec\xe1U\a\\\xc15=j\x1a\xb5_u\x8a\xd2\\\xd9+\xa8\f\xb8\x84kz4Uc'\x82U\xbb\xb0\"m5\xe5\xd5MA\xd1,\x80㸦GOU]W\xb0\xa3\xa6|\x87\xa2\xec(\xafn\xedh\xab\xde\x01\xc7\x10\xcf\xe1\x9a\x1e\xca\xf9\xba\xf2\xf2\xf2\xe6\xba\x1a4\f!\xe3Ӟ\xaaf\xd1,\x80Ӹ\xa7\a:\xb3\x9c\xefS\xaa\x9b\x14\xa5\xb1\x86\xbc\xd4\u007f\x01\x1e\xc2==ȩ\xa4\xbd\x1c]ҶT\xf5\xe1rC\x1d\u007f\x06\xc0y\\ӣ\xad\xbc\v\x9dP\xaa\xf1\xf5\xcbyraۣ\xdd\"\x03\xbc\x84kz\xb4\x97\xb7t\xb4Vב˕\x96\xca\x1644\xad\x81\xa1\xa9\xe7pM\x0f\xa5uWU]\xab^n\xaf\xa9\xda\xd5\x02vx\x0f\xf7\xf4\x00b\x00\xd0\x03\xe0\x00z\x00\x1c@\x0f\x80\x03\xe8\x01p\x00=\x00\x0e\xa0\a\xc0\x01\xf4\x008\x80\x1e\x00\a\xd0\x03\xe0\x00z\x00\x1c@\x0f\x80\x03\xe8\x01p\x00=\x14e\xcd\x1a\xbb\"\xa0\xb8\xa9G8D\xd9[]\xaeQ-\x9a%:\xfc\x9b\u007f\xa3M\x11\xb3Ǐȼ\xfb\xc4\xe0yF\x8f\x12\xb4\x88\xa9gE\xb5\xdc\xc2==\xc2!\xca`yK\a\xa2\xa5\xbcUq\x85\x92)\xef\xdb\x141=\xbf\xf5?qd\xcf\"\xff\x8b\x83g\x1a5\xce\x1e9\xb2\xc7\u007fDT\xcb-\\Ӄ\nQ\xb6ᯌ\x05\xf1\x97\x92\xdd\xe0\xacy\xc48\xcb\x1e<\x14\xe5\x041cѭJTy\r\xf4\x18\x04\x15\xa2\xd4^\xefr\xe9\xdbb\x91\x0f\x1e\x8
|
|||
|
|
|||
|
"analysis/callers1.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\xa2\x00\x00\x01.\b\x03\x00\x00\x00\xa3\xcb_?\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x04\a\x03\x06\f\x0f\n\r\t\x10\x12\x0f\x17\x17\x13\x1a\x1a\x14 \x1f\x19!# #$\"%$\x1d$%#&'%'(&+)\x1e()'++$*+)+-*/-!,-+-.,02/52'241574796<9-9;8:;C;=:=?<B@4?@>#CxAB@CDBDFCKH<MH7HIG\x00f\x00\x00h\x00\x00i\x01JLI\x00j\x02MOL\x05m\x05PRO\fo\t\x0fq\vTVSZVD\fr\x17WXV\x11t\x19,`\xae7]\xad\x15v\x1c[]Z\x19y\x1e]_\\d_M:b\xac_`^<c\xad>e\xafac`*{!Ag\xb2ceb)|*dfcfgeghfLi\xafDl\xb0hjgqjR\\k\x88/\x82/jkiHo\xb3/\x858Jq\xb5mol;\x86:pqoUt\xb4>\x89=|t]tvs@\x8b?swzB\x8c@vxu@\x8dG\\{\xbbxzw]~\xb7K\x8fJ{}z\x85}d}\u007f|O\x93N\u007f\x81~c\x83\xbdN\x95Uu\x84\x96\x81\x83\x80W\x95V\x8e\x85gm\x87\xbcZ\x98Y\x87\x89\x86]\x9c\\\x89\x8b\x88\x95\x8bm\\\x9dcs\x8d\xc3d\x9dd\x8c\x8e\x8bf\x9fg{\x90\xc0\x8e\x90\x8d\x90\x92\x8f\u007f\x93\xc4j\xa3jz\x97Ɠ\x95\x92s\xa4l\xa1\x96xq\xa5s\x81\x9a×\x99\x96\x84\x9cƙ\x9b\x98u\xaaw\x9b\x9d\x99~\xaay\x9c\x9e\x9b\xa8\x9e\u007f\x88\xa0˞\xa0\x9d\x80\xad|\xa0\xa2\x9f\xa1\xa3\xa0\xa2\xa4\xa1\x92\xa5ʮ\xa4\x85\x82\xb1\x86\xa4\xa6\xa3\xa5\xa7\xa4\xb4\xa7\x82\xa6\xa8\xa5\x8b\xb3\x88\x95\xa9Ψ\xaa\xa7\x8d\xb5\x8a\x98\xabѩ\xab\xa8\x8e\xb6\x8c\x8d\xb8\x93\xab\xad\xaa\xb9\xad\x88\x9f\xaeέ\xaf\xac\x96\xba\x96\xaf\xb1\xae\xa3\xb2Ҙ\xbc\x98\xb1\xb3\xaf\xb2\xb4\xb1\x9b\xbe\x9bµ\x90\xb4\xb6\xb3\xb5\xb7\xb4\xa3\xbf\x9d\xac\xb7Ң\xc0\xa4\xb7\xb9\xb6\xb8\xba\xb7\xb9\xbb\xb8\xa5ħ\xb1\xbc\u05fb\xbd\xba\xbc\xbe\xbb\xbd\xbf\xbc\xafƫ\xa9ȫ\xb8\xc0տ\xc1\xbe\xce\xc1\x9b\xc1ÿ\xb2ʮ\xc2\xc4\xc1\xbc\xc4ٲ̷\xc4\xc6ú\u0379\xd7Ȝ\xc1\xc8\u07bb\xca\xde\xc7\xc9Ƽϻ\xc9\xcb\xc8\xc0\xcc\xda\xc7\xcb\xdb\xca\xccɿҾ\xcc\xce\xcb\xc4\xcf\xdd\xca\xce\xde\xce\xd0\xcc\xc8\xd3\xc1\xe0Ф\xcf\xd2\xce\xc8\xd6\xc9\xd1\xd3\xd0\xd1\xd2\xdc\xd2\xd4\xd1\xdeէ\xca\xd8\xcc\xd3\xd5\xd2\xcd\xd6\xde\xcc\xda\xce\xd5\xd7\xd4\xe7\u05eb\xd6\xd8\xd5\xd1\xd9\xe1\xd5\xdb\xd1\xd8\xda\xd6\xd8\xd9\xe3\xd3\xdc\xe4\xda\xdc\xd9\xe6ݯ\xd5\xdf\xda\xdc\xdf\xdb\xd7\xe1\xdc\xde\xe0\xdd\xf0\xe0\xb3\xdc\xe1\xe4\xdf\xe1\xde\xe1\xe3\xe0\xe3\xe5\xe1\xe1\xe6\xe8\xe4\xe6\xe3\xe8\xe5\xea\xe5\xe7\xe4\xe6\xe8\xe5\xe4\xe9\xec\xe7\xe9\xe6\xef\xf2\xee\xf7\xf9\xf6\xfe\xff\xfc\xbd\bi5\x00\x00 \x00IDATx^\xed\x9d\x0fp\x13\u05fd\xef\xe1%\xb7\xf7\xf8Y\xba\xbdvjW&\xbevs=n\xb1\xc7\xf6\x98\xa8@\x84\xc3s\x80\x90\xe0\x10\xee\x03'J\xe19\xaf\xb9\x81\xa4\x80\xfb\x9cb\x87ۄ\xbf\xc1m\xd0\x00Uq\xc1<BL\x9d\xa7)\xc5@\xf0\xad\x15p\x9c8&\xb8Ԏi\xeb\xe4\xc6!\xb85\x93\xb9Q\xe2LP:\xb7ʄ\x99e2\xe2ܛy{ή\xa4]\xedY\xadd죕\xfc\xfb\f#\xfdt\xf6\xecٳF\xdf=\u007fvu\xbe3\xbe\x9a8\x18\x00\x80\xa9f\x86\x91\x0ec`T6\x00\x007\rH\x14\x00L\rH\x14\x00L\rH\x14\x00L\rH\x14\x00L\rH\x14\x00L\rH\x14\x00L\rH\x14\x00L\rH\x14\x00LM\nI\xb4\xb1\x91\x15\x02@z\xc3]\xa2C.\x8f\x14\xf8\xda\xdd\x1d\xbePjװ^\xfe0\u007f*y\x8e\x11\x12\x1e)))9\x81O\x88\xaf\x8fhw3\xe0\xc3Ғ\xfb5\x89\u007f}zn\xf9?\ai\xf8\xda\xdcW4\x9b\xd50K`\xd0(֯\xfcJ\xe8\x93\xe2\x10\n\x8c\x8f6\xf5$R\a\xf6Y\x18\x92\xc8!\x00\xde\x12\r\xecy\xb5\x85\x06c\xfb\xbc\x97\xbc\xfbƤ\xd4q\xd7\x1b1\xf6\x91x\xaa\xfc*#$\\\xd9Z\U000a6005s%[\xaf\xe0\x84y\xab\xb1\\\x93\xb6f\xee\xd1\xc6\xf2\xcfix\xb6\xfce\xcd\xe6(X%0\xf8\xf8ܹ\xa3%\xbf\v}R\x1cBA\x1cG\x9br\x12\xa9\x03\xfb,\x98\xbcy1\x12'r\b\x80\xb7D=\xa7ǨD\x83\a^\x15__=@/\xc1\xbeVc\x89^)\xdd\xca\b%\x0e\x97\b\xe2k\xb0\xe40\x9e\x00{5\x02\xfb\\,((\xc8\x1f\xe2h#\xb4%\xe8\xf0VX\xa2\xaaC(\x88\xe3hSN\xfcu\xd0;\v\x16+7(>\xc4\u007f\b\x80\xb7D\x87\xdc\x01\x1f\x95\xe8\xf0\x1e\xf2_\x1b\xd8C:\xb8]\xae\xae}\x86\x12m\x8c\xb4\x9c\x8d\xeaFt\xd2%z\xa5$\xb1~\xd8\x04$\x9a\xe8!\xccI\"g\xa1\x92(\x90\x00|%\x1a\xd87\x82%\x89\x9e>F\x13\x8eu\x8a/B\x00\xb7\x18I\xf4\xc3\xd2g\x19\xa1\x8cR\xa2\xe7\x1e]P:\xf7\x9f\x17\xd0\xf4\x13\x8f\x94\u07fbU\xdc\xf4viI\xc9\xf3W\x9e\xba\xbb\xfc\xfb\xea\xcb\xf7է\xe6\xcf\xd9 wSCy\x85\xb9%\x14\xd2P\u007f^^RRz\x82l\xfdqI\xe9K[\xef-\u007f\xf4cU^u\t\x11Xu \xc8\x12U\x1eB\x01\xf3hd\x84\xbd\x17北m\x9d\x13\xd2;\x9aDpn\xe9O\x16\xcc\u007f\xf3\xd99k\x02\xe2\xdf\u007f\xc3\xfc\xd2\x05O\xbc-\x1d\xe2p\xe3\x82;\x9f\xb8\xa2\n\xf5\xce\xf8\xafO\xcd]\xb0u\xeb\xdc9'\x14\x05+\xce\xe2\
|
|||
|
|
|||
|
"analysis/callers2.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\xfc\x00\x00\x01\xb0\b\x03\x00\x00\x00#z\x9e\xf7\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x04\x06\x02\a\t\x05\n\v\x15\a\x0e\x10\x0f\x11\x0e\x0e\x12\x1d\x15\x16\x15%\x19\x10'\x1a\f\x1e\x1d\x17\x16\x1e.!# #$\"$%#%'%'(&)(\"()'-+ *+),-+-.,12053'O.\x0f352786<:.9;8=?<B@4#Cxb<\x1aAB@j=\x11DFCLH9\x00f\x00\x00g\x00\x00h\x00\x00i\x01JLI\x00j\x02\x02k\x03\x04l\x050R\x95OPNVQ@\tn\a\fo\tRTQ\x83L\x1d\x0fq\v\vr\x17UVT\x0fs\x18WYV\x11t\x19_ZH,`\xae\x14v\x1b7]\xad>]\xa1Z\\Y\x16w\x1d\\^[\x19y\x1e:b\xac_a^Ya\x8bac`\x9aZ\x1d*{!@f\xb1Ke\x9e(|*dfclfP+\u007f,fheMj\xaf.\x81.Fm\xb1ikh0\x8301\x841/\x859Jq\xb5mol\x89j_oqn;\x86:>\x88<\xb3h\"{s[Vu\xb5sur?\x8a>@\x8b?uwtB\x8c@@\x8dG\\z\xba\xadq?y{xJ\x8fI^~\xb8L\x90K\x94wq\x85}d~\x80}O\x93Nb\x83\xbdN\x95U\x81\x83\x80W\x95V\xa7|e\x8e\x85gm\x87\xbcZ\x98Y[\x9aZ\x87\x89\x86]\x9b\\^\x9d]\xba\x82Z\\\x9ddr\x8d\u008a\x8c\x89\x96\x8cnd\x9ddf\x9ff{\x90\xc0\x8f\x91\x8eh\xa1h\xe3\x83+ЇK\u007f\x93\xc4j\xa3jz\x97Ɠ\x95\x92s\xa4l\xa0\x96wq\xa5s\x81\x9aė\x99\x96\xe4\x8b@u\xa9w\x9a\x9c\x99\x86\x9eȜ\x9e\x9b\xef\x904~\xaby\xa8\x9e\u007f\x9e\xa0\x9d\x80\xad|\xa0\xa2\x9f\xf9\x94.\xa1\xa3\xa0\xa2\xa4\xa1\x81\xb1\x85\xff\x952\x92\xa6ˤ\xa6\xa3\xb3\xa6\x82\xa5\xa7\xa4\x8b\xb2\x88\xa7\xa9\xa6\x8d\xb5\x8a\x8e\xb6\x8c\xaa\xac\xa8\xb9\xac\x88\x8d\xb8\x93\x9e\xaeΕ\xb8\x95\xad\xaf\xac\x97\xba\x96\xaf\xb1\xae\x98\xbb\x98\xa3\xb2қ\xbe\x9a\xb3\xb5\xb2µ\x90\xb5\xb7\xb4\xa3\xbf\x9d\xac\xb7Ң\xc0\xa4\xb7\xb9\xb6\xb9\xbb\xb8\xa5ħ\xb1\xbc\u05fb\xbd\xba\xa7Ʃ˾\x98\xbd\xbf\xbc\xa9ȫ\xb8\xc0կǫ\xbf\xc1\xbe\xc1ÿ\xb2ʮ\xc2\xc4\xc1\xbd\xc5\xda\xc4\xc6òͷ\xb9̸\xd6ǝ\xc7\xc9ƻκ\xbcϻ\xc4\xca\xd9\xc9\xccȾѽ\xc0ӿ\xca\xce\xde\xcd\xcf\xcc\xc4\xd0\xde\xc8\xd3\xc1\xcf\xd1\xce\xdfѥ\xc7\xd6\xc9\xd1\xd4\xd0\xd2\xd3\xdd\xca\xd8\xcb\xd3\xd5\xd2\xce\xd6\xdf\xcc\xda\xce\xe7\u05eb\xd6\xd8\xd4\xd4\xdb\xd0\xd8\xd8\xe3\xd8\xda\xd6\xd3\xdb\xe4\xda\xdc\xd9\xe6ݯ\xd7\xde\xd3\xd5\xdf\xda\xdd\xdd\xe5\xdc\xdf\xdb\xd7\xe1\xdc\xde\xe0\xdd\xf0\xe0\xb3\xdc\xe1\xe4\xdf\xe1\xde\xe1\xe3\xe0\xe3\xe5\xe1\xe1\xe6\xe9\xe4\xe6\xe3\xe8\xe5\xea\xe5\xe7\xe4\xe6\xe8\xe5\xe4\xe9\xeb\xe7\xe9\xe6\xef\xf2\xee\xfe\xff\xfc(t:\\\x00\x00 \x00IDATx^\xed\xbd\x0fp\x14G\x9e\xe7\xbb\xcc{\xbe}ϯ\x84zf$\xf5\xae4b\xef8M\xb4BB\xc7\x19\x9e%`\xd7z\b\x8b\xf3\xc2C\x1b\x02\xc1\x03\x9d\xe1\x16\xc6\xd8\xf3\b\xb3+0\xecB\x888\x9be,\xeel\xe4\x85~\x92\xb5\x1e\x99\x91X\xd9 \xa2ό\xa4\xc0\x9a6 ,\x06#\xd9H0\xd8\xc6\v\xde\x18\xf5\x10\xb6\xc5ȱ\xf66a\"\xda1\xd1\xe4M\xbcʪ\xee\xaa\xcc\xea\xcc\xca\xeeVw\xb6\xd4\xf5\xfb\x04!\x15\xa9\xac\xac\xac\xac\xfev\xfd\xe9\xea\xfa\xfc\xc1\xef\x93\a\x01\x000{\xf9\x03Q\xc2m\x10\xb5\r\x00\xc0\f\x06\xc2\x0f\x00\x0e\x05\xc2\x0f\x00\x0e\x05\xc2\x0fd+aQ\x05\xa7\x03\xe1\a\xb2\x92@c\xa1\U00084a12Á\xf0\xf7.\x9e\x14U\x91I\xc2ݙZ\xdc+\xaa2\xa3\x90\xd3\xdfpI\x89w \xaa\xe5p\xe4\x86?\xd0w\xbc\xbd\xfbB\x10O\x06/\xbc\xd1\xfe\x86>I\x94\xf2\xf8\xd7#kk\xf7=\xb0\xab\x11C\xb3\x92\x8b_e\xbe<\xa5ٮZ\x8b\xfd\x9f\xd9\f\x14\xfaDU\f\xa6\xb6\x15歈\xfb\b4\x89\xee\xb4\xe4\x1c\x14U\x91\x8b`t\x92\xeeo\"\xa3~U\xe9\x13U\x01\xa4\x86\u007f\xd2\xeb\xbb\x11\xb8q\xf2\xb8\x9a\xf3`\xe7I<\xd9\x19\xa4J\xb9\xecn8\xfbR\xed}\x9b\n\xb1L\xd5\xe7-U\u007f-ͫ\x9f\xb2\xa9՚\xd3a\xf3W\x1e\xbe\xfc7DU\f\x96\x16z\x1b\xf3l\xdf\xd9\b\x92\xea\x8eon\xab\xa8Jz\x18\x1ce\x16\x8bFG\xd8\xdf$\xdb%\x19V\xfc\xa2*\x80\xd4\xf0\xdf\xf6\xe2\x03\xb1\xa0\xf7\x06B\xfe\xee\x90:\x19\xea\xf6S\xa5<\xeeW\x9fA\x0f\x12\xcb>BM+\xd4\xccM\xe5\xadh\xb2\xa9s\xdbe\xf7W>q\xef\xc9єҊ\xc2\xf1f?\xc9\xee\xecqe\xe6\x00wa=\xbb\\4:\xa2\xfe&\xdb.\xc1\xb02$\xaa\x02H\r?\xd2B0\x89\xc3>\xa0\x9f\xf8\xf5\x0eP\xa5<>\xab~\x97\xffG\x1eM\xf5K\xbbP\xe7\xf2z\xbb<5\x16ś\xcbd\xb9\xa9\xc4\u007f\xac\x9alw\x82E\x8d\xa2*i\xa1\xacNT\x83\x8d\xa8\xbfɶK\x00\xe1\x8f\x03\xb9\xe1W\t\x05\xba}\xea;\xf8T\xe7\xe0Th\xca\xdf9E\x952\xf9vm\xb5\xc61\x84\x8eTW\x9fC\x9f\xd5Voœ\xb5g\x8fm\xad\xdd\xf7[\xad\xceg/\xac\xadm\x88LGi\xaao\xadC+\xbc8\xfc\xc1\xba\"W\xf1ʫj\xe16en\xeb\x93\xc5\xee\x957\xb5*\xa1\x02\xed\x9d!T\x98\xdbT\\4\xb8\xdd]\x15\xe4\xd4%g\v\xe6)J\xceq\xa4U\xc8\xf5\ue61f\xb7\\{ۚZ
|
|||
|
|
|||
|
"analysis/chan1.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x04\xc0\x00\x00\x02n\b\x03\x00\x00\x00aR\x8e\x00\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\a\n\a\x0f\x11\x0e\x1a\x1a\x14\x1f\x1f\x18!# #$\"\x15%D$%#%'%'(&+)\x1e()'*+)/,!+-*,-+-/,02/63(241564796<9.9;8#?r@=2<>;>@=C@4DA5AB@DFCFHELH:IKHKLJNOMUP?PRORTQTVSVWU]XGWYV_ZI,`\xaeZ[Y7]\xad[]Z\\^[9a\xab;b\xac<c\xad_a^faO>e\xafac`hcQcdbAg\xb2efdCi\xb4fheDl\xb0Mj\xafqjRikhGn\xb2Ip\xb4lmkKr\xb7npmUt\xb4{s\\rtqWv\xb6tvsuwt[y\xb9\\{\xbbxzw]~\xb8e|\xb8\x84|dX\x80\xbf{}za\u007f\xbf|~{~\x80}b\x82\xbc\u007f\x81~d\x84\xbf\x81\x83\x80|\x83\x97\x83\x85\x82l\x86\xbch\x88Ð\x86hn\x88\xbej\x8ać\x88\x86q\x8b\xc1\x89\x8a\x87t\x8e×\x8doz\x8e\xbf\x8c\x8e\x8b|\x90\xc1\x8e\x90\x8dx\x92Ȑ\x92\x8f~\x93ĝ\x93ux\x96Œ\x94\x90\x81\x95Ɠ\x95\x92{\x98Ȕ\x96\x94\xa2\x97y\x96\x98\x95\x81\x9aė\x99\x96\x84\x9cƇ\x9b̙\x9b\x98\x80\x9eͦ\x9c}\x87\x9fɜ\x9e\x9b\x89\xa1˞\xa0\x9d\xa0\xa2\x9f\xa1\xa3\xa0\xa2\xa4\xa1\x91\xa5ʏ\xa7Ѥ\xa6\xa3\x94\xa7̥\xa7\xa4\xb3\xa7\x83\x92\xaaԧ\xa9\xa6\x97\xaaϩ\xab\xa8\x9d\xac̫\xad\xaa\x9b\xaeӟ\xafλ\xae\x89\xad\xaf\xac\x9e\xb1ע\xb1ѯ\xb1\xae\xb1\xb3\xaf\xa5\xb4Ԣ\xb5۳\xb5\xb2ö\x91\xab\xb7ѵ\xb7\xb4\xa8\xb8ح\xb9ӷ\xb9\xb6\xb9\xbb\xb8\xb0\xbc\u05ed\xbdݻ\xbd\xba\xb3\xbeٽ\xbf\xbc\xb7\xbf\xd4\xcd\xc0\x9a\xbf\xc1\xbe\xb6\xc1ܹ\xc1\xd6\xc1ÿ\xbb\xc3\xd8\xc2\xc4\xc1\xbd\xc4ں\xc5\xe0\xc4\xc6\xc3\xc6\xc8\xc5\xc0\xc8\xdd\xd7ȝ\xbb\xca\u07bd\xc9\xe4\xc5\xc9\xd9\xc0\xcb\xe6\xca\xcc\xc8\xc7\xcb\xdb\xc2\xceܿ\xcf\xe2\xc9\xcd\xdd\xcd\xcf\xcc\xc9\xd0\xe6\xcc\xd0\xe0\xc6\xd2\xe0\xdfѤ\xcf\xd2\xce\xd1\xd3\xd0\xd2\xd3\xdd\xd3\xd5\xd2\xcd\xd5\xea\xce\xd7\xdf\xd5\xd7\xd4\xe6ת\xd6\xd8\xd5\xd1\xda\xe2\xd8\xda\xd6\xd9\xd9\xe4\xd3\xdc\xe4\xd5\xdb\xea\xda\xdc\xd9\xd8\xdd\xe0\xdc\xdd\xe7\xdc\xdf\xdb\xda\xdf\xe2\xe0\xde\xe2\xde\xe0\xdd\xf0\xe0\xb3\xd6\xe2\xf0\xdc\xe2\xe4\xe0\xe2\xdf\xde\xe3\xe6\xde\xe2\xf2\xe2\xe4\xe1\xe1\xe6\xe9\xe4\xe6\xe3\xde\xe7\xef\xe8\xe5\xea\xe5\xe7\xe4\xe6\xe8\xe5\xe4\xe9\xeb\xe7\xe9\xe6\xe8\xe8\xf3\xe8\xea\xe7\xe2\xeb\xf3\xe9\xeb\xe8\xec\xee\xeb\xe6\xef\xf7\xe8\xf1\xf9\xef\xf1\xee\xf0\xf0\xfb\xf1\xf3\xf0\xf1\xf6\xf9\xf4\xf6\xf3\xf7\xfa\xf6\xf5\xfa\xfd\xf9\xfb\xf8\xfa\xfc\xf9\xfd\xfb\xff\xf9\xfe\xff\xfc\xfe\xfb\xfe\xff\xfc\xc5\xe5[\xa2\x00\x00 \x00IDATx^\xec\xbdqLS[\xda\xef\xef93\x8b\xab}\x87Ax+\xc3}\xf5^8#\xbe\x1c\xbc^gk\xa9\x17\u007f\xe2A.U\xe1u^\x05މ9\xf6\xe8}\xc9\x18\xc5\x174z\x8fg<W\xb7i\x86\x1e\xa0D\x99`1\xbcD0\f\rp\x022\x04\xa5i\x99\x89\xa9F\xc2;\x8d\x8d\x9c\xd83\x89\xf6L\x8c\x90BL\xbb\xfe\xfc\xe5\x97\xdc\xff&\xbf\xb5\xd6\xdem\xf7nw[@\xd9Px>\t\xddk\xaf\xfd\xac\xb5\xf7j\xd9߮\xf5\xec\xd5\xf5l\xf8\xdb{\x80\x01\x00\x00V\x8e\xbfmH&R\x89HV;\x00\x00\xc02\x02\x02\x06\x00@\xca\x02\x02\x06\x00@\xca\x02\x02\x06\x00@\xca\x02\x02\x06\x00@\xca\x02\x02\x06\x00@\xca\x02\x02\x06\x00@\xca\x02\x02\x06\x00@\xca\x02\x02\x06\xac\v\x02\xc9\f\x80\x94\x04\x04\fX\xfbx*\xb6\xa0\xfdɌ\x80T\x04\x04\fxO\xda\v\xbc\xc9L\xd4\xc1[Ю| \x90\x97\xc7\xf7\xb8\x95\x8f\x01\xa9\x8d\xda\x02\xe6\xe9j6Y\x06|\xb2\xe4|\x13/М\xa0\xe0_\xaf\x95\xe9k\x83\t\fbiۈ\x046\xb6%3]\x94\xed\x12\xa9C\x9b\xe8\rf\xcd@u\xca\x06w\xd9\x05d\xeds)\x1f\xc6\xd8L\x0eבz\x102\xc53\x890\x9aƪK{ \xecNnByds\x84de(\x9c\xc0\xb1'#\xbb\xb47{:\xf6H2\x1aйd&K`\xec\xd0p2\x13F\xbf\x8e\x13\xd0\xf5\x93KIkP4\x1aG]\x8a\xf9@ꣲ\x80M\xf3V\xa7\xdb\xd9\xd6\xec\x93&g\xf8Q\x0f\xe1\x01?\x9e\xa0\xe4\xe9C\x9d\x17\xf5o\x13\x18\xc4Ҁl\xb6\xaf\xd1e\x9b\r)\xff_SzG\x17n\xbbDB\xa7\xf0\x96f\xec\"\x9b]\xe9\xa5qz,\xbe\x81MGl\xbd\xbfٖ\xeeT>\x8e}f\xd4\xe0\xc5\xde\x06d\xf6ű\x88\x9c\r\xcf\x0f\xb2\x06\r\xfa\xc5\xfd\xc1#\x1a\xf2\xea\xa6\xcd\x1c\x8c)Օ\xb1\x83oَP\xbc3\xc7\xe77if!\x11>q<\x1e=Y\x84\xc1pq\u007f|C\tw8\xbb\xbd\x93\xeb\xb0\xdbw\xdf!{֍W\x95\x8c\x86\x90M)\x1bX\x03\xa8,`.\x9e\xf6\xe4}\xbcS\x96t\xd0\xfb\xd1\xd74\x90\xa0\xe0\x0f\\'\x0e\xce&0Pಆ\xfe\uf4bb5\xfdr\\\x9b\x1d\xa5\v\xb7]\"\xa1S\xe0S{3|؛\xbe\xf7T\\S\r\xed\x9b\xf9r\xf6\xc4;\xee`]\x89^\xe4\x88g 9\x1b\x16\x1b\x14\xa6N\xa3\x94\xcb\xf0f\xee':\xe7۶x\x01\x9bԄZ#=\xb1\x04oaH\xaek.(\x1aD\x90\x19,\xb0\xb3ݡ\xc3\xf817\x81\xb1\xbe\x83\xee\x9e\xd1(\x8d\x14\x15Z\f\xac\x1
|
|||
|
|
|||
|
"analysis/chan2a.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x04\x89\x00\x00\x01\x95\b\x03\x00\x00\x00M@Q-\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\n\x03\x01\x04\x06\x02\a\n\x06\x0e\x10\r\r\x12\x14\x0e\x12\x1d\x11\x13\x10\x16\x18\x15\x1b\x1a\x13\x13\x1e7\x1f\x1f\x18!# #$\"%$\x1d%%\x1e$%#%'%'(&+)\x1e()'*+)/,!+-*,-+-/,02/63(241564796<9.9;8<=;=>FA?3>@=#CxDA5AB@DFCFHEKH<MH7IKHKLJNOMUP?PROSTRUVTWXV]XG<Z\xa5_ZIY[Y,`\xae7]\xad[]Z\\^[9a\xab;b\xac<c\xad_a^faO]ao>e\xafac`hcQbdaAg\xb2efdCi\xb3ghfMj\xafEm\xb1qjRikhIp\xb4lmkLr\xb7npm{s\\rtqWv\xb6tvsuwt\\z\xbaxzw]~\xb8e|\xb8\x84|dX\x80\xbf{}za\u007f\xbf|~{~\x80}b\x82\xbc\u007f\x81~d\x85\xbf\x82\x83\x80\x83\x85\x82m\x87\xbdh\x88Ð\x86hj\x8ać\x88\x86r\x8c\xc1\x89\x8b\x88t\x8eė\x8do\x8c\x8e\x8bz\x8f\xc0\x8e\x90\x8dx\x92Ȑ\x92\x8f~\x93\xc3x\x95Ē\x93\x90\x81\x95\xc6{\x98Ȕ\x96\x93\xa0\x96w\x96\x98\x95\x82\x9aė\x99\x96\x83\x9cņ\x9b̀\x9d̚\x9b\x98\xa5\x9b|\x87\x9fɃ\xa0Ϝ\x9e\x9b\x89\xa1̞\xa0\x9d\xaa\xa0\x81\xa0\xa2\x9f\xa1\xa3\xa0\xa2\xa4\xa1\x91\xa5ʮ\xa4\x85\x8f\xa7Ѥ\xa6\xa3\x94\xa7̥\xa7\xa4\xb4\xa7\x83\x92\xaaԧ\xa9\xa6\x97\xabЩ\xab\xa8\x9d\xad̫\xad\xaa\xa5\xad\xc1\x9f\xaeλ\xae\x89\xad\xaf\xac\x9e\xb1ע\xb1ѯ\xb1\xae\xa5\xb4Ԣ\xb5۳\xb5\xb2ö\x91\xb5\xb7\xb4\xac\xb7ҩ\xb8ط\xb9\xb6\xb9\xbb\xb8\xad\xbcܱ\xbc\u05fb\xbd\xba\xb3\xbeٽ\xbf\xbc\xb7\xbfԱ\xc0\xe1\xbf\xc1\xbe\xb6\xc1ܹ\xc1\xd6\xce\xc1\x9b\xc1ÿ\xbb\xc3\xd8\xc2\xc4\xc1\xbd\xc4ں\xc5\xe0\xc4\xc6\xc3\xc6\xc8\xc5\xc0\xc8ݽ\xc9\xe4\xd8ɞ\xc6\xca\xda\xc0\xcb\xe6\xca\xcc\xc9\xc3\xceܿ\xcf\xe2\xc8\xcd\xdc\xcd\xcf\xcc\xc8\xd0\xe6\xcc\xd0\xe0\xcf\xd1\xce\xc6\xd2\xe0\xdbҥ\xe1ѥ\xd1\xd3\xd0\xd2\xd3\xdd\xd3\xd5\xd2\xcd\xd5\xeb\xce\xd7\xdf\xe6\u05eb\xd6\xd8\xd4\xd1\xda\xe2\xd8\xda\xd6\xd8\xd9\xe3\xd6\xda\xea\xd3\xdc\xe4\xda\xdc\xd9\xd8\xdd\xe0\xd2\xde\xec\xdc\xde\xdb\xdc\xdd\xe7\xe0\xde\xe2\xdb\xe0\xe2\xde\xe0\xdd\xf0\xe0\xb3\xd5\xe2\xf0\xe0\xe2\xdf\xde\xe3\xe5\xde\xe2\xf2\xe2\xe4\xe1\xe1\xe6\xe9\xe4\xe6\xe3\xde\xe7\xef\xe8\xe5\xea\xe5\xe7\xe4\xe4\xe9\xec\xe7\xe9\xe6\xe8\xe9\xf3\xe2\xeb\xf3\xe9\xeb\xe8\xec\xee\xea\xe6\xef\xf7\xe8\xf1\xf9\xef\xf1\xee\xf0\xf0\xfb\xf2\xf4\xf1\xf1\xf6\xf9\xf4\xf6\xf3\xf7\xf9\xf6\xf5\xfa\xfd\xf9\xfb\xf8\xfa\xfc\xf9\xfd\xfb\xff\xf9\xfe\xff\xfc\xfe\xfb\xfe\xff\xfc\xfa<^\xc5\x00\x00 \x00IDATx^\xed\xbd\x0fX\x15\u05fd\xef}^\xdb\xf7\xcd\xed\xdb\xc5y`\x1f\xe9\x16\nD\xde\xcb{\xc0s\x94\x83xߛ\x8cA\xbc\xafy\xfd\xcbE\xe5`Qo\x8f1\xb4\xc46\x86T\xebc8\xf14\x98\xee\xa6H\x11o\x12RJ\xbc\x1e\"\t\xdd\x16\"\xd1Rk$\xec<MHKbO\tI(m\xec\xb17x5h\xaa\xd3\xd4\x1eBD=>\xf3\xbc\xb3\xe6\xefZ\xb3g\xefa#\xcc\xf0\xe7\xfbɓ\xbdמ\xf9\xad5k\x96{\xbe\xac\xb5f\xf6\xfa\xfe\x854vD\x00\x00\x18\x17\xfe\xc2In\xa2\xe0T6\x00\x00\x8c\x0e(\x11\x00\xc0{\xa0D\x00\x00\xef\x81\x12\x01\x00\xbc\aJ\x04\x00\xf0\x1e(\x11и\xec\x14\x00\xc0\xc4\x01%\x02\x94\xbe\xa2T\xb2\xdc)\b\x80\tc\xda+Q}N\x9fSH\x8c\xf4\xe7\xd4;\x85LB\x94v\x88\\\xf5\xac\xac@\xd3\xe9\b\xfb\x00\x98x\\W\xa2\xe6\x10}\xbdT]\xa9R\xa3n\xed\f4D\xcb$\xfe\xcfG\xd7\xe4o\xbb\x125Ğ\x1dd\xbbSH\xcc\xec\x88\xdb\xe1\x14\xe2D\xe7b\u007f\xda\xea\xe6\xb4>q\x1d!\xc4ߥonJ\x89\xde\f\f\xf5Y\xb3\xe7\xd5.\x18u\xb8\xd6\x0e\x91\xaa~\x8a4\xdan\a\xc0%\xdcV\xa2\xbe\xca6\xfav\xbe\xb2\xbdW\xe6X\xe5)e\xeb\x99@Ku\xb4\\\xe2W\v\x0e\xef\xce\xff j\x88-\x15qUN!c\xa0!\xbe\xc2)Ġ\xb9\xddfc\xa3?;\xb0\u007f>!!\xb1'\x18\xdcCZ\xf5\xed\r\xfe\xa7l\xa2M\xcc\xc2*Ha\xfd\x16BF[\x0f\xa3\x1d\"T\xbd\x8d\x04\xed6\x03\xe0\x16.+Qo\xad\xaaDb\xe7\x80\xfc2PݢnnhꉪD\x1f\b\x87\xc4+\x17\xa2E\xd8\xd3\xed\xbb?z@\u007fn\u007f\xf4\x00{\xca|=N!:\xd9+÷\xf5'\xdd;(\x9f}\x06Q\xfa\x87m\xa6\x129a\x14\xd6E\xca\xe4\xd7M\xa3U\"\xa6\x1d\xec\xab\x1eC\x1d\x00\x98\b\xdcU\xa2\xe6\xca\xe6@\x9b\xf9\xf1\xe0S\x97\x94\xf7Ϊ\x81ިJ\xf4\xaep4\xda\xee\x88\x14\xa5\rD\x0f\xe8$\x9d\xd1\x03\xec\x19H+r\n\xd1Y`\xa3D\xf7'*sW\x15D\x19\x96Š\x02Fa\x85)\xb2\x94\x89!\xb2'Z\xb4\t\xd3\x0e\xf6U\x8f\xa1\x0e\x00L\x04\xee*\xd1\xf9\x01\xb1\xba\xcd\xf8\x14\xaaT'\x93\xcf\x06\xba\xc4(Jtq\x8d\xa0\xb0W\x14\x1f\x15\x84#\xe2\xbby\xc2\x06\x9a\xcc;\xbcwC\xfe\xb6\xdf(1\xef>\xb4&\xaf@K\x9b\f&mՓ]+S\x12R\xef\xe9\xe5vWd6\x84H\xa8!s\x0f_\u0095Û\xf37\x1e\xba\xc2\x1d\x
|
|||
|
|
|||
|
"analysis/chan2b.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x04Q\x00\x00\x011\b\x03\x00\x00\x00\x83\v\xcdh\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x03\x06\x02\b\n\x06\x0e\x10\r\x19\x1a\x18!# #$\"$%#%'$&(%'(&()'*+)+-*,-+-.,01/2313425747968:7:;9<>;>@=AB@CEBEGDFHEIKHKLJMOMPROSURUVTVXV,`\xae7]\xad[\\Z8^\xae8`\xaa]^\\:b\xab;b\xac<c\xad_a^Fb\xa1=d\xae?e\xb0ac`Kd\x9dAg\xb2cebefdCi\xb3fheLi\xafDl\xafMk\xb0Fm\xb1ikhei\x8fjliGo\xb3Ip\xb5lnkJq\xb6ll\x8dnolKr\xb7pl\x88Us\xb3Vu\xb4xp\x84Xv\xb6surZx\xb8uwt[z\xba\\{\xbbxzw\\}\xb7\x8evve|\xb8^\u007f\xb9{}z\x95wq_\x80\xba|~{a\x82\xbc~\x80}b\x83\xbd\u007f\x81~c\x84\xbed\x85\xbf\x81\x83\x80k\x86\xbb\x84\x85\x83m\x87\xbdn\x88\xbe\x86\x88\x85p\x8a\xbf\x87\x89\x86\xb3\x81_\x88\x8a\x87q\x8c\xc1\x8a\x8c\x89s\x8dË\x8d\x8ay\x8e\xbe\u0083Wz\x8f\xc0\x8d\x8f\x8c|\x91\xc1\x8f\x91\x8eƇT\x90\x92\x8f~\x93\xc4x\x95Ā\x94Œ\x94\x91z\x97\xc6{\x98Ȕ\x96\x93\x96\x97\x94\u074bE\x81\x9aė\x99\x96\x98\x9a\x97\x84\x9c\xc6\xe1\x8eA\x9a\x9b\x98\xe9\x8e<\x86\x9eț\x9d\x99\x87\x9fʜ\x9e\x9b\x9d\x9f\x9c\x89\xa1˞\xa0\x9d\xf6\x935\xa0\xa2\x9f\x90\xa3ȡ\xa3\xa0\xa2\xa4\xa1\x92\xa5\xca\xff\x952\xa4\xa6\xa3\x94\xa8ͦ\xa8\xa5\x96\xa9Η\xaaϨ\xaa\xa7\x98\xabѩ\xab\xa8\x9d\xac̪\xac\xa9\x9f\xaeά\xae\xab\xa0\xb0Ю\xb0\xad\xa2\xb2Ұ\xb2\xaf\xa4\xb3Բ\xb4\xb1\xa5\xb5ճ\xb5\xb2\xb4\xb6\xb3\xab\xb6ѵ\xb7\xb4\xac\xb7Ҷ\xb8\xb5\xad\xb9ӷ\xb9\xb6\xb9\xbb\xb8\xb0\xbbֻ\xbd\xba\xb2\xbdؼ\xbe\xbb\xb3\xbeٶ\xbeӽ\xbf\xbc\xb8\xc0տ\xc1\xbd\xb9\xc1\xd6\xc1ÿ\xbb\xc3\xd8\xc2\xc4\xc1\xbc\xc4پ\xc5\xdb\xc4\xc6ÿ\xc6\xdc\xc0\xc8ݻ\xca\xde\xc7\xc9\xc6\xc5\xc9\xd9\xc9\xcb\xc7\xc0\xcc\xda\xc7\xcb\xdb\xca\xcc\xc9\xcc\xce\xcb\xc3\xcf\xdd\xca\xce\xde\xce\xd0\xcc\xcc\xd0\xe0\xcf\xd1\xce\xc6\xd2\xe0\xd0\xd2\xcf\xd1\xd3\xd0\xc8\xd4\xe2\xd2\xd2\xdc\xd2\xd4\xd1\xd3\xd5\xd2\xcd\xd6\xde\xd4\xd5\xdf\xd5\xd7\xd4\xcf\xd8\xe0\xd6\xd8\xd5\xd8\xd8\xe3\xd2\xda\xe2\xd8\xda\xd6\xd3\xdc\xe4\xda\xda\xe5\xd9\xdc\xd8\xd8\xdd\xe0\xdb\xdd\xda\xdc\xde\xdb\xdc\xdd\xe7\xd9\xdf\xe1\xdd\xdf\xdc\xe0\xde\xe2\xdb\xe0\xe3\xde\xe0\xdd\xdf\xe1\xde\xdc\xe2\xe4\xe0\xe2\xdf\xdd\xe3\xe5\xe1\xe4\xe0\xdf\xe4\xe6\xe0\xe5\xe8\xe3\xe5\xe1\xe4\xe6\xe3\xe8\xe5\xea\xe2\xe7\xea\xe5\xe7\xe4\xe3\xe8\xeb\xe6\xe8\xe5\xe4\xe9\xec\xe7\xe9\xe6\xe8\xea\xe7\xeb\xed\xea\xf0\xf2\xef\xf4\xf7\xf3\xfa\xfc\xf9\xfe\xff\xfcS\x19\x91\xf7\x00\x00 \x00IDATx^\xed\x9d}P\x14\xd7\xde\xe7\xcdݧQ\t\xa8\xf8\xae\xb9r\x91\xd82\x16\xb8S\xd9I\x14\x1c\xf7֔\x0fٰ\x9aD\xddK\xb6\xa2\\\xa3\x0fX>IH=\x88k\x89Z<P\xeel\x15(W\x85X\x18//F \xa5\x80o1\xbe\x11\x1c\xd1@\xe2\vP\xb7\\ū\xa5\xa4H\x95rE\v\x84\x92\x02\xce>\xcfsS\xdb\xe7\xf4L\xf7\xe9\x99\xd3Ӄ6\r\xcc\xfc>\u007f̜9\xfd;\xa7\xcf\xe9\x9e\xfe\xce\xe9\xd3=\xfd\x1d\xf3\xeb+\x80\x00\x00\x00h\xc6h\xa9\x867\xb4*\a\x00 \xc0\x00E\x01\x00@?@Q\x00\x00\xd0\x0fP\x14\x00\x00\xf4\x03\x14\x05\x00\x00\xfd\x00E\x01\x00@?@Q\x00\x00\xd0\x0fP\x14\x00\x00\xf4\x03\x14\x05xE\xfa\xb5\x02\x80@\x02\x14\x05x\x15Z\xe2\xa7poi\x05\x01\x01\x04(\xca\b\xe6PD\xabV\x881\xb4E\x1cb/\xe8\x9f=\xdb^\xde\xc4^\x06\x04$\x06)ʱzW\xaa\xfe\xf0\xee\xfc\xf38\xd1Q\x95o?t\xa9\xc7-\xa9\xc6\xdfv,\x89I\xee\xf3\x16\xe1A\xe1XNd\xec\x01\xadPL\xdd\xfc\xd0)\x8b\x8fM\xb9\x87\xe2\x85\"\xa1\u05f5\xc2\tG9.\xa2\x1f\x1d\x10\n|\xa3\x1eT>\xb9ȕl]1%dA\xbf{\xae\x1a\x9b\xb9\x8dZ!/AM\xdc\x19\xad\x10\xc2i\x13/b:!4%\xe8\vf\xd0%\xee03\x1f\bX\x8cQ\x94{\xd9߉\x89\x9er\xfb\xa9\xa6\x8b\xd97\x10j\xcf=T\xd7t~wa\x8f\"\xa9\xca'q_\xa7\x9b\x9fx\t\xf0d3WU\x95\xc9m\xad\xaa\xe26\xab\xc6\x1c\xbd\xe8J\x1d\t\x8d\xb0\xef\x9f\xc3q\xf5\xe8\x16.vJ\xb5\bMW9\x17R\x85:\x0ep\xe5]\xca\x05r\xbd\b\x95\x84J\x8a\xf6\xe6\x94\xcc\xf8\x906\xf7\\\x152\x83v\x8b\t\xba2&\xb5\xd7\x06\x11p\xd6|B=\x90\xe2 \xefp\x94\xf2\xc5\x0eǼ\x83§\x92\xb1\xdbYA\xdfq\xc7Y\xd9@\xe0b\x88\xa2\xb4\xe4\xbb\x14\xa5\xdc\xde\"\xfcRg\v#\x96o\xf2\xf1ou\x9b\xfd\xbc\"\xa9\xc6c\xbe\x14\xf5u\xaa/g\xb1u<B\xdfbi\b٪\x1a\xf3\xbb\xc5\xceD\xdbķ\x04Q\xe8\x98ɑ\xc1Է>*\n\xea\xe0\x96\xc6#\xd4\xc4u\xb8\xe5K\xf5b\xa4\xa9\xcb6n;\xeaw\x85jMh\xde\x18\xbf֙RT&\xd3\x1a\xe9:'Z\x9d\xca\f\x90Q\x04\xf88\xd2+6!\xd4\xc0_E\xc8\\\x8c?\xae\x0f\xbe\xc5\b\xf2yC\x01\x81\x82\x11\x8ar,\xfb\x98]T\x94
|
|||
|
|
|||
|
"analysis/error1.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x04\xc1\x00\x00\x00\xbd\b\x03\x00\x00\x00\x8d\xa5\x9a\x96\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x02\x05\x01\n\x03\x01\x05\a\x03\x1e\x01\x00\v\r\n\x10\x12\x0f\x16\x17\x13y\x00\x01\x19\x1b\x18\x1b\x1b\x14\x83\x01\x00\x8c\x00\x00\x8c\x00\x04 \x1f\x19!# #$\"%%\x1e$%#&'%'(&+)\x1e()'++$*,)/,!-/,02/63(241\x98\x1b\x1b786;8,\x82%#:;9><0>?=C@4@B@\xa0*,CEB\x9c.-KH<MH7\x00f\x00\x00g\x00\x00h\x00JKI\x00i\x01\x00j\x02MOL\x04l\x05TO>\tn\aPRP\xa9:<WRA\fo\t\x0fp\vTVT\fr\x17\x11t\x19^YG\xaaDCY[X,`\xae7]\xad\x15v\x1c\\^[\x19y\x1e;b\xac_a^faO>e\xaf*{!bda)}*Bh\xb2egdLj\xafpiR.\x81.Em\xb1ikh\xb3XX0\x8301\x841/\x858Jq\xb5mol;\x86:Vu\xb4>\x89={t\\tvs@\x8b?B\x8c@@\x8dG\\z\xbay{xJ\x8eI^~\xb8\x84|d\xbbkkL\x90K~\u007f}O\x93Mb\x83\xbdN\x95UW\x95V\x82\x84\x81\x8f\x85hm\x87\xbdZ\x98Y[\x9aZ\x87\x89\x86\xc0{|]\x9c\\\\\x9dcr\x8d\u0096\x8cnd\x9dd\x8c\x8e\x8b{\x8f\xc0f\x9fg\x90\x92\x8f~\x93\xc4j\xa3jy\x96Ŕ\x96\x93s\xa4l\xa1\x96xq\xa5s\x81\x99×\x99\x96\x83\x9bť\x9b}u\xaaw\x9a\x9c\x98Ǒ\x92\x9c\x9e\x9b~\xaby\x88\xa0ʞ\xa0\x9d\x81\xad|\xab\xa0\x82\x8e\xa2ǡ\xa3\xa0\xa2\xa4\xa1\x81\xb1\x85\x92\xa5ʋ\xb2\x88\xb4\xa7\x83\xa6\xa8\xa5\x8d\xb5\x8a\x97\xabЩ\xab\xa8\x8e\xb6\x8c\x8d\xb8\x93\xab\xad\xaa\xb9\xad\x88\x9f\xaeή\xb0\xad\x96\xba\x96\x98\xbb\x98\xa3\xb2Ұ\xb2\xaf٨\xa6\x9b\xbe\x9aµ\x90\xb4\xb6\xb3\xa3\xbf\x9d\xac\xb7Ҷ\xb8\xb5\xa2\xc0\xa4\xb7\xb9\xb6۰\xb3\xa5ħ\xba\xbc\xb9\xb1\xbdקƩ\xbd\xbf\xbc\xa8ǫ̿\x99\xafƫ\xb8\xc0տ\xc1\xbe\xb2ɮ\xd0Þ\xc2\xc4\xc1\xbc\xc4\xd9⽾\xc4\xc6òͷ\xbb\u0379\xc0\xc8ݻ\xca\xde\xc7\xc9\xc5\xd8ɝ\xbdϻ\xc6\xca\xda\xc0\xcc\xda\xca\xccɿҾ\xd7ϡ\xcd\xcf\xcc\xc4\xd0\xde\xcb\xcf\xdf\xc8\xd3\xc1\xe0ѥ\xd0\xd2\xce\xc8\xd6\xc9\xea\xcc\xcb\xd1\xd3\xd0\xd2\xd3\xdd\xca\xd8\xcb\xd3\xd5\xd2\xdf֨\xcd\xd6\xde\xcc\xda\xce\xe6֪\xd6\xd8\xd5\xd4\xdb\xd0\xeb\xd4\xd2\xd2\xda\xe3\xd8\xd9\xe3\xeaۯ\xda\xdc\xd9\xd7\xde\xd3\xe1\xdb\xda\xd5\xdf\xda\xdc\xdd\xe7\xdc\xdf\xdb\xd7\xe1\xdc\xde\xe0\xdd\xdc\xe1\xe3\xf0\xe0\xb3\xe0\xe2\xdf\xe2\xe4\xe1\xee\xe1\xe2\xdf\xe5\xe7\xe4\xe6\xe3\xe8\xe5\xea\xe5\xe7\xe4\xf2\xe4\xe5\xe6\xe8\xe5\xe3\xe9\xeb\xe7\xe9\xe6\xe8\xea\xe7\xeb\xed\xea\xf6\xf0\xef\xf2\xf4\xf1\xfe\xf8\xf7\xf9\xfb\xf8\xfe\xff\xfc!l\x99S\x00\x00 \x00IDATx^\xed\x9d\x0fXTם\xf7\xf7\xd9\xd9\xd8w\xd3$C\x03\x9b\x12-K^\xd6fm\xfb\xdc\xe1\x19\xa9\xbe+\f\x8d\x1d\x14\xd7?1+\xbeVQ\x8aV1\x1b1\x18\xe7a\x13\xa3\x82ƄL\n\x19%) B\xe6\x89E\x1eY3*\xbe\">\x19Me\xc1\x96hqm\x12\xe8S\xa6ѱ\xb6\xda\xe4\xf2(\xac\xe4y\xaf\xe7\xed\xa6\xe5y\xcf9\xf7߹ý3(\x03\x97\xd1\xdf\xe7\xd1;\x87;\xbf\xf3\xbb眹\xf7;\xe7\xfc\xee\x99{\xfejh\x14 \x00\x00\x00\xf3\x18\x1a\xfa\xabH*\x15\x8eH\xee\x01\x00\x00\xc6\x10P0\x00\x00b\x17P0\x00\x00b\x17P0\x00\x00b\x17P0\x00\x00b\x17P0\x00\x00b\x173\x15,p\xa0\xaa\xa2\xfa\x18O\x92\u0099\xba\x8a\xba\xceH\x19\x00\x00\x004\x98\xa8`A\xb7\xb7\xb3\xbb\xb3\xae\nK\x98\xe0\xf5\x9c\xee>Yq2R\x16\x00\x00\x00\x16\x13\x15\xac\xcbݍ\xb7\xbc\x1bw\xbd\xceT\\#;*\xf8Hy\x00\x00\x00\x18LT0D\xf5*\xe8\x0e \xe4=@wTB'\f\x00\x80;\xc1L\x05\xc3\xf4wW{\x05\x84\xea|\xf4/\xef\xfe\b\xe6\x00\x00\x00,\xa6*X\xd0\xedv{HO\xecX\xe5\x00\xde\x0ex\xea\"\xe5\x00\x00\x00`0U\xc1P0\xd0^M\"\xf9\xbc\xc7\x1b\xec\x0fx\xddՑ2\x00\x00\x000\x98\xab`\x98\x81\xea&\xbc\xbd\xe6\xc5ݱ\x16\xaf7\x925\x00\x00\x00\x83\x89\n6 З3n\xfa\xda\u007fM@\x95\xc7\xc2f\x00\x00\x00\xd0b\x9e\x82\t\x95b\xf8\xfeL\x05V\xb0A\x92\xea\"\xb7%\x01\x00\x00F\x8cy\n\x86\xaa\xe8\x14\n:\x8a\xect\a\x11\xe2\xab|\x91\xb2\x00\x00\x00\xb0\x98\xa8`]\xee\xa6\xce\xeeN\x1a\xc9\xefr\x9f\xec>S\xe9\x85\t\xad\x00\x00\xdc\x11&*\x18\n4UWԵ\x90y\x14\xe8t\xb5\xc7{Z\x88\x94\x01\x00\x00@\x83\x99\n\x06\x00\x000:@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]@\xc1\x00\x00\x88]bK\xc1\\.\xbd$\x00\x00\xf7+&+X\xbb[z4~\xc0\xeb9\x10\xf1\t\xad\x1fs;u\x92\x84z\x8e\xe3\xcaQ9\xde\xd6\x0fϦ\xd0k\xe3\x16\xe1\x17\x176K\xeb\tc\xa7\xe5\xb8\xe3p\x98w\xef\xd0\xd9\xe8\xc0\a\xab\xc1/5\x1c\xc7\xea\xf7\x8b\x1cר\xfcq\xeeG\x8e
|
|||
|
|
|||
|
"analysis/help.html": `<!--{
|
|||
|
"Title": "Static analysis features of godoc"
|
|||
|
}-->
|
|||
|
|
|||
|
<style>
|
|||
|
span.err { 'font-size:120%; color:darkred; background-color: yellow; }
|
|||
|
img.ss { margin-left: 1in; } /* screenshot */
|
|||
|
img.dotted { border: thin dotted; }
|
|||
|
</style>
|
|||
|
|
|||
|
<!-- Images were grabbed from Chrome/Linux at 150% zoom, and are
|
|||
|
displayed at 66% of natural size. This allows users to zoom a
|
|||
|
little before seeing pixels. -->
|
|||
|
|
|||
|
<p>
|
|||
|
When invoked with the <code>-analysis</code> flag, godoc performs
|
|||
|
static analysis on the Go packages it indexes and displays the
|
|||
|
results in the source and package views. This document provides a
|
|||
|
brief tour of these features.
|
|||
|
</p>
|
|||
|
|
|||
|
<h2>Type analysis features</h2>
|
|||
|
<p>
|
|||
|
<code>godoc -analysis=type</code> performs static checking similar
|
|||
|
to that done by a compiler: it detects ill-formed programs, resolves
|
|||
|
each identifier to the entity it denotes, computes the type of each
|
|||
|
expression and the method set of each type, and determines which
|
|||
|
types are assignable to each interface type.
|
|||
|
|
|||
|
<b>Type analysis</b> is relatively quick, requiring about 10 seconds for
|
|||
|
the >200 packages of the standard library, for example.
|
|||
|
</p>
|
|||
|
|
|||
|
<h3>Compiler errors</h3>
|
|||
|
<p>
|
|||
|
If any source file contains a compilation error, the source view
|
|||
|
will highlight the errant location in red. Hovering over it
|
|||
|
displays the error message.
|
|||
|
</p>
|
|||
|
<img class="ss" width='811' src='error1.png'><br/>
|
|||
|
|
|||
|
<h3>Identifier resolution</h3>
|
|||
|
<p>
|
|||
|
In the source view, every referring identifier is annotated with
|
|||
|
information about the language entity it refers to: a package,
|
|||
|
constant, variable, type, function or statement label.
|
|||
|
|
|||
|
Hovering over the identifier reveals the entity's kind and type
|
|||
|
(e.g. <code>var x int</code> or <code>func f
|
|||
|
func(int) string</code>).
|
|||
|
</p>
|
|||
|
<img class="ss" width='652' src='ident-field.png'><br/>
|
|||
|
<br/>
|
|||
|
<img class="ss" width='652' src='ident-func.png'>
|
|||
|
<p>
|
|||
|
Clicking the link takes you to the entity's definition.
|
|||
|
</p>
|
|||
|
<img class="ss" width='652' src='ident-def.png'><br/>
|
|||
|
|
|||
|
<h3>Type information: size/alignment, method set, interfaces</h3>
|
|||
|
<p>
|
|||
|
Clicking on the identifier that defines a named type causes a panel
|
|||
|
to appear, displaying information about the named type, including
|
|||
|
its size and alignment in bytes, its
|
|||
|
<a href='http://golang.org/ref/spec#Method_sets'>method set</a>, and its
|
|||
|
<i>implements</i> relation: the set of types T that are assignable to
|
|||
|
or from this type U where at least one of T or U is an interface.
|
|||
|
|
|||
|
This example shows information about <code>net/rpc.methodType</code>.
|
|||
|
</p>
|
|||
|
<img class="ss" width='470' src='typeinfo-src.png'>
|
|||
|
<p>
|
|||
|
The method set includes not only the declared methods of the type,
|
|||
|
but also any methods "promoted" from anonymous fields of structs,
|
|||
|
such as <code>sync.Mutex</code> in this example.
|
|||
|
|
|||
|
In addition, the receiver type is displayed as <code>*T</code> or
|
|||
|
<code>T</code> depending on whether it requires the address or just
|
|||
|
a copy of the receiver value.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
The method set and <i>implements</i> relation are also available
|
|||
|
via the package view.
|
|||
|
</p>
|
|||
|
<img class="ss dotted" width='716' src='typeinfo-pkg.png'>
|
|||
|
|
|||
|
<h2>Pointer analysis features</h2>
|
|||
|
<p>
|
|||
|
<code>godoc -analysis=pointer</code> additionally performs a precise
|
|||
|
whole-program <b>pointer analysis</b>. In other words, it
|
|||
|
approximates the set of memory locations to which each
|
|||
|
reference—not just vars of kind <code>*T</code>, but also
|
|||
|
<code>[]T</code>, <code>func</code>, <code>map</code>,
|
|||
|
<code>chan</code>, and <code>interface</code>—may refer. This
|
|||
|
information reveals the possible destinations of each dynamic call
|
|||
|
(via a <code>func</code> variable or interface method), and the
|
|||
|
relationship between send and receive operations on the same
|
|||
|
channel.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Compared to type analysis, pointer analysis requires more time and
|
|||
|
memory, and is impractical for code bases exceeding a million lines.
|
|||
|
</p>
|
|||
|
|
|||
|
<h3>Call graph navigation</h3>
|
|||
|
<p>
|
|||
|
When pointer analysis is complete, the source view annotates the
|
|||
|
code with <b>callers</b> and <b>callees</b> information: callers
|
|||
|
information is associated with the <code>func</code> keyword that
|
|||
|
declares a function, and callees information is associated with the
|
|||
|
open paren '<span style="color: dark-blue"><code>(</code></span>' of
|
|||
|
a function call.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
In this example, hovering over the declaration of the
|
|||
|
<code>rot13</code> function (defined in strings/strings_test.go)
|
|||
|
reveals that it is called in exactly one place.
|
|||
|
</p>
|
|||
|
<img class="ss" width='612' src='callers1.png'>
|
|||
|
<p>
|
|||
|
Clicking the link navigates to the sole caller. (If there were
|
|||
|
multiple callers, a list of choices would be displayed first.)
|
|||
|
</p>
|
|||
|
<img class="ss" width='680' src='callers2.png'>
|
|||
|
<p>
|
|||
|
Notice that hovering over this call reveals that there are 19
|
|||
|
possible callees at this site, of which our <code>rot13</code>
|
|||
|
function was just one: this is a dynamic call through a variable of
|
|||
|
type <code>func(rune) rune</code>.
|
|||
|
|
|||
|
Clicking on the call brings up the list of all 19 potential callees,
|
|||
|
shown truncated. Many of them are anonymous functions.
|
|||
|
</p>
|
|||
|
<img class="ss" width='564' src='call3.png'>
|
|||
|
<p>
|
|||
|
Pointer analysis gives a very precise approximation of the call
|
|||
|
graph compared to type-based techniques.
|
|||
|
|
|||
|
As a case in point, the next example shows the dynamic call inside
|
|||
|
the <code>testing</code> package responsible for calling all
|
|||
|
user-defined functions named <code>Example<i>XYZ</i></code>.
|
|||
|
</p>
|
|||
|
<img class="ss" width='361' src='call-eg.png'>
|
|||
|
<p>
|
|||
|
Recall that all such functions have type <code>func()</code>,
|
|||
|
i.e. no arguments and no results. A type-based approximation could
|
|||
|
only conclude that this call might dispatch to any function matching
|
|||
|
that type—and these are very numerous in most
|
|||
|
programs—but pointer analysis can track the flow of specific
|
|||
|
<code>func</code> values through the testing package.
|
|||
|
|
|||
|
As an indication of its precision, the result contains only
|
|||
|
functions whose name starts with <code>Example</code>.
|
|||
|
</p>
|
|||
|
|
|||
|
<h3>Intra-package call graph</h3>
|
|||
|
<p>
|
|||
|
The same call graph information is presented in a very different way
|
|||
|
in the package view. For each package, an interactive tree view
|
|||
|
allows exploration of the call graph as it relates to just that
|
|||
|
package; all functions from other packages are elided.
|
|||
|
|
|||
|
The roots of the tree are the external entry points of the package:
|
|||
|
not only its exported functions, but also any unexported or
|
|||
|
anonymous functions that are called (dynamically) from outside the
|
|||
|
package.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
This example shows the entry points of the
|
|||
|
<code>path/filepath</code> package, with the call graph for
|
|||
|
<code>Glob</code> expanded several levels
|
|||
|
</p>
|
|||
|
<img class="ss dotted" width='501' src='ipcg-pkg.png'>
|
|||
|
<p>
|
|||
|
Notice that the nodes for Glob and Join appear multiple times: the
|
|||
|
tree is a partial unrolling of a cyclic graph; the full unrolling
|
|||
|
is in general infinite.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
For each function documented in the package view, another
|
|||
|
interactive tree view allows exploration of the same graph starting
|
|||
|
at that function.
|
|||
|
|
|||
|
This is a portion of the internal graph of
|
|||
|
<code>net/http.ListenAndServe</code>.
|
|||
|
</p>
|
|||
|
<img class="ss dotted" width='455' src='ipcg-func.png'>
|
|||
|
|
|||
|
<h3>Channel peers (send ↔ receive)</h3>
|
|||
|
<p>
|
|||
|
Because concurrent Go programs use channels to pass not just values
|
|||
|
but also control between different goroutines, it is natural when
|
|||
|
reading Go code to want to navigate from a channel send to the
|
|||
|
corresponding receive so as to understand the sequence of events.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Godoc annotates every channel operation—make, send, range,
|
|||
|
receive, close—with a link to a panel displaying information
|
|||
|
about other operations that might alias the same channel.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
This example, from the tests of <code>net/http</code>, shows a send
|
|||
|
operation on a <code>chan bool</code>.
|
|||
|
</p>
|
|||
|
<img class="ss" width='811' src='chan1.png'>
|
|||
|
<p>
|
|||
|
Clicking on the <code><-</code> send operator reveals that this
|
|||
|
channel is made at a unique location (line 332) and that there are
|
|||
|
three receive operations that might read this value.
|
|||
|
|
|||
|
It hardly needs pointing out that some channel element types are
|
|||
|
very widely used (e.g. struct{}, bool, int, interface{}) and that a
|
|||
|
typical Go program might contain dozens of receive operations on a
|
|||
|
value of type <code>chan bool</code>; yet the pointer analysis is
|
|||
|
able to distinguish operations on channels at a much finer precision
|
|||
|
than based on their type alone.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Notice also that the send occurs in a different (anonymous) function
|
|||
|
from the outer one containing the <code>make</code> and the receive
|
|||
|
operations.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Here's another example of send on a different <code>chan
|
|||
|
bool</code>, also in package <code>net/http</code>:
|
|||
|
</p>
|
|||
|
<img class="ss" width='774' src='chan2a.png'>
|
|||
|
<p>
|
|||
|
The analysis finds just one receive operation that might receive
|
|||
|
from this channel, in the test for this feature.
|
|||
|
</p>
|
|||
|
<img class="ss" width='737' src='chan2b.png'>
|
|||
|
|
|||
|
<h2>Known issues</h2>
|
|||
|
<p>
|
|||
|
All analysis results pertain to exactly
|
|||
|
one configuration (e.g. amd64 linux). Files that are conditionally
|
|||
|
compiled based on different platforms or build tags are not visible
|
|||
|
to the analysis.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Files that <code>import "C"</code> require
|
|||
|
preprocessing by the cgo tool. The file offsets after preprocessing
|
|||
|
do not align with the unpreprocessed file, so markup is misaligned.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Files are not periodically re-analyzed.
|
|||
|
If the files change underneath the running server, the displayed
|
|||
|
markup is misaligned.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Additional issues are listed at
|
|||
|
<a href='https://go.googlesource.com/tools/+/master/godoc/analysis/README'>tools/godoc/analysis/README</a>.
|
|||
|
</p>
|
|||
|
`,
|
|||
|
|
|||
|
"analysis/ident-def.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\xd2\x00\x00\x00\xf5\b\x03\x00\x00\x00\x8b\f=\xff\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE!# #$\"$%#($#&'%'(&-'\")+(4,\",.+01/>/\"241A2%685G6$8:7;<:Q9$>@=W>#AB@CEB\\B'cC$GIF\x00f\x00\x00g\x00\x00h\x00gF'\x00i\x01KLJ\x00j\x02\x02k\x03\x04l\x05mJ&\x06m\x06sJ(OQN\vo\b\x0ep\nwN&\nq\x16TUS\x10q\f\fr\x17\x0fs\x18~R%WYV\x12u\x1a,`\xae7]\xad\x15v\x1c\x86T)\x16w\x1d[]Z9a\xab\x19y\x1e^_];b\xac<c\xad\x8dZ(>e\xaf)z ac`+{\"(|*\x92]%cebAh\xb2egd+\u007f,\x9a_)Li\xafDl\xb0.\x81.ikh0\x830Ho\xb31\x841/\x858Jq\xb6mol\xa3f);\x86:Us\xb3\xabg->\x88<Wu\xb5\xaej(sur@\x8b>B\x8c@\xb3m,vxu@\x8dGC\x8dA\\z\xbbxzwI\x8dH]}\xb7K\x8fJ\xb9r*_\x80\xbaM\x91L}\u007f|\xc1s-O\x93MP\x94Oc\x84\xbeN\x95U\x81\x83\x80\xc7x+W\x95VX\x97Xm\x87\xbcY\x98Y\xd1z(Z\x99Z[\x9aZ\x87\x89\x86\\\x9b[r\x8c\xc2\xd6~-^\x9d]\\\x9dc\x8a\x8c\x89d\x9ddz\x8f\xbff\x9ff\x8f\x91\x8eh\xa1hޅ+~\x93\xc4j\xa3j\x92\x94\x91k\xa4ky\x97\xc6s\xa4lq\xa5s\x95\x97\x94\xec\x8a,\x83\x9bŘ\x9a\x96\x9a\x9b\x98u\xaaw\x86\x9e\xc8\xf1\x8e/\x9b\x9d\x9a~\xaay\x88\xa0˞\xa0\x9d\x80\xad|\xf7\x93-\xa0\xa2\x9f\xfd\x92/\x81\xb0\x85\xa2\xa4\xa1\x92\xa5\xca\xff\x952\x82\xb2\x86\xa4\xa6\xa3\x83\xb3\x87\x8b\xb2\x88\xa6\xa8\xa5\x96\xa9\u038d\xb5\x8a\xa9\xab\xa8\x8e\xb6\x8c\x9e\xad͍\xb8\x93\xac\xae\xab\x95\xb8\x95\xa1\xb1ї\xba\x96\xaf\xb1\xae\x98\xbb\x98\xa4\xb3Բ\xb4\xb0\xa5\xb5՛\xbe\x9a\xb5\xb7\xb4\xac\xb7ѣ\xbf\x9d\xa2\xc0\xa4\xb7\xb9\xb6\xa4¦\xb9\xbb\xb8\xa5Ĩ\xb1\xbd\u05fb\xbd\xba\xa8Ǫ\xb7\xbfԯƫ\xbe\xc0\xbd\xb9\xc1\xd6\xc0¾\xb2ɮ\xc1\xc3\xc0\xbb\xc3ؼ\xc4ٱ̶\xc4\xc6ó\u0378\xb9̸\xc1\xc8\u07bb\xca\xde\xc7\xc9ƻκ\xbdϻ\xca\xcc\xc8\xc7\xcbۿҾ\xc4\xcf\xdd\xcd\xcf\xcc\xcb\xcf\xdf\xc8\xd3\xc1\xc6\xd4\xc7\xcd\xd1\xe1\xd0\xd2\xcf\xc8\xd6\xca\xd2\xd2\xdd\xd2\xd4\xd1\xca\xd8\xcc\xd3\xd5\xd2\xce\xd6\xdf\xcc\xda\xcd\xd5\xd7\xd4\xd6\xd8\xd5\xcd\xdc\xcf\xd4\xdb\xd0\xd8\xd9\xe3\xd2\xdb\xe3\xd5\xdc\xd1\xd9\xdb\xd8\xd7\xde\xd3\xd5\xdf\xda\xdc\xde\xdb\xda\xdf\xe2\xd7\xe1\xdc\xe0\xde\xe2\xde\xe0\xdd\xd8\xe2\xdd\xdd\xe2\xe5\xe0\xe2\xdf\xe2\xe4\xe1\xdf\xe5\xe7\xe4\xe6\xe3\xe8\xe5\xea\xe2\xe7\xea\xe5\xe7\xe4\xe6\xe8\xe5\xe4\xe9\xec\xe7\xe9\xe6\xfe\xff\xfc\x93\x8dkM\x00\x00 \x00IDATx^\xed\x9d\u007ft\x14\xd5\xdd\xff\a%\x064*\x15\xe1y<\xb3=lbJ0@\x94\x86F\xac(\x98o崆\xf4\x89i\xfa\x8d\xf6\xa4R\u007f`A\x10\x1a͓ñ\"\x02\x15\x1e\x8c\xf5l\xea\x81ش\x91`h\xf6(\xb89r\xb2\x12\xe4Ⱥ(<\x12\xda''\x94\xd2\xf6!\xc5\b\xc8S(ȓv\xd7Գ\xde\xef\xf9\xde{\xe7\u05fd\xb3wfv\x03a\xc8\xec\xe7\xf5\xc7\xee\xec\xe43\xf7\xde\xf9̼\xf7\xde;;\x99\xb7\xf4\xff.\x00\x04\x00\xc0e\x86\xe4$[;\x9c\n\a\x00\xe0R\x03\x92\x06\x00O\x01\x92\x06\x00O\x01\x92\x06\x00O\x01\x92\x06\x00O1\x92$]_/Z\x04\x00\x80\xc1=I\xf7w4\aZv\x9dS?u\a\x82\xb6ј?\xc9\xeb\x04\x8b\x84_˄9\xed\xc9\xdbX\xf0\xb1O.u\x8a\xb1'\xc5\x12\x9e\x95\xe5\x90S\xccP\xe9$;]\x82\x17z\x17\x14\x16TE\xca\xf6!\x94h\x983\xcd7\xed\x9eF\x84\xa2\xb2\\\x95@!\x1c\x11q*\xc7\x0e\xf1n\xa6\xb8\xf3\xa8\x0eW\x9f\xd7\xe7\x14\xa5s\xb6\xbe(wA\xc2)*\x89\xc8\xf4\x9dN!\x19\x85k\x92>\x11\b\xf6\x1c\xeb\xd9\xd2<@?\x9d\v\xecjr\xd8\x00\xd5\xe6\x9e\x16,\x12ο*\xb7G\xbb\x96\xca\r\xc9\x1bYp\xa0\xce\xef\x14\xe2\x80}\t\x91^\xe5\xfdT\xd4\xd7h\x13\x96\x1aZa&\x06\xf6E\v\x16\x1dƊ\xf6=ڹ}\x11\xfd\xee\x88\xc8\vں\xda\x17\xcaQ\x14\x8fȹQ\x14\vɑ\xb8p\xe3T\x11\xeff\x8a\xe9;\x1e\x8d\xb6\xc9\xfb\x9c\xa2t\xaa\x8b\xda\xea\xf2\xce;E%ѕ\xa7}kZ$*\xc3pM҇\x02\xc7\xf0\xeb@\xa0\x87~\nv\x1cs\x92t\x9f\xbcZ\xb0\xa8\x10\x91\U0006937b\xc4?\xa3TiL霴ö\x84\u007f[\xa2-\xf9/\\\xd2Faf\n\xd7◚j\xb2XG$\xbd\xba\x80\b8>\x05\xa7'&\xd7\xd6\xe1\xfeT\x8eYm\x9b\"\xe2\xddL9}\aS\x97\xf4y\xb9\x15%\x86\xd2\\\xbdc\xb7NT&ᚤ\x11\xed\x9eO\x06\xfa\xc9[w\xd3@\xbf\x93\xa4\xeb\xfc\xa7\x04\x8b\n\x8a\xa4\xe3\x05+Q\xaa\xa4|NZb[B\xf9Ŕt\xb9\xbd\xa4K\xe8\xe0\xa4W\xee\xc4\xfd\\\x05]]QC$\x1dɏ\x8d(I\xf7\xc9\x17:\x80\xb6NT&ឤ1\xb1\xa3-A\xf2\x15{.p\b9I\xfac\xdf*\xc1\xa2\x8a\"i\xb4\xb2\x90\xbcn\xafʻg\xb5r&\xf7-*\xf4\x15-\xa0\xfao+\xcf+k\xa3+O\xd5Θ\xb2H\x1d92\xb1\x1a\xbd>Yn\xe8\xab-ɭI\xb0\x01\x03Kf\xf8J\x16\xf6\x9aK\x88֔\xf8\n\x17\x94p%\xec\x94\x15\xca\xc9\a\xff\xda\xd5\xf7\xe4\xd5\x1c\xa7\u007f\x10<EFBFBD>
|
|||
|
|
|||
|
"analysis/ident-field.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\xd2\x00\x00\x00\xde\b\x03\x00\x00\x00\xe6g\xc8\n\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x02\x05\x01\n\x03\x01\x05\b\x03\f\x0e\v\f\x10\x1c\x0e\x11\x14\x10\x12\x0f\r\x15$\x16\x17\x14\x1c\x1b\x15\x1b\x1d\x1a\x1f\x1f\x19\x13#A!# $$\x1d#$\"$%#&'%\x19(G((!'(&+)\x1e\x14+N()'++$*,)/-\"*.0-.,02/63(241685<9-5:=:;9=?=CA5AB@CEBKH<MH7HIG\x00f\x00\x00i\x01JLI\x00j\x02SN=MOL\x05m\x05PRO\fo\t4U\x98XSBTUS\x0fq\v\fr\x177Y\xa3WYV,`\xae7]\xad\x15w\x1c\\^[c^L9a\xab\x19y\x1e_`^;c\xad=d\xae)z!ac`De\xa3?f\xb0)|*Bh\xb3egdghfLi\xafDl\xb0qjSikh/\x82/Ho\xb3/\x859Jq\xb6mol;\x86:Ut\xb4Xv\xb6?\x8a>|u]tvsB\x8c@@\x8dG\\z\xbby{x]~\xb7e|\xb8K\x90J\x85}e_\x80\xba}\u007f|O\x93Nb\x83\xbdN\x95Ud\x85\xbf\x81\x83\x80W\x95Vl\x87\xbc\x90\x86hZ\x98Yo\x89\xbf\x87\x89\x86]\x9c\\\\\x9dds\x8dÕ\x8cn\x8b\x8d\x8az\x8e\xbfe\x9ef\x8d\x8f\x8c|\x90\xc1\x9b\x91s\x90\x92\x8fi\xa2i~\x93\xc4x\x95Ā\x94œ\x94\x91\x9f\x95w{\x98\xc7s\xa4lq\xa5s\x95\x97\x94\x82\x9aė\x99\x96\x83\x9cƙ\x9b\x98u\xaaw\xa6\x9b}\x87\x9f\xc9~\xaay\x9c\x9e\x9b\x89\xa1ˀ\xad|\x9f\xa1\x9e\x8f\xa2ǫ\xa1\x82\xa1\xa3\xa0\xa2\xa4\xa1\x92\xa5ʂ\xb1\x85\xa5\xa7\xa4\x8a\xb2\x87\xb4\xa7\x83\x8b\xb3\x89\x96\xa9Χ\xa9\xa6\x98\xabю\xb6\x8c\xaa\xac\xa9\x9e\xad͍\xb8\x93\xba\xad\x88\xad\xaf\xac\x95\xb9\x95\xa1\xb0Я\xb1\xae\xa3\xb2Ә\xbc\x98\xa5\xb5ճ\xb5\xb2\x9b\xbf\x9bµ\x90\xab\xb7ѵ\xb7\xb4\xa3\xbf\x9d\xa2\xc0\xa4\xad\xb9ӷ\xb9\xb6\xb9\xbb\xb8\xb0\xbc֦Ũ\xbb\xbd\xba\xb3\xbeٽ\xbf\xbc\xa8ǫ\xb7\xbfԯƫ\xbf\xc1\xbd\xce\xc0\x9b\xb9\xc1ֲɮ\xc1ÿ\xbb\xc3\xd8\xc2\xc4\xc1\xbd\xc4ڲ̷\xc4\xc6\xc3\xc0\xc8ݻ\xca\xde\xc7\xc9ƻκ\xd9ɝ\xc6\xca\xd9\xc0\xcc\xda\xc7\xcb\xdb\xca\xccɿҾ\xc9\xcd\xdd\xd7ϡ\xcd\xcf\xcc\xc4\xd0\xde\xc8\xd3\xc1\xcc\xd0\xe0\xcf\xd1\xce\xe1ѥ\xd2\xd2\xdd\xc9\xd7\xcb\xd2\xd4\xd1\xcd\xd6\xde\xcc\xda\xce\xe6֪\xcf\xd8\xe0\xd5\xd8\xd4\xd2\xda\xe2\xd8\xda\xd6\xd8\xd9\xe3\xd5\xdc\xd1\xd3\xdc\xe4\xda\xdc\xd9\xe6ݯ\xd8\xdd\xe0\xd5\xdf\xda\xdc\xde\xdb\xdc\xdd\xe7\xda\xdf\xe2\xd7\xe1\xdc\xe0\xde\xe2\xde\xe0\xdd\xf0\xe0\xb3\xdf\xe1\xde\xdc\xe2\xe4\xde\xe3\xe6\xe1\xe3\xdf\xe3\xe5\xe2\xe1\xe6\xe9\xe8\xe5\xea\xe5\xe7\xe4\xe4\xe9\xeb\xe7\xe9\xe6\xf1\xf3\xf0\xfa\xfc\xf9\xfe\xff\xfcŃ\x89%\x00\x00 \x00IDATx^\xed\x9d\x0fX\x14\u05fd\xf7/\u05fc\xf5m\xea\x9d(o\xb9o/)\x04S\xac\xb6Y\xd9摖p\xcd<f\t\xe8\x8d\x18\xb9\x8a \x1aR\xa4&J\xa3VL\x8c\x18b\x1e5ָ\xc1\x10,i@\xafJ\xb34\x06\xb4\xa4P\xe3\x1fb\xc0\x98\bj0&$/)i\xc0\x98\r\x1a\x93\x9a?\xf8\xc8B\xe0\xb4<\xef9gfg\xce\xcc\xce\xec,\b;\xec\xf2\xfb<\x0f\xbbgg\u007fs\xe6\xec\xd9\xf3\xdd\xf3g\x86\xf9\xfeK\xff\xa0A\x00\x00\x8c8\xfe\xc5H\xb8\xfa\x18e\r\x00\x80\xff\x01I\x03@P\x01\x92\x06\x80\xa0\x02$\r\x00A\x05H\x1a\x00\x82\n\x904\x00\x04\x15 i\x00\x18Zz\x8d\x02\x86\x17\x904\x00\f!\xce\xf4\x89\xdc,\xa3\xa0a%\xd8%]6\xcdi\x14b&\x1d\xd3ʌB\x02\x91Q\\\xebS\xa6\xd8+?4\n\x1aV̓tӾ\xa2\x92cb\xfa\xb4\xdd\xe15\xf6\x9b\x8ds\x13s\xfb\xbc\x86h\xf3\x18\xb7\xc6(d\xa8h]\x95\x94\x92w2\xe5K\xf5\xf6Ol\xfc\"\xadx\x81\xc7Ư\xf3\xd8V\xc4a\xa2f\x1c\xd7\bgh\t\xe5\xa6\xf8\x1a\xeb#$\xb35h\r~,\xf0\x12%\x1c\xd8\x1bC_\xeb\xfbyL\xf2\xaaw\x8c\xe2|D\xabև\x86\x06n\x9fQ\xc8pc\x96\xa4]\x95\xf6\xc3-\xc7\xed\xcd\xf4\xc5\xe5\x82C\xc5^\xa3\x1fJ\xa9\xc8O\xba\xe65D\x93\xcd㋌B\x86\x8a\x13I\xbf\xaa\xa8\xce\xe2\xf9\x0f\xd4o\xf4\x9d\xd9h\xd3\xdaA\xc41a\xb3zӕ\"n]U\xd14\xaeJ+^\xe6pz\x98ϱީ\x12\u007f\x11HfN\xe4|\x8c+\xba\xe2-\x9c\x1e\xd8\v\xc3P\xeb\xd7\xf6\xf3{O\xeeϾ\xf3\xa4Q\xa07N\xbe+%5j}h\xa8\xe5j\x8cB\x86\x1b\xb3$]Y\x80\x87fN{\x13}\xe1\xa8l\xf7*\xe9\xaf\xf8r\xd4\xd7\xe5-B\x9b\x96\xd0e\xde\x03:\xe2:\xbc\a\xf8\xccWɹ=\buexJ\x1a\xa1Ro\x92F+\xc2\xda՛Nӟ\xfa\xb8\xc9\x1a\xd1,k\xc2|\x8f\xf5\xca\xedsĄ\x90Y\x15w\xda[\xb4x`]\x86\xa5\xd6[\xf9\x13\xf8\xd71'\xc3(\xce\x1b\xd9k\xe5\xb4F\xad\x0f\t\xb5\xdca\xa3\x90\xe1\xc6$I;\xedo\x92'\xa138]\xe4rz\x95\xf4y\xfe\x88\xb7\xb7uI\x9f\xd8\xe9=\xe0\xb4Q\xe3\xf5\x99¤\xcf\xc8S9\xff\x91\xe7{\xde%\xdd91]\xbdIP\xd6fΠ\xf4\x8c\xa4\rc\xbd\x123\xa4\x92\x1e\x96Z\xa7\x92\xc6\xd5;\x88\x1fv\x89,F\xd2\x1a\xb5>$\x8c^I\x1f.\xe8\x96\xd2W\n\x9a\x91\x17I\xf7\xcc\xe5)O#\xb4\x85\xe7\xabŹ\xe9\x16\xdeV\xf1t
|
|||
|
|
|||
|
"analysis/ident-func.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03\xd2\x00\x00\x00\xda\b\x03\x00\x00\x00}\xf6\x8a\x1c\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\x01\x04\x00\x02\x05\x01\n\x03\x01\x05\b\x03\t\f\b\t\x0f\x11\x0e\x10\f\x10\x12\x0f\x13\x15\x12\x15\x16\x14\x0f\x17&\x19\x18\x11\x1a\x1a\x13\x1a\x1c\x19\x1c\x1c\x16\x13\x1e7 \x1f\x19!# $$\x1d#$\"$%#'(&)(\"+)\x1e\x14+N++$*,)/-\"-.,.2402/63(241:7+685;9-:;9?<0=?=C@4AB@CEBGE8KH<MI8HIG\x00f\x00\x00i\x01JLI\x00j\x02SN=MOL\x05m\x051S\x96WRAQSP\fo\t\x0fq\vUVT\fr\x175[\xa4XZW,`\xae7]\xad\x15w\x1cb]K\\^[9a\xab\x19y\x1e;c\xad=d\xae`b_)z!?f\xb0)|*Bh\xb3egdLi\xafDl\xb0qjRikh/\x82/Ho\xb3/\x859Jq\xb6mol;\x86:Ut\xb4Xv\xb6?\x8a>|u]tvsB\x8c@@\x8dG\\z\xbby{x]~\xb7e|\xb8\x84|dK\x90J_\x80\xba}\u007f|O\x93Nb\x83\xbd\x8b\x81cN\x95Ud\x85\xbf\x81\x83\x80W\x95Vl\x87\xbc\x8f\x86hZ\x98Yo\x89\xbe\\\x9a[\x87\x89\x86\x93\x89k^\x9d]\\\x9dds\x8dË\x8d\x8a\x96\x8doz\x8e\xbfe\x9ef\x8d\x8f\x8c|\x90\xc1\x9b\x91s\x90\x92\x8fi\xa2i~\x93\xc4x\x95Ā\x94œ\x94\x91{\x98\xc7s\xa4l\xa0\x96xq\xa5s\x97\x99\x96\x83\x9bţ\x99{\x99\x9b\x98u\xaaw\xa7\x9d~\x87\x9fɜ\x9e\x9b\u007f\xabz\x89\xa1˫\xa0\x82\x9f\xa1\x9e\x8f\xa2ǡ\xa3\xa0\xa2\xa4\xa1\x92\xa5ʂ\xb1\x85\xa5\xa7\xa4\x94\xa8ͳ\xa7\x82\x8b\xb3\x89\xa7\xa9\xa6\x96\xaa϶\xa9\x84\x8e\xb6\x8c\x9d\xac̪\xac\xa9\x8d\xb8\x93\xba\xad\x88\x9f\xafέ\xaf\xac\xa1\xb1ѯ\xb1\xae\x97\xbb\x97\xc0\xb3\x8e\xa5\xb4Ԛ\xbe\x9a\xb3\xb5\xb2\xab\xb7ѵ\xb7\xb4\xa3\xbf\x9d\xa2\xc0\xa4Ÿ\x93\xb7\xb9\xb6\xae\xbaԹ\xbb\xb8\xb0\xbc֦Ũ\xbb\xbd\xba\xb2\xbdض\xbeӽ\xbf\xbc\xa8ǫ\xafƫ\xcd\xc0\x9a\xb9\xc0տ\xc1\xbe\xba\xc2ײɮ\xc2\xc4\xc1\xbc\xc4ٲ̷\xd2Š\xc4\xc6\xc3\xd5ƚ\xc0\xc8ݻ\xca\xde\xc7\xc9ƻκ\xd8ɝ\xc0\xcc\xda\xc7\xcb\xdb\xca\xccɿҾ\xc9\xcd\xdd\xd7ϡ\xcd\xcf\xcc\xc4\xd0\xde\xdfϣ\xc8\xd3\xc1\xcc\xd0\xe0\xcf\xd1\xce\xe1Ҧ\xc9\xd7\xcb\xd2\xd4\xd1\xd2\xd3\xdd\xdf֨\xcd\xd6\xde\xcc\xda\xce\xe6֪\xd6\xd8\xd5\xd0\xd9\xe1\xd8\xd9\xe3\xd5\xdc\xd1\xd3\xdc\xe4\xda\xdc\xd9\xe6ݯ\xecܰ\xd5\xdf\xda\xdc\xdc\xe7\xdc\xde\xdb\xda\xdf\xe2\xd7\xe1\xdc\xe0\xde\xe2\xde\xe0\xdd\xf0\xe0\xb3\xdf\xe1\xde\xdd\xe3\xe5\xe1\xe3\xdf\xe3\xe5\xe2\xe1\xe6\xe9\xe8\xe5\xea\xe5\xe7\xe4\xe4\xe9\xeb\xe7\xe9\xe6\xf1\xf3\xf0\xfa\xfc\xf9\xfe\xff\xfcd\x82\x05\xe8\x00\x00 \x00IDATx^\xed\x9d\x0fT\x14\xd7\xdd\xf7\x1fZ\xf3\xc6\xe6M\xda\xd7Q\xf6\xe9S\xe2K\xa9%F\xdbd\x95x\xdeJ\xa0fN\\@\x13\x90*\x82Ę*M\xa2\xb4Q⟜h0\xc4\x1c\xff\xb4.\xc1@\f\th\"I\xa4\xc1\x83A\xa4V\xadx\fA\x03\x96'\xc1D\x92\x87\xa4\xa6nj$QL#\t\x1c\x16\x02\xb7\xf5\xbc\xf7ޙ\x9d\xb93;\xb3\xb3\xc0\xee\x0e\f\xbf\xcf\xd1ݻw\u007f\xf7\xcfܹ\u07fd\u007ff\x98\xdf\u007f\\\x1b<\b\x00\x80\xe1\xc6\u007f\x18\xe9\xd6\aFy\x03\x00\x10r@\xd2\x00`)@\xd2\x00`)@\xd2\x00`)@\xd2\x00\x10`\xfa\x8c\f\x82\nH\x1a\x00\x02\x89+c\x127\xc7\xc8(\x98X^\xd2e3یL̤}f\x99\x91\xc9Hd\x14\xb7\xfaԩ\xce\xcaO\x8c\x8c\x82\x89\x89\x92n\xdeWTrB\f79\xcb}\xda~\xb3y^bN\xbfO\x13m\x9e\xe4\xd6\x19\x99\x04\x8as9I\xa9\xb9\xa7R\xbfR\xc7\u007f\xee\xe0\xefӲ\x17xr\xc2\x06\xaf\xb8\"\x0e\x135\xfb\xa4\x869Ck87\xd5_[?!\x99\xadC\xeb\xf0k\x81\x0f+\xa1`_\x04\xbeիxLr\xce\xfbFv~\xa2\xd5ꁡ\x81\xdbgd\x12dL\x93\xb4\xbb\xd2y\xb4\xf5\xa4\xb3\x85~h/8\\\xec\xd3\xfa\x91Ԋ\xbc\xa4\x0e\x9f&\x9al\x9dPdd\x12(\xea\x93~Sqp)\xcf\u007f\xa4\xfe\xa2\xff\x9d\xcd\x0e\xad\x04\"\xe5\xe1[\xd5QW\x8b\xb8\r\xd5E3\xb9j-{\x99\xa3\x196\xbfm}S-\xfe\"\x90\xcc\xdaPۓ\\\xd1U_\xe6\xb4`\x1f\x04\xa1ջ\xab\xf8\x97NUe\xddu\xca\xc8\xd0\x17\xa7\xceJA\x8dV\x0f\f\xb5\\\x8d\x91I\x901Mҕ\x05.\x84ڜ\xcd\xf4Cy\xa5˧\xa4;\xf8\n\xd4\xdf\xed\xcbB\x9bV\xdbr\xdf\x06mq\x81\x9a v$\xaf\xe9\xc5=/\xd3[\xd2\b\x95\xfa\x924Zis\xa9\xa3\x9a\xe8O\xfd\xcc)\x1a\xd6,\xebl\xfe\xdb\xfadF\x8a\x18\x102\xab\xe6\x9a|Y\x8b\x05\xeb\x12\x94V?\xc7\xd7\xe3_\xc7\xecL#;_d\xad\x97\xc3\x1a\xad\x1e\x10j\xb9\xa3F&A\xc6,I\xbb\x9c\r\xe4M\x18\f\x9a\x8aܾ%}\x81?\xee\xebk]2&u\xfa6h2\xea\xbc~S\x98t\x99\xbc\xed\xe5?\xf5\xfeη\xa4;'e\xa8\xa3\x04em\xe5\fj\xcfH\xda\xd0\xd6'\xd3\x03*頴:\x954\xaa\xe0\a\xf1\xc3.\xb1\x94\x91\xb4F\xab\a\x84\xd1+\xe9\xa3\x05=R\xf8jA\v\xf2!\xe9\xdey<%\x1f\xa1m<\u007fP\\\x9bn\xe3\x1d\x15\xf9\x99I9_P\x9b\v\xeb\xe79RŰ\x8c{\xa24\\\xb4\xa4D\x85O\x9a\xa
|
|||
|
|
|||
|
"analysis/ipcg-func.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xaa\x00\x00\x01\xb1\b\x03\x00\x00\x00\x9d\xa2d\x9d\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x02\x04\x00\a\t\x05\n\f\b\x0e\x10\r\x13\x15\x12!# '(&+-*2319:8?@>QSPVXU,`\xae7]\xadZ\\Z8^\xae8a\xaa:b\xab;b\xac^`]<c\xad=d\xae?e\xaf@f\xb0Ag\xb2Bh\xb3Ci\xb4fgeCk\xafEj\xb5Lj\xafMk\xb0Fm\xb2Ol\xb2Ho\xb4Ip\xb5Jq\xb6molKr\xb7Ms\xb8Nt\xb9Ou\xbaPv\xbbrtqWv\xb6Xw\xb7Yx\xb8[y\xb9wyv\\{\xbbV~\xbd^|\xbdX\x80\xbf`~\xbeZ\x81\xc0`\x81\xbbb\x80\xc0}\u007f|b\x83\xbd\x80\x81\u007fc\x84\xbed\x85\xbfe\x86\xc0\x82\x84\x81f\x87\xc1\x84\x86\x83h\x88\u0085\x87\x84i\x89Æ\x88\x85j\x8a\xc4k\x8bƈ\x89\x86q\x8b\xc1r\x8d\u008a\x8c\x89s\x8e\xc3t\x8f\xc4v\x90ō\x8f\x8cw\x91Ə\x91\x8ex\x92\xc8q\x94\xc9y\x93\xc9z\x94\xcas\x96ˀ\x94Ł\x95\xc6z\x97Ǔ\x95\x92\x82\x96ǃ\x97Ȗ\x98\x95\x84\x99\xca~\x9b\xca\u007f\x9c̆\x9b̀\x9d́\x9eΈ\x9d\u0382\x9fϛ\x9d\x9a\x88\xa0˄\xa1ѝ\x9f\x9c\x8a\xa2̌\xa4\u038d\xa5Ў\xa6ѣ\xa5\xa1\x8f\xa7Ґ\xa8Ӧ\xa8\xa5\x91\xaaԘ\xabє\xac֙\xacҪ\xac\xa9\x9a\xadӛ\xaeԭ\xaf\xac\x9d\xb0֘\xb4ذ\xb2\xae\x9f\xb3ر\xb3\xb0\xa0\xb4٢\xb5۳\xb5\xb2\xb4\xb6\xb3\xa3\xb7ݝ\xb9ݨ\xb8ض\xb8\xb5\xaa\xb9ٷ\xb9\xb6\xa4\xbcڬ\xbb۹\xbb\xb8\xad\xbcܮ\xbdݯ\xbeߩ\xc0߰\xbfཿ\xbc\xab\xc2\xe1\xb1\xc1\xe1\xb6\xc1\xdc\xc0¾\xad\xc4\xe3\xb7\xc2\xdd\xc1\xc3\xc0\xb8\xc3\u07b2\xc5\u07b9\xc4\xdf\xc3\xc5º\xc5\xe0\xb4\xc7\xe1\xbb\xc7\xe2\xb6\xc9\xe3\xc6\xc8ż\xc8\xe3\xb8\xcb\xe5\xbe\xca\xe5\xc9\xcb\xc8\xc0\xcb\xe6\xba\xce\xe7\xc2\xcd\xe8\xbf\xcf\xe2\xcc\xceʼ\xd0\xe9\xc3\xce\xe9\xc7\xcf\xe4\xc8\xd0\xe6\xc3\xd3\xe6\xca\xd2\xe7\xd1\xd3\xd0\xcc\xd4\xe9\xc6\xd6\xea\xd4\xd6\xd2\xce\xd6\xeb\xcf\xd7\xec\xca\xd9\xed\xd0\xd8\xed\xcb\xdb\xee\xd7\xda\xd6\xd4\xd9\xe9\xcc\xdc\xf0\xd6\xda\xea\xd7\xdb\xeb\xda\xdc\xd9\xd2\xde\xec\xdb\xde\xda\xd9\xdd\xed\xd4\xe0\xee\xdb\xdf\xef\xde\xe0\xdd\xdc\xe0\xf0\xd6\xe2\xf0\xdd\xe1\xf2\xd7\xe3\xf2\xe1\xe3\xe0\xdf\xe3\xf3\xe3\xe5\xe2\xda\xe6\xf4\xe1\xe5\xf5\xde\xe7\xef\xe5\xe7\xe4\xdc\xe8\xf6\xe6\xe8\xe5\xdd\xe9\xf7\xe6\xe7\xf1\xe0\xe9\xf1\xe1\xea\xf2\xe8\xea\xe6\xe2\xeb\xf3\xe9\xeb\xe8\xe3\xec\xf4\xea\xec\xe9\xe5\xee\xf6\xec\xec\xf7\xec\xee\xeb\xed\xed\xf8\xe7\xef\xf8\xe8\xf0\xf9\xee\xf0\xed\xe9\xf1\xfa\xef\xf1\xee\xf0\xf0\xfb\xee\xf3\xf6\xf1\xf3\xf0\xf4\xf2\xf6\xef\xf5\xf7\xf2\xf5\xf1\xf0\xf6\xf8\xf4\xf7\xf3\xf2\xf7\xf9\xf3\xf8\xfb\xf6\xf8\xf4\xf4\xf9\xfc\xf7\xf9\xf6\xf5\xfa\xfd\xf8\xfa\xf7\xf6\xfb\xfe\xf9\xfb\xf8\xfa\xfc\xf9\xfd\xfb\xff\xf7\xfd\xff\xfb\xfd\xfa\xf8\xfe\xff\xf9\xff\xff\xfc\xff\xfb\xfe\xff\xfc\x1d\xe0k\xdb\x00\x00 \x00IDATx^\xed\x9d\tp\x14\u05f9\xef}\x93\xdc\xfb\xde]t2\xaa\xbe3\x12\xd2\x13TI\"b\xb9PzFU\xc0Ř\xb5j\"\x95)!\x97\x8b\x87\x1d+U\x02\xa2\xd8O@L \x18\xa1g\f\x97\xa4,,\x16\x13H\xbc@t\xcbv\n\xd9\xd8V\x99'{\xd8\\Pl\x97\xe0`\x85\xb2͢\xc8\x06\x83\x1fKر@\bMթw\x96\x99\x9e\xd33=\xea\x99Ѩ՟\xfa\xfbE\x91z\xce|}\xba\xc7\xfa\xe9\xcc鞦\xff\x0fQ\x04\x01\xc1CV\x05\b\xe2\fPU\x04\b\xa8*\x02\x04T\x15\x01\x02\xaa\x8a\x00\x01UE\x80`\xa1j\x1b\x828\x04T\x15\x01\x02\xaa\x8a\x00\x01UE\x80\x80\xaa\"@@U\x11 \xa0\xaa\b\x10PU\x04\b\xa8*\x02\x84$Tm\x988X\xcb\x1d\xf3\\\xbc\x9e\x12c\n!\xa4\xdc\xd02\x8c\xb5l\x89S\xfd\xe9\xfbq\x9e\x88\xc3H\xd6\x17\xf9ȪJ\xe2g\xa5\xb5r\xf1ͪ\xe2<\xcdW0m\xe9\xe1\x1e\xd7@\xfa\x95\xc4U}\x96\b\xfcq\xbbJ\x88dT=\xbdj\xc8\"\xd3'\xe2\xf1\x8e\xd8\xc3j\xab2\x89\xae\xea\x81i$L\xd6*\x8b\x95\x90\xfe#aU\x0fg\xc8\xdf\xe6\xc2\xf8}%B\x12\xaa\xbe_BHr\xaa>%\xf6p\xc8\xe7Vu\x82\xb0\xaa\x9f\x16\x13\x85eV\xab!\xfdEªna\xbfnj\x15\u007f\\\xbf+~_\x89\x10\xab광#G\xfeѬt\x06IR\xd5\xd6AR\xb7\x97\xad\n\x05aU\xe7\xf3U|\x13ʧ\xe4\xf1\x05-\xc1\xe9\x03b;\t\xab\xfa2\xfb=\x16\xc7\xef'QbU\x8dKҪ\xbe\x1c\x1a\x19'Y\x15\nª\x0ef?\xffן\xd8\xc2\xe7\v\xf9\xcas-VC\xfa\x8b\x84U\xfd\r\xfb5\x8e\x8d\xdfO\xa2\xf4\xa5\xaa\x13\xf9.\xf2\xc1\u007f\x8fU%'\xa4\xea\x01\xee\xe7\x9fdSIz\xfe\x1c\x91>!AU\xcbC\x03\x16\x19\xd9֖\xcd~\xc8#\xf3!l\x89\xbfw\x17\xb0wж\xd6ec\x06\xf9\x8a\x17|\x1aZ\xe3\xf3U~vT]\xf4ě\xc6\xed\xf50W\xdd3\u007fL\x8e\xa6\r\x9e\xb0H\x8837\xbc\xc5M\xfcсg\x8b\xb3\xbc\x85\xe5\xe19\xad\xd9\x06\xdbv\xf1\xd9\xf4G|\x90\\\x10n2\xab\xdbU5ԛ3\xe5U\x83\xaa\xafȧ^\xad\
|
|||
|
|
|||
|
"analysis/ipcg-pkg.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xf0\x00\x00\x03\xc6\b\x03\x00\x00\x00\xb2,^L\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x02\x04\x00\t\v\a\r\x0f\f\x10\x12\x0f\x13\x15\x12\x1b\x1d\x1a !\x1f!#!$%#&(&+-*/1.2416859:8<=;>@=AB@DFCFHEJKIOQNQSPTVSWYV,`\xae7]\xad8^\xae[]Z8a\xaa:b\xab;b\xac_`^<c\xad=d\xae?e\xaf@g\xb1Bh\xb3egdDi\xb4Ck\xafFk\xb6Lj\xafhjgNk\xb1Fn\xb2Ho\xb4Pm\xb2kmjIp\xb5Kr\xb6nomMs\xb8Nt\xb9Ou\xbaPv\xbbrtqXv\xb6Yx\xb8vwuZy\xb9[z\xbaxyw]{\xbbV~\xbd_}\xbeY\x80\xbf`\x81\xbbb\x80\xc0[\x82\xc1~\x80}b\x83\xbdc\x84\xbe\x81\x83\x80e\x85\xc0g\x87\u0084\x86\x83\x85\x87\x84i\x89Æ\x88\x85j\x8aŇ\x89\x86\x88\x8a\x87q\x8c\xc1\x89\x8b\x88s\x8eË\x8d\x8at\x8f\xc4v\x90ō\x8f\x8cw\x91Ǐ\x91\x8eq\x94\xc9y\x93ɑ\x93\x90z\x94ʀ\x94Ł\x95Ɠ\x95\x92{\x98ǂ\x96ǃ\x98ɖ\x98\x95\u007f\x9cˆ\x9a˘\x9a\x97\x80\x9d͈\x9d\u0382\x9fϜ\x9e\x9a\x88\xa0˄\xa1ў\xa0\x9d\x8a\xa2̋\xa3Ρ\xa3\xa0\x8d\xa5ώ\xa6я\xa7Ҥ\xa6\xa3\x90\xa8ӑ\xa9ԧ\xa9\xa5\x92\xabՔ\xac֩\xab\xa8\x98\xacѪ\xac\xa9\x9a\xadӛ\xafԭ\xaf\xab\xae\xb0\xad\x9d\xb1֘\xb4ذ\xb2\xaf\x9f\xb3ء\xb4ڲ\xb4\xb1\xb3\xb5\xb2\xa2\xb6ܣ\xb7ݝ\xb9ݵ\xb7\xb4\xa9\xb8ٶ\xb8\xb5\xa3\xbb٫\xbaڸ\xba\xb7\xac\xbbۦ\xbdܹ\xbb\xb8\xad\xbcܮ\xbdݯ\xbeߩ\xc1\u07fd\xbf\xbb\xb0\xc0\xe0\xab\xc2\xe1\xb2\xc1\xe2\xbf\xc1\xbe\xad\xc4\xe3\xb7\xc2\xdd\xc1ÿ\xb2\xc5\xde\xc2\xc4\xc1\xb9\xc4\xdf\xc3\xc5º\xc5\xe0\xb4\xc7\xe0\xbb\xc7\xe2\xb6\xc9\xe3\xbc\xc8\xe3\xc6\xc9ſ\xca\xe5\xb9\xcd\xe6\xc9\xcc\xc8\xc1\xcc\xe7\xc2\xcd\xe9\xbc\xcf\xe9\xbf\xcf\xe2\xcd\xcf\xcc\xc7\xcf\xe4\xc8\xd0\xe6\xc2\xd2\xe6\xca\xd1\xe7\xcb\xd3\xe9\xc6\xd5\xe9\xd2\xd4\xd1\xce\xd6\xeb\xc9\xd9\xed\xd5\xd8\xd4\xd0\xd8\xed\xcb\xdb\xee\xd4\xd9\xe9\xd8\xda\xd6\xcc\xdc\xf0\xd6\xda\xea\xd7\xdb\xeb\xda\xdc\xd9\xd1\xdd\xeb\xd8\xdc\xec\xd9\xdd\xed\xdc\xdf\xdb\xd4\xe0\xee\xdb\xdf\xef\xde\xe0\xdd\xdd\xe1\xf1\xe0\xe2\xdf\xd7\xe3\xf1\xd9\xe5\xf4\xdf\xe4\xf4\xe3\xe5\xe2\xde\xe6\xef\xe5\xe7\xe4\xdc\xe8\xf6\xdd\xe9\xf7\xe6\xe7\xf1\xe0\xe9\xf1\xe7\xe9\xe6\xe8\xea\xe7\xe2\xeb\xf3\xe9\xeb\xe8\xe3\xec\xf4\xeb\xed\xea\xe5\xee\xf6\xec\xed\xf7\xe7\xef\xf8\xed\xef\xeb\xe8\xf0\xf9\xee\xf0\xed\xf0\xf0\xfb\xf0\xf2\xef\xee\xf3\xf6\xf1\xf3\xf0\xf4\xf2\xf6\xf2\xf4\xf1\xef\xf5\xf7\xf0\xf6\xf8\xf4\xf6\xf3\xf2\xf7\xf9\xf3\xf8\xfb\xf6\xf8\xf4\xf7\xf9\xf6\xf5\xfa\xfd\xf8\xfa\xf7\xf6\xfb\xfe\xf9\xfb\xf8\xfa\xfc\xf9\xfd\xfb\xff\xf7\xfd\xff\xfb\xfd\xfa\xf8\xfe\xff\xf9\xff\xff\xfc\xff\xfb\xfe\xff\xfc\x9fIc\x17\x00\x00 \x00IDATx^\xed\xbd\vlT\xe7\x9d\xff\x9dn\xbb\u007f\x92\xf4\xbe\xffM[\x1e\a\x9d\xe0\x91c\xaf\x16\xd9kհuJ\x9b8\xf0&\u0080\x18\xe3\x80l(\xb7֊X\x87\xb0\x15\x97\x10\x93FXd^BH߄\x05\x8aCK\x92%\x1b\xe3\xd5\xca.V\xc1ZHF@P$\xccE\xa4)I\x1b\xc0\t!\\\x82\x13\b66c\xec\x91~z\xcfs\xce\\\xce̜\xb9ٞ\xe7\xfc\xec\xf9~\x82f\x9e9\xf3\x9ccW\xfd\xcc\xf1\xf7\x9c\x999\xdf;\b\x80,\xe2\x8ed\x13\x00\x18M@x\x90U@x\x90U@x\x90U@x\x90U@x\x90U@x\x90U@x\x90U@x\x90U@x\x90U@x\x90U$\x12\xbe\x03\x80\xd1\x06\x84\aY\x05\x84\aY\x05\x84\aY\x05\x84\aY\x05\x84\aY\x05\x84\aY\x05\x84\aY\x05\x84\aYEj\xc2\xe7\n!\xfe\xdfx\x9b\xf8\xf3\x9f\xe2=\x93\x16%\xfa\xcf\xf8\xafd\x93\"\b\xae\x91\xfe\x9aI\x90\x1b\xfc\xefd\x93\xc0\x88d\xc8\u009f\xd98\xe1i\xfbg\xd2$}m!<H\x9b\xa1\n\xff\xa72! <\x181\fU\xf89\x02\u0083\x11\x04\x84\xb7\x01\u008f^ \xbc\rq\x84?\xfa\xefQ\xe0E1\xf2HO\xf8B!r;\xfeZ\xffP^\xee\x03\xab\xfe\xac?\xae\x15\x01^\x95\xb3\x8e\xfe\xfb\x03\xae\xf1\xc5U\x01\xf7\xfe\xaa/\xfeYG}\xb1V0\xe7L̊:g\xfe\xc3]8>\xc75\xf1\x17\u007f4\x1f\xc7j\xfb\xd7\x17\xdd\x05Zn\xc9/\xfe\xa7#\xf1\x1a\xb1k\x1e\xae-\x19\x9f_\xfej\xc73\xfa3\x9e\xa8_%f3\x9a\x10\x85\x1dG\x97M\xd4\xd7\xf8}x\xc3\xff\xfd7\xcfC\xae\xdc\xc9O\xbfo\xd9\xec\x83\"\x02\xedp\a\x18i\xa4/\xfc\xe1\u007f5\xff\xef.>\x1c%\xfc+\xae\xc0\x03\xb7\xa1\xb4a\xd9*\xf9\xb8<vŎ\x8e??\x1c\x12g\x85\xf13b\xb4}\xeb_\x83\x13~\xf5\xb7\x84kĬ\xf9jn`\xbd:\x11\x16>\xf8\xab\xc4lF\n\xff?\xf9撪\xbf\x067\xbc\xad\xcc\\2\xe9\x84e\xbb\"\x82E\x1d`đ\xb6\xf0Zq\xf0\xffow\xa4\xf0\xaf\x8e\r\x99\xf0\xa8\xbe\x1f5,\xcb3\x96=\x1f\xbbbGG\x95\b\xf3\x9frA\xb4\xb6\x87\xf3\xc3\x13j\x13\xae\x11\xbd\xe6\x1f\xb5\xe0\xb4\t\"$|\xe8W\x89ٌ>;//\xb8dAp\xc3\xc1W\xaf\x98g\xd9\xf2
|
|||
|
|
|||
|
"analysis/typeinfo-pkg.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x042\x00\x00\x03\xa2\b\x03\x00\x00\x00\xb5\xb6\a\xdf\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x03\x00PLTE!# #$\"$%#&(%()'*,),.,/0.231463685;<:>@=BDAGHF\x00f\x00JLI\x00j\x02\x03l\x04OQN\rp\nSUR\fr\x17VXU,`\xae7]\xad8^\xae\x16w\x1d[]Z8a\xaa:b\xab;b\xac<c\xad`a_=d\xae?e\xaf@f\xb0*{!bdaAg\xb2)}*Bh\xb3Ci\xb4egdEj\xb5higMj\xb0Fm\xb2/\x82/Ol\xb1Ho\xb4Pm\xb2Ip\xb5/\x858Jq\xb6molKr\xb7Ms\xb8Nt\xb9pro=\x87<Ou\xbaXv\xb6tvs@\x8b?Yx\xb8Zy\xb9@\x8dG]{\xbbxzwI\x8dH_}\xbdX\x80\xbf`~\xbeZ\x81\xc1|~{`\x81\xbbb\x80\xc0N\x92Mb\x83\xbdM\x95U\x80\x82\u007fd\x84\xbfW\x95Vf\x86\xc1h\x88\xc2Z\x98Y\x85\x87\x84i\x89\xc3j\x8a\xc4q\x8b\xc1^\x9d]\\\x9dc\x8a\x8c\x89s\x8e\xc3d\x9deu\x8fŎ\x90\x8dw\x91\xc7h\xa1hy\x93\xc9z\x94ʀ\x94Œ\x94\x91z\x97Ɓ\x95Ƃ\x96\xc7q\xa5r\x83\x97Ȗ\x98\x95\x84\x99\xca\u007f\x9cˆ\x9b̀\x9d͙\x9b\x98u\xaaw\x81\x9eΈ\x9d\u0383\xa0ψ\xa0\xcb\u007f\xabz\x9d\x9f\x9c\x8a\xa2̠\xa2\x9f\x8c\xa4\u0380\xb0\x84\x8d\xa5Ў\xa6ѣ\xa5\xa2\x82\xb2\x86\x8f\xa7Ҥ\xa6\xa3\x91\xa9Ԍ\xb4\x89\x98\xabє\xac֩\xab\xa8\x99\xacҚ\xadӍ\xb8\x93\x9b\xafԮ\xb0\xad\x9d\xb1֗\xba\x97\x9f\xb3ؠ\xb4٢\xb5ۛ\xbe\x9b\xb3\xb5\xb2\xa3\xb7ݣ\xbf\x9d\xa9\xb8٢\xc1\xa4\xaa\xbaڸ\xba\xb7\xa5\xbd۬\xbbۭ\xbcܦĨ\xae\xbdݯ\xbfߨǪ\xbd\xbf\xbc\xb1\xc0\xe1\xab\xc3\xe1\xb0Ǭ\xb2\xc1\xe2\xb6\xc1\xdc\xc0¿\xb7\xc2ݸ\xc3\u07b2\xc5\u07b9\xc4߳\xc7\xe0\xba\xc5\xe0\xb2ͷ\xc5\xc7Ļ\xc7\xe2\xbc\xc8\xe3\xb7\xca\xe3\xbbκ\xbe\xca\xe5\xb9\xcc\xe6\xc9\xcb\xc8\xc0\xcb\xe6\xc1\xcc\xe7\xc2\xcd\xe9\xbf\xcf\xe2\xc0ӿ\xbc\xd0\xe9\xcd\xcf\xcc\xc7\xcf\xe4\xc8\xd3\xc1\xc8\xd0\xe6\xca\xd1\xe7\xd1\xd3\xd0\xc8\xd7\xca\xcb\xd3\xe9\xc5\xd5\xe8\xce\xd5\xeb\xcc\xda\xce\xd5\xd7\xd4\xcf\xd7\xec\xd0\xd8\xed\xcb\xda\xee\xd5\xdb\xd0\xd4\xd9\xe9\xd6\xda\xea\xd9\xdb\xd8\xd7\xdb\xeb\xd2\xde\xec\xdc\xde\xda\xd9\xdd\xed\xd6\xe0\xdb\xd4\xe0\xee\xdb\xdf\xef\xde\xe0\xdd\xd5\xe1\xf0\xe0\xe2\xdf\xdd\xe1\xf2\xdf\xe3\xf3\xe3\xe5\xe1\xda\xe6\xf5\xe1\xe5\xf5\xde\xe7\xef\xe5\xe7\xe4\xe6\xe7\xf1\xe0\xe9\xf1\xe7\xe9\xe6\xe1\xea\xf2\xe2\xeb\xf3\xe3\xec\xf4\xe5\xee\xf6\xec\xec\xf7\xeb\xee\xea\xed\xed\xf8\xe7\xef\xf8\xe8\xf0\xf9\xf0\xf0\xfb\xed\xf2\xf5\xf0\xf2\xef\xee\xf3\xf6\xf4\xf2\xf6\xf2\xf4\xf1\xef\xf5\xf7\xf0\xf6\xf8\xf2\xf7\xf9\xf3\xf8\xfb\xf7\xf9\xf6\xf5\xfa\xfd\xfa\xfc\xf8\xfd\xfb\xff\xf7\xfd\xff\xf8\xfe\xff\xf9\xff\xff\xfe\xff\xfc\x8c\xab\xeb\xca\x00\x00 \x00IDATx^\xec\xbd\x0fpT\xd5\xdd\xff\u007fu\x8d\x80\x80\x80\x88r\x02\x99\x8d!\x85\x87\x80~ML%\xa0\x86\xca\x17j\x11\xed\xfc\x8c\xa8\x93<\x0fc\xa4\xa2\x8fm\x9c\xaf\xd16T\xa0\xea\x83X\x91g\x88\x98\x87>t(\x14\n\xa2և\xa1\x8c\xed<\x86\xe1\xa9y\x06\xa4)jU\bJ\xad\x04\x19\x89ЂR\xadB\x88$s~\xf7ܿ\xe7\xde=w\xef\x9eݻٽ\xbb\xef\x97#\xb9{\xf7s\xce\xf9\x9c\xb3{\xde{\xef\xb9w\xf7\xadP\x00\x00H\x18\xc5/\x00\x00\x00l \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t \x19\x00\x00\t|$\xe3\x18\x00\x00p@2\x00\x00\x12@2\x00\x00\x12@2\x00\x00\x12@2\x00\x00\x12@2\x00\x00\x12@2\x00\x00\x12@2\x00\x00\x12@2\x00\x00\x12\xc8H\xc6\a\xbf\xf7\xa8D\x8a\xdf6\xce\xf8?ђ\x8a;\x9ey\xdf/\x12\x00\x90u$.\x19\x9f\xb4\\\xb5Գ\x9a\x84\xd9\u007f\a1\x19\xd7\xe2\x17\f\x00\xc86\x12\x96\x8c\xdf\xcf$$u\xc9\xf8`\x06\xe1X\xe1\x17\x0e\x00\xc82\x12\x96\x8cz\x12\x84d,aJQRS?\xb7\x82mD\xff\xe0\x17\x0f\x00\xc8.\xfaY2&\xab\xb5,\xf8@\xdd8\xfc8ӌF\xbfx\x00@vѿ\x92\xb1\x9f\xe9\xc4\a\xfa\xf6lusF\xfcp\x00@\xb6\x91\xa0d4\x9a\xcb\x0f\xcf/P\xff\xb9Y\xdf\xf9[u\xb3X\x15\x80(!\x15\xc7\xf67M+.\x9b\xfb\xbcY`\u007fӍ\xe3\x8a+\xeb\xff\xcbٚ&\x19F\xcc\U000cd34dKD\xc1\x875-Yqm\xb4\xa2\x9e\xe9T\x9d\xbe\xf7\xad\xd1\xea\xf6[q\xa3?9\x06\x00H3Ғ\xc1tb\xf4~kg\xfd1]2~;Y\u007f\xbe\xfe\xb0\xf6ԆqF|\xeda\xbe\xb5O\xd8\x12Fq\xa3\xebb\xad+X\x13\x81\xc7\xd8\xe3\x9a\xff\"\xba(\xa9,e\x8f\xe3G\x1f\x03\x00\xa4\x1bi\xc98VE\xccK\x1d\x15D?dP%c\xc2D3\xe0^\xf6\xcc\xf3\xa3͇\xa4\xc6\xf1ٿT\xdfY1\xff\xb9\xb7\xac}\xee`&\x02\x13\xb4}\xab>\xb9V\xfdW\xbf\x16{\x83\xba\xb5&~\xf41\x00@\xbaIP2\xfe\xf0\xfc\xadꤼ\xf7\xf9\xe7\xf7k\xb3^;3\xf9ou\xe3*\xf6I\x1fe\x13\xb6l\xe9\x
|
|||
|
|
|||
|
"analysis/typeinfo-src.png": "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xc1\x00\x00\x01\xb3\b\x03\x00\x00\x00\xf9m:\x11\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x02\xfdPLTE\x00\x01\x00\n\x03\x01\x05\a\x03\x02\r\x14\n\f\b\x10\x12\x0e\x0f\x13\x1e\x1b\x1a\x14 \x1f\x19\x1c \"\x17!;!# #$\"$%#&'%'(&+)\x1e()'\x18-T*,)/,!-/,12053'35386*6758:7<:.<>;>@=CA5&CxAB@EFDIJH\x00g\x00KLJ\x00j\x026NzNOM0R\x95\x06m\x06UP?PRO>V\x82\x0fq\vTVS\rr\x17\\WEVXU,`\xae7]\xad\x15w\x1c[]Z8`\xaa\x19y\x1e;b\xac_a^=d\xae?f\xb0*{!bdaSe\x84)}+Bh\xb3efdDi\xb4ghfLj\xafpiQEm\xb1ikh0\x820Ol\xb2Ip\xb4lnkTp\xa3Kr\xb7npm6\x869Nt\xb9zs[Wu\xb5>\x89=strZx\xb9vwt]{\xbbG\x8eHy{xX\x80\xbf^\u007f\xb9\x85}ea\u007f\xbf}\u007f|O\x93N\u007f\x81~c\x84\xbeW\x95V\x82\x84\x81m\x87\xbch\x88Ð\x86h[\x99Zj\x8ać\x88\x85q\x8b\xc1\x8a\x8c\x89`\x9dd\x96\x8cnt\x8e\xc4z\x8f\xbf\x8f\x91\x8eg\xa1hy\x93\xc9~\x93\xc4x\x95Ē\x94\x91\x81\x95Ɵ\x95w{\x98ǃ\x98ɂ\x9aė\x99\x96u\xa8v\x86\x9b̀\x9d̙\x9b\x98\xa5\x9b|\x85\x9eȂ\xa0ϙ\x9e\xa0\x9c\x9e\x9b\x89\xa1˞\xa0\x9d\xab\xa1\x82\xa0\xa2\x9f\xa1\xa3\xa0\x81\xb0\x83\x91\xa5ʕ\xa5Ď\xa6ѣ\xa5\xa2\x91\xa9Դ\xa7\x83\x95\xa9Χ\xa9\xa6\x8c\xb4\x8a\x94\xac֪\xac\xa9\x99\xadҟ\xaeλ\xae\x89\xad\xaf\xac\x9d\xb1֯\xb1\xae\x98\xbb\x97\xa3\xb3ӡ\xb5ڧ\xb6ֱ\xb5Ĵ\xb6\xb3\xa3\xbf\x9d\xac\xb7\xd2ķ\x92\xaa\xb9ڢ\xc1\xa4\xb7\xb9\xb6\xb3\xbcĭ\xbcܺ\xbc\xb9\xa6Ũ\xb1\xbd\u05fd\xbf\xbb\xb1\xc0\xe1\xb8\xc0կǫ\xcd\xc0\x9a\xc0¾\xb7\xc2ݻ\xc3ؽ\xc4ڲ̷\xc4\xc6ú\xc6\xe1\xc0\xc8\xdd\xc7\xc9żκ\xd8ɝ\xc6\xca\xda\xc0\xcb\xe6\xc9\xcc\xc8\xc2\xcd\xe8\xbf\xcf\xe2\xcd\xcf\xcc\xc4\xd0\xde\xcb\xcf\xdf\xc8\xd3\xc1\xc8\xd0\xe5\xe1ѥ\xd0\xd2\xce\xc8\xd7\xca\xcb\xd3\xe9\xd2\xd4\xd1\xd2\xd3\xdd\xce\xd6\xdf\xdfש\xce\xd6\xec\xcc\xda\xce\xe6֪\xd6\xd8\xd5\xcb\xdb\xee\xd5\xdc\xd1\xd3\xdb\xe4\xd6\xda\xea\xd9\xda\xe4\xda\xdc\xd9\xd2\xde\xec\xd9\xdd\xed\xdc\xdd\xe7\xd7\xe1\xdc\xe0\xde\xe2\xdd\xe0\xdc\xdb\xe0\xe2\xf0\xe0\xb3\xd6\xe2\xf0\xdd\xe1\xf1\xe0\xe2\xdf\xde\xe3\xe6\xe0\xe4\xf4\xe3\xe5\xe2\xe1\xe6\xe9\xde\xe7\xef\xe8\xe5\xea\xe5\xe7\xe4\xe6\xe7\xf2\xe4\xe9\xeb\xe7\xe9\xe6\xe2\xea\xf3\xeb\xee\xea\xec\xed\xf7\xe6\xef\xf7\xe8\xf0\xf9\xf0\xf0\xfb\xf0\xf2\xef\xf4\xf2\xf6\xef\xf4\xf7\xf4\xf6\xf3\xf2\xf8\xfa\xf8\xfb\xf7\xf6\xfb\xfe\xfd\xfb\xff\xf9\xff\xff\xfe\xff\xfc\x11\n֍\x00\x00 \x00IDATx^\xed\x9d\r\\T\xe7\xbd\xe7\xef\xb2\xcd&\xbb\x0f\xcc4w.s?e\x8a\xbd\xbc\xe8z-[\xb2z>\x8c#\xd6-h\x16#,6\xd7\x17\xbc\x94+\x95h\xae\xa2\xb7Jbȍ\x8e\x91\xd8\x05\nac\x12r'\x161vg\xbd)+\x91\x98b,\ti41\xb9\x96H,-\x9b\x17\x92\xb6c\x1a-&\xd4\x13\x93[\xaf\n\xfd\x9c\xcf>/g\xe6<g\xe6\x9cy\x81\xe1\f\a\xfeߴ\xe3\x993\xcfy\xce\x19\xf8\xce3\xff\xf3\xf6\xe3Ϥq#\x02@\xe2\xf9\xb3H\x9e\xea\x13\xa9k\x000\x000\x1807`0`n\xc0`\xc0܀\xc1\x80\xb9\x01\x83\x01sc\xb4\xc1\xde\xde\xc0d\x8f\xdbC\xff\xf5u\xec\xaf\xdb\xdf\xe1\xd3[\x02\x00\xc2a\xb0\xc1\x83\xee.\xff\xe4P]G#\xfd\xb7\xb1\xb5\xb7\xafw\u007f\xe3\x90\xeeB\x00\xa0\x8f\xb1\x06\xf77+\x06{\xda\xfb\xa8\xc1\xde\xe6a\xfc8\xdcܡ\xb7\x10\x00\x84\xc1P\x83\xbdno]\x97<\xddS\xef\xeb\xa7\x06\xb7\xb7\xd2\xe7\xad\xed:\v\x01@8\f5\xd8\xe7\x13\x1b\xbb\xe4ɺ\xd3b\xbf\\Ex\x87\x86\x87\xbcPE\x00\xe3\xc2P\x831~\x83=x\xc8e\x06\x8b\xbev\xb7\xdb\xdd\x06{r\xc0\xb8H\x90\xc1\xbd\xf5>\xbf\xc1\xc3\xedͽ\xfd\xbd\xcd\xed\xc3\xe1\x16\x03\x00\x1d\x12c\xb0\xaf\xaewdd\xa4\xafq\x04Ow4_\x14aO\x0e\x18/\x891\xf8\x8c\xdbO\xbfX\xd7M_\xe8\xae\v\xb7\x18\x00\xe8\x90\x18\x83\xc5ABO\xfd\xe0\xa0\b\x06\x03\x13\"A\x06S\xe4\xa3i\xb4\x8a\xb8\xd8\fGӀ\xf1`\xa8\xc1\xbe\xfe\xfezo\xff {2\xd2\xdfS\xdf?\x84g67\xf7\xf4\xf547\xc3\xc1\b`<\x18jp\x17\xab}\x99\xab\xfdd\xb2\tO\fw\xee\xafo\xed\x84C\x11\xc0\xb80\xd4`\x00\x88;`0`n\xc0`\xc0܀\xc1\x80\xb9\x01\x83\x01s\x03\x06\x03\xe6\x06\f\x06\xcc\r\x18\f\x98\x1b0\x1807`0`n\xc0`\xc0܀\xc1\xa6`$R\x83\x99\v\x18<\x0eF\x86GF\xf0\xff#5\x8b\x17\xfd%ihI\xa4F3\x1608fzggf\xe6eef\x96\x1bu=hf\xa6\xbb\xbd/R\xa3\x19\x8b\xd1\x06k\xa4N\x8dt\xb7ֵ*\xb3\x8d\xe2!A8\xa2\xf3\xd2y\xa7\xb0J\x14\x8f9\x05\x86S\xd5n\u0602rs\x93l\xb9s\x936\x1a\xa3p\x0fj\x8b\xd4d&c\xb0\xc1\x1a\xa9S\xa2\xa7\xbe\xbb\xaf+\x90\x84\xa2\x857܋\xb1\xf2\xe2\xab\xec\xdf\xf7O:[t\x9a\\y\xf9\x01\x97(>)\x9c<y@8p\xf2\xe4\x82'\xf9\x17
|
|||
|
|
|||
|
"callgraph.html": `<div class="toggle" style="display: none">
|
|||
|
<div class="collapsed">
|
|||
|
<p class="exampleHeading toggleButton">▹ <span class="text">Internal call graph</span></p>
|
|||
|
</div>
|
|||
|
<div class="expanded">
|
|||
|
<p class="exampleHeading toggleButton">▾ <span class="text">Internal call graph</span></p>
|
|||
|
<p>
|
|||
|
This viewer shows the portion of the internal call
|
|||
|
graph of this package that is reachable from this function.
|
|||
|
See the <a href='#pkg-callgraph'>package's call
|
|||
|
graph</a> for more information.
|
|||
|
</p>
|
|||
|
<ul style="margin-left: 0.5in" id="callgraph-{{.Index}}" class="treeview"></ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
`,
|
|||
|
|
|||
|
"codewalk.html": `<!--
|
|||
|
Copyright 2010 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
|
|||
|
<style type='text/css'>@import "/doc/codewalk/codewalk.css";</style>
|
|||
|
<script type="text/javascript" src="/doc/codewalk/codewalk.js"></script>
|
|||
|
|
|||
|
<div id="codewalk-main">
|
|||
|
<div class="left" id="code-column">
|
|||
|
<div id='sizer'></div>
|
|||
|
<div id="code-area">
|
|||
|
<div id="code-header" align="center">
|
|||
|
<a id="code-popout-link" href="" target="_blank">
|
|||
|
<img title="View code in new window" alt="Pop Out Code" src="/doc/codewalk/popout.png" style="display: block; float: right;"/>
|
|||
|
</a>
|
|||
|
<select id="code-selector">
|
|||
|
{{range .File}}
|
|||
|
<option value="/doc/codewalk/?fileprint=/{{urlquery .}}">{{html .}}</option>
|
|||
|
{{end}}
|
|||
|
</select>
|
|||
|
</div>
|
|||
|
<div id="code">
|
|||
|
<iframe class="code-display" name="code-display" id="code-display"></iframe>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div id="code-options" class="setting">
|
|||
|
<span>code on <a id="set-code-left" class="selected" href="#">left</a> • <a id="set-code-right" href="#">right</a></span>
|
|||
|
<span>code width <span id="code-column-width">70%</span></span>
|
|||
|
<span>filepaths <a id="show-filepaths" class="selected" href="#">shown</a> • <a id="hide-filepaths" href="#">hidden</a></span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="right" id="comment-column">
|
|||
|
<div id="comment-area">
|
|||
|
{{range .Step}}
|
|||
|
<div class="comment first last">
|
|||
|
<a class="comment-link" href="/doc/codewalk/?fileprint=/{{urlquery .File}}&lo={{urlquery .Lo}}&hi={{urlquery .Hi}}#mark" target="code-display"></a>
|
|||
|
<div class="comment-title">{{html .Title}}</div>
|
|||
|
<div class="comment-text">
|
|||
|
{{with .Err}}
|
|||
|
ERROR LOADING FILE: {{html .}}<br/><br/>
|
|||
|
{{end}}
|
|||
|
{{.XML}}
|
|||
|
</div>
|
|||
|
<div class="comment-text file-name"><span class="path-file">{{html .}}</span></div>
|
|||
|
</div>
|
|||
|
{{end}}
|
|||
|
</div>
|
|||
|
<div id="comment-options" class="setting">
|
|||
|
<a id="prev-comment" href="#"><span class="hotkey">p</span>revious step</a>
|
|||
|
•
|
|||
|
<a id="next-comment" href="#"><span class="hotkey">n</span>ext step</a>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
`,
|
|||
|
|
|||
|
"codewalkdir.html": `<!--
|
|||
|
Copyright 2010 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
|
|||
|
<table class="layout">
|
|||
|
{{range .}}
|
|||
|
<tr>
|
|||
|
{{$name_html := html .Name}}
|
|||
|
<td><a href="{{$name_html}}">{{$name_html}}</a></td>
|
|||
|
<td width="25"> </td>
|
|||
|
<td>{{html .Title}}</td>
|
|||
|
</tr>
|
|||
|
{{end}}
|
|||
|
</table>
|
|||
|
`,
|
|||
|
|
|||
|
"dirlist.html": `<!--
|
|||
|
Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
|
|||
|
<p>
|
|||
|
<table class="layout">
|
|||
|
<tr>
|
|||
|
<th align="left">File</th>
|
|||
|
<td width="25"> </td>
|
|||
|
<th align="right">Bytes</th>
|
|||
|
<td width="25"> </td>
|
|||
|
<th align="left">Modified</th>
|
|||
|
</tr>
|
|||
|
<tr>
|
|||
|
<td><a href="..">..</a></td>
|
|||
|
</tr>
|
|||
|
{{range .}}
|
|||
|
<tr>
|
|||
|
{{$name_html := fileInfoName . | html}}
|
|||
|
<td align="left"><a href="{{$name_html}}">{{$name_html}}</a></td>
|
|||
|
<td></td>
|
|||
|
<td align="right">{{html .Size}}</td>
|
|||
|
<td></td>
|
|||
|
<td align="left">{{fileInfoTime . | html}}</td>
|
|||
|
</tr>
|
|||
|
{{end}}
|
|||
|
|
|||
|
</table>
|
|||
|
</p>
|
|||
|
`,
|
|||
|
|
|||
|
"error.html": `<!--
|
|||
|
Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
|
|||
|
<p>
|
|||
|
<span class="alert" style="font-size:120%">{{html .}}</span>
|
|||
|
</p>
|
|||
|
`,
|
|||
|
|
|||
|
"example.html": `<div id="example_{{.Name}}" class="toggle">
|
|||
|
<div class="collapsed">
|
|||
|
<p class="exampleHeading toggleButton">▹ <span class="text">Example{{example_suffix .Name}}</span></p>
|
|||
|
</div>
|
|||
|
<div class="expanded">
|
|||
|
<p class="exampleHeading toggleButton">▾ <span class="text">Example{{example_suffix .Name}}</span></p>
|
|||
|
{{with .Doc}}<p>{{html .}}</p>{{end}}
|
|||
|
{{$output := .Output}}
|
|||
|
{{with .Play}}
|
|||
|
<div class="play">
|
|||
|
<div class="input"><textarea class="code" spellcheck="false">{{html .}}</textarea></div>
|
|||
|
<div class="output"><pre>{{html $output}}</pre></div>
|
|||
|
<div class="buttons">
|
|||
|
<a class="run" title="Run this code [shift-enter]">Run</a>
|
|||
|
<a class="fmt" title="Format this code">Format</a>
|
|||
|
{{if not $.GoogleCN}}
|
|||
|
<a class="share" title="Share this code">Share</a>
|
|||
|
{{end}}
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
{{else}}
|
|||
|
<p>Code:</p>
|
|||
|
<pre class="code">{{.Code}}</pre>
|
|||
|
{{with .Output}}
|
|||
|
<p>Output:</p>
|
|||
|
<pre class="output">{{html .}}</pre>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
`,
|
|||
|
|
|||
|
"godoc.html": `<!DOCTYPE html>
|
|||
|
<html>
|
|||
|
<head>
|
|||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|||
|
<meta name="theme-color" content="#375EAB">
|
|||
|
{{with .Tabtitle}}
|
|||
|
<title>{{html .}} - The Go Programming Language</title>
|
|||
|
{{else}}
|
|||
|
<title>The Go Programming Language</title>
|
|||
|
{{end}}
|
|||
|
<link type="text/css" rel="stylesheet" href="/lib/godoc/style.css">
|
|||
|
{{if .SearchBox}}
|
|||
|
<link rel="search" type="application/opensearchdescription+xml" title="godoc" href="/opensearch.xml" />
|
|||
|
{{end}}
|
|||
|
<link rel="stylesheet" href="/lib/godoc/jquery.treeview.css">
|
|||
|
<script type="text/javascript">window.initFuncs = [];</script>
|
|||
|
</head>
|
|||
|
<body>
|
|||
|
|
|||
|
<div id='lowframe' style="position: fixed; bottom: 0; left: 0; height: 0; width: 100%; border-top: thin solid grey; background-color: white; overflow: auto;">
|
|||
|
...
|
|||
|
</div><!-- #lowframe -->
|
|||
|
|
|||
|
<div id="topbar"{{if .Title}} class="wide"{{end}}><div class="container">
|
|||
|
<div class="top-heading" id="heading-wide"><a href="/">The Go Programming Language</a></div>
|
|||
|
<div class="top-heading" id="heading-narrow"><a href="/">Go</a></div>
|
|||
|
<a href="#" id="menu-button"><span id="menu-button-arrow">▽</span></a>
|
|||
|
<form method="GET" action="/search">
|
|||
|
<div id="menu">
|
|||
|
<a href="/doc/">Documents</a>
|
|||
|
<a href="/pkg/">Packages</a>
|
|||
|
<a href="/project/">The Project</a>
|
|||
|
<a href="/help/">Help</a>
|
|||
|
{{if not .GoogleCN}}
|
|||
|
<a href="/blog/">Blog</a>
|
|||
|
{{end}}
|
|||
|
{{if .Playground}}
|
|||
|
<a id="playgroundButton" href="http://play.golang.org/" title="Show Go Playground">Play</a>
|
|||
|
{{end}}
|
|||
|
<span class="search-box"><input type="search" id="search" name="q" placeholder="Search" aria-label="Search" required><button type="submit"><span><!-- magnifying glass: --><svg width="24" height="24" viewBox="0 0 24 24"><title>submit search</title><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/><path d="M0 0h24v24H0z" fill="none"/></svg></span></button></span>
|
|||
|
</div>
|
|||
|
</form>
|
|||
|
|
|||
|
</div></div>
|
|||
|
|
|||
|
{{if .Playground}}
|
|||
|
<div id="playground" class="play">
|
|||
|
<div class="input"><textarea class="code" spellcheck="false">package main
|
|||
|
|
|||
|
import "fmt"
|
|||
|
|
|||
|
func main() {
|
|||
|
fmt.Println("Hello, 世界")
|
|||
|
}</textarea></div>
|
|||
|
<div class="output"></div>
|
|||
|
<div class="buttons">
|
|||
|
<a class="run" title="Run this code [shift-enter]">Run</a>
|
|||
|
<a class="fmt" title="Format this code">Format</a>
|
|||
|
{{if not $.GoogleCN}}
|
|||
|
<a class="share" title="Share this code">Share</a>
|
|||
|
{{end}}
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
{{end}}
|
|||
|
|
|||
|
<div id="page"{{if .Title}} class="wide"{{end}}>
|
|||
|
<div class="container">
|
|||
|
|
|||
|
{{if or .Title .SrcPath}}
|
|||
|
<h1>
|
|||
|
{{html .Title}}
|
|||
|
{{html .SrcPath | srcBreadcrumb}}
|
|||
|
</h1>
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{with .Subtitle}}
|
|||
|
<h2>{{html .}}</h2>
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{with .SrcPath}}
|
|||
|
<h2>
|
|||
|
Documentation: {{html . | srcToPkgLink}}
|
|||
|
</h2>
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{/* The Table of Contents is automatically inserted in this <div>.
|
|||
|
Do not delete this <div>. */}}
|
|||
|
<div id="nav"></div>
|
|||
|
|
|||
|
{{/* Body is HTML-escaped elsewhere */}}
|
|||
|
{{printf "%s" .Body}}
|
|||
|
|
|||
|
<div id="footer">
|
|||
|
Build version {{html .Version}}.<br>
|
|||
|
Except as <a href="https://developers.google.com/site-policies#restrictions">noted</a>,
|
|||
|
the content of this page is licensed under the
|
|||
|
Creative Commons Attribution 3.0 License,
|
|||
|
and code is licensed under a <a href="/LICENSE">BSD license</a>.<br>
|
|||
|
<a href="/doc/tos.html">Terms of Service</a> |
|
|||
|
<a href="http://www.google.com/intl/en/policies/privacy/">Privacy Policy</a>
|
|||
|
</div>
|
|||
|
|
|||
|
</div><!-- .container -->
|
|||
|
</div><!-- #page -->
|
|||
|
|
|||
|
<!-- TODO(adonovan): load these from <head> using "defer" attribute? -->
|
|||
|
<script type="text/javascript" src="/lib/godoc/jquery.js"></script>
|
|||
|
<script type="text/javascript" src="/lib/godoc/jquery.treeview.js"></script>
|
|||
|
<script type="text/javascript" src="/lib/godoc/jquery.treeview.edit.js"></script>
|
|||
|
|
|||
|
{{if .Playground}}
|
|||
|
<script type="text/javascript" src="/lib/godoc/playground.js"></script>
|
|||
|
{{end}}
|
|||
|
{{with .Version}}<script>var goVersion = {{printf "%q" .}};</script>{{end}}
|
|||
|
<script type="text/javascript" src="/lib/godoc/godocs.js"></script>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|
|||
|
|
|||
|
`,
|
|||
|
|
|||
|
"godocs.js": `// Copyright 2012 The Go Authors. All rights reserved.
|
|||
|
// Use of this source code is governed by a BSD-style
|
|||
|
// license that can be found in the LICENSE file.
|
|||
|
|
|||
|
/* A little code to ease navigation of these documents.
|
|||
|
*
|
|||
|
* On window load we:
|
|||
|
* + Generate a table of contents (generateTOC)
|
|||
|
* + Bind foldable sections (bindToggles)
|
|||
|
* + Bind links to foldable sections (bindToggleLinks)
|
|||
|
*/
|
|||
|
|
|||
|
(function() {
|
|||
|
'use strict';
|
|||
|
|
|||
|
// Mobile-friendly topbar menu
|
|||
|
$(function() {
|
|||
|
var menu = $('#menu');
|
|||
|
var menuButton = $('#menu-button');
|
|||
|
var menuButtonArrow = $('#menu-button-arrow');
|
|||
|
menuButton.click(function(event) {
|
|||
|
menu.toggleClass('menu-visible');
|
|||
|
menuButtonArrow.toggleClass('vertical-flip');
|
|||
|
event.preventDefault();
|
|||
|
return false;
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
/* Generates a table of contents: looks for h2 and h3 elements and generates
|
|||
|
* links. "Decorates" the element with id=="nav" with this table of contents.
|
|||
|
*/
|
|||
|
function generateTOC() {
|
|||
|
if ($('#manual-nav').length > 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var nav = $('#nav');
|
|||
|
if (nav.length === 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var toc_items = [];
|
|||
|
$(nav).nextAll('h2, h3').each(function() {
|
|||
|
var node = this;
|
|||
|
if (node.id == '')
|
|||
|
node.id = 'tmp_' + toc_items.length;
|
|||
|
var link = $('<a/>').attr('href', '#' + node.id).text($(node).text());
|
|||
|
var item;
|
|||
|
if ($(node).is('h2')) {
|
|||
|
item = $('<dt/>');
|
|||
|
} else { // h3
|
|||
|
item = $('<dd class="indent"/>');
|
|||
|
}
|
|||
|
item.append(link);
|
|||
|
toc_items.push(item);
|
|||
|
});
|
|||
|
if (toc_items.length <= 1) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var dl1 = $('<dl/>');
|
|||
|
var dl2 = $('<dl/>');
|
|||
|
|
|||
|
var split_index = (toc_items.length / 2) + 1;
|
|||
|
if (split_index < 8) {
|
|||
|
split_index = toc_items.length;
|
|||
|
}
|
|||
|
for (var i = 0; i < split_index; i++) {
|
|||
|
dl1.append(toc_items[i]);
|
|||
|
}
|
|||
|
for (/* keep using i */; i < toc_items.length; i++) {
|
|||
|
dl2.append(toc_items[i]);
|
|||
|
}
|
|||
|
|
|||
|
var tocTable = $('<table class="unruled"/>').appendTo(nav);
|
|||
|
var tocBody = $('<tbody/>').appendTo(tocTable);
|
|||
|
var tocRow = $('<tr/>').appendTo(tocBody);
|
|||
|
|
|||
|
// 1st column
|
|||
|
$('<td class="first"/>').appendTo(tocRow).append(dl1);
|
|||
|
// 2nd column
|
|||
|
$('<td/>').appendTo(tocRow).append(dl2);
|
|||
|
}
|
|||
|
|
|||
|
function bindToggle(el) {
|
|||
|
$('.toggleButton', el).click(function() {
|
|||
|
if ($(this).closest(".toggle, .toggleVisible")[0] != el) {
|
|||
|
// Only trigger the closest toggle header.
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if ($(el).is('.toggle')) {
|
|||
|
$(el).addClass('toggleVisible').removeClass('toggle');
|
|||
|
} else {
|
|||
|
$(el).addClass('toggle').removeClass('toggleVisible');
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function bindToggles(selector) {
|
|||
|
$(selector).each(function(i, el) {
|
|||
|
bindToggle(el);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function bindToggleLink(el, prefix) {
|
|||
|
$(el).click(function() {
|
|||
|
var href = $(el).attr('href');
|
|||
|
var i = href.indexOf('#'+prefix);
|
|||
|
if (i < 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
var id = '#' + prefix + href.slice(i+1+prefix.length);
|
|||
|
if ($(id).is('.toggle')) {
|
|||
|
$(id).find('.toggleButton').first().click();
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
function bindToggleLinks(selector, prefix) {
|
|||
|
$(selector).each(function(i, el) {
|
|||
|
bindToggleLink(el, prefix);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function setupDropdownPlayground() {
|
|||
|
if (!$('#page').is('.wide')) {
|
|||
|
return; // don't show on front page
|
|||
|
}
|
|||
|
var button = $('#playgroundButton');
|
|||
|
var div = $('#playground');
|
|||
|
var setup = false;
|
|||
|
button.toggle(function() {
|
|||
|
button.addClass('active');
|
|||
|
div.show();
|
|||
|
if (setup) {
|
|||
|
return;
|
|||
|
}
|
|||
|
setup = true;
|
|||
|
playground({
|
|||
|
'codeEl': $('.code', div),
|
|||
|
'outputEl': $('.output', div),
|
|||
|
'runEl': $('.run', div),
|
|||
|
'fmtEl': $('.fmt', div),
|
|||
|
'shareEl': $('.share', div),
|
|||
|
'shareRedirect': '//play.golang.org/p/'
|
|||
|
});
|
|||
|
},
|
|||
|
function() {
|
|||
|
button.removeClass('active');
|
|||
|
div.hide();
|
|||
|
});
|
|||
|
button.show();
|
|||
|
$('#menu').css('min-width', '+=60');
|
|||
|
}
|
|||
|
|
|||
|
function setupInlinePlayground() {
|
|||
|
'use strict';
|
|||
|
// Set up playground when each element is toggled.
|
|||
|
$('div.play').each(function (i, el) {
|
|||
|
// Set up playground for this example.
|
|||
|
var setup = function() {
|
|||
|
var code = $('.code', el);
|
|||
|
playground({
|
|||
|
'codeEl': code,
|
|||
|
'outputEl': $('.output', el),
|
|||
|
'runEl': $('.run', el),
|
|||
|
'fmtEl': $('.fmt', el),
|
|||
|
'shareEl': $('.share', el),
|
|||
|
'shareRedirect': '//play.golang.org/p/'
|
|||
|
});
|
|||
|
|
|||
|
// Make the code textarea resize to fit content.
|
|||
|
var resize = function() {
|
|||
|
code.height(0);
|
|||
|
var h = code[0].scrollHeight;
|
|||
|
code.height(h+20); // minimize bouncing.
|
|||
|
code.closest('.input').height(h);
|
|||
|
};
|
|||
|
code.on('keydown', resize);
|
|||
|
code.on('keyup', resize);
|
|||
|
code.keyup(); // resize now.
|
|||
|
};
|
|||
|
|
|||
|
// If example already visible, set up playground now.
|
|||
|
if ($(el).is(':visible')) {
|
|||
|
setup();
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Otherwise, set up playground when example is expanded.
|
|||
|
var built = false;
|
|||
|
$(el).closest('.toggle').click(function() {
|
|||
|
// Only set up once.
|
|||
|
if (!built) {
|
|||
|
setup();
|
|||
|
built = true;
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// fixFocus tries to put focus to div#page so that keyboard navigation works.
|
|||
|
function fixFocus() {
|
|||
|
var page = $('div#page');
|
|||
|
var topbar = $('div#topbar');
|
|||
|
page.css('outline', 0); // disable outline when focused
|
|||
|
page.attr('tabindex', -1); // and set tabindex so that it is focusable
|
|||
|
$(window).resize(function (evt) {
|
|||
|
// only focus page when the topbar is at fixed position (that is, it's in
|
|||
|
// front of page, and keyboard event will go to the former by default.)
|
|||
|
// by focusing page, keyboard event will go to page so that up/down arrow,
|
|||
|
// space, etc. will work as expected.
|
|||
|
if (topbar.css('position') == "fixed")
|
|||
|
page.focus();
|
|||
|
}).resize();
|
|||
|
}
|
|||
|
|
|||
|
function toggleHash() {
|
|||
|
var id = window.location.hash.substring(1);
|
|||
|
// Open all of the toggles for a particular hash.
|
|||
|
var els = $(
|
|||
|
document.getElementById(id),
|
|||
|
$('a[name]').filter(function() {
|
|||
|
return $(this).attr('name') == id;
|
|||
|
})
|
|||
|
);
|
|||
|
|
|||
|
while (els.length) {
|
|||
|
for (var i = 0; i < els.length; i++) {
|
|||
|
var el = $(els[i]);
|
|||
|
if (el.is('.toggle')) {
|
|||
|
el.find('.toggleButton').first().click();
|
|||
|
}
|
|||
|
}
|
|||
|
els = el.parent();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function personalizeInstallInstructions() {
|
|||
|
var prefix = '?download=';
|
|||
|
var s = window.location.search;
|
|||
|
if (s.indexOf(prefix) != 0) {
|
|||
|
// No 'download' query string; detect "test" instructions from User Agent.
|
|||
|
if (navigator.platform.indexOf('Win') != -1) {
|
|||
|
$('.testUnix').hide();
|
|||
|
$('.testWindows').show();
|
|||
|
} else {
|
|||
|
$('.testUnix').show();
|
|||
|
$('.testWindows').hide();
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var filename = s.substr(prefix.length);
|
|||
|
var filenameRE = /^go1\.\d+(\.\d+)?([a-z0-9]+)?\.([a-z0-9]+)(-[a-z0-9]+)?(-osx10\.[68])?\.([a-z.]+)$/;
|
|||
|
$('.downloadFilename').text(filename);
|
|||
|
$('.hideFromDownload').hide();
|
|||
|
var m = filenameRE.exec(filename);
|
|||
|
if (!m) {
|
|||
|
// Can't interpret file name; bail.
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var os = m[3];
|
|||
|
var ext = m[6];
|
|||
|
if (ext != 'tar.gz') {
|
|||
|
$('#tarballInstructions').hide();
|
|||
|
}
|
|||
|
if (os != 'darwin' || ext != 'pkg') {
|
|||
|
$('#darwinPackageInstructions').hide();
|
|||
|
}
|
|||
|
if (os != 'windows') {
|
|||
|
$('#windowsInstructions').hide();
|
|||
|
$('.testUnix').show();
|
|||
|
$('.testWindows').hide();
|
|||
|
} else {
|
|||
|
if (ext != 'msi') {
|
|||
|
$('#windowsInstallerInstructions').hide();
|
|||
|
}
|
|||
|
if (ext != 'zip') {
|
|||
|
$('#windowsZipInstructions').hide();
|
|||
|
}
|
|||
|
$('.testUnix').hide();
|
|||
|
$('.testWindows').show();
|
|||
|
}
|
|||
|
|
|||
|
var download = "https://dl.google.com/go/" + filename;
|
|||
|
|
|||
|
var message = $('<p class="downloading">'+
|
|||
|
'Your download should begin shortly. '+
|
|||
|
'If it does not, click <a>this link</a>.</p>');
|
|||
|
message.find('a').attr('href', download);
|
|||
|
message.insertAfter('#nav');
|
|||
|
|
|||
|
window.location = download;
|
|||
|
}
|
|||
|
|
|||
|
function updateVersionTags() {
|
|||
|
var v = window.goVersion;
|
|||
|
if (/^go[0-9.]+$/.test(v)) {
|
|||
|
$(".versionTag").empty().text(v);
|
|||
|
$(".whereTag").hide();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function addPermalinks() {
|
|||
|
function addPermalink(source, parent) {
|
|||
|
var id = source.attr("id");
|
|||
|
if (id == "" || id.indexOf("tmp_") === 0) {
|
|||
|
// Auto-generated permalink.
|
|||
|
return;
|
|||
|
}
|
|||
|
if (parent.find("> .permalink").length) {
|
|||
|
// Already attached.
|
|||
|
return;
|
|||
|
}
|
|||
|
parent.append(" ").append($("<a class='permalink'>¶</a>").attr("href", "#" + id));
|
|||
|
}
|
|||
|
|
|||
|
$("#page .container").find("h2[id], h3[id]").each(function() {
|
|||
|
var el = $(this);
|
|||
|
addPermalink(el, el);
|
|||
|
});
|
|||
|
|
|||
|
$("#page .container").find("dl[id]").each(function() {
|
|||
|
var el = $(this);
|
|||
|
// Add the anchor to the "dt" element.
|
|||
|
addPermalink(el, el.find("> dt").first());
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
$(document).ready(function() {
|
|||
|
generateTOC();
|
|||
|
addPermalinks();
|
|||
|
bindToggles(".toggle");
|
|||
|
bindToggles(".toggleVisible");
|
|||
|
bindToggleLinks(".exampleLink", "example_");
|
|||
|
bindToggleLinks(".overviewLink", "");
|
|||
|
bindToggleLinks(".examplesLink", "");
|
|||
|
bindToggleLinks(".indexLink", "");
|
|||
|
setupDropdownPlayground();
|
|||
|
setupInlinePlayground();
|
|||
|
fixFocus();
|
|||
|
setupTypeInfo();
|
|||
|
setupCallgraphs();
|
|||
|
toggleHash();
|
|||
|
personalizeInstallInstructions();
|
|||
|
updateVersionTags();
|
|||
|
|
|||
|
// godoc.html defines window.initFuncs in the <head> tag, and root.html and
|
|||
|
// codewalk.js push their on-page-ready functions to the list.
|
|||
|
// We execute those functions here, to avoid loading jQuery until the page
|
|||
|
// content is loaded.
|
|||
|
for (var i = 0; i < window.initFuncs.length; i++) window.initFuncs[i]();
|
|||
|
});
|
|||
|
|
|||
|
// -- analysis ---------------------------------------------------------
|
|||
|
|
|||
|
// escapeHTML returns HTML for s, with metacharacters quoted.
|
|||
|
// It is safe for use in both elements and attributes
|
|||
|
// (unlike the "set innerText, read innerHTML" trick).
|
|||
|
function escapeHTML(s) {
|
|||
|
return s.replace(/&/g, '&').
|
|||
|
replace(/\"/g, '"').
|
|||
|
replace(/\'/g, ''').
|
|||
|
replace(/</g, '<').
|
|||
|
replace(/>/g, '>');
|
|||
|
}
|
|||
|
|
|||
|
// makeAnchor returns HTML for an <a> element, given an anchorJSON object.
|
|||
|
function makeAnchor(json) {
|
|||
|
var html = escapeHTML(json.Text);
|
|||
|
if (json.Href != "") {
|
|||
|
html = "<a href='" + escapeHTML(json.Href) + "'>" + html + "</a>";
|
|||
|
}
|
|||
|
return html;
|
|||
|
}
|
|||
|
|
|||
|
function showLowFrame(html) {
|
|||
|
var lowframe = document.getElementById('lowframe');
|
|||
|
lowframe.style.height = "200px";
|
|||
|
lowframe.innerHTML = "<p style='text-align: left;'>" + html + "</p>\n" +
|
|||
|
"<div onclick='hideLowFrame()' style='position: absolute; top: 0; right: 0; cursor: pointer;'>✘</div>"
|
|||
|
};
|
|||
|
|
|||
|
document.hideLowFrame = function() {
|
|||
|
var lowframe = document.getElementById('lowframe');
|
|||
|
lowframe.style.height = "0px";
|
|||
|
}
|
|||
|
|
|||
|
// onClickCallers is the onclick action for the 'func' tokens of a
|
|||
|
// function declaration.
|
|||
|
document.onClickCallers = function(index) {
|
|||
|
var data = document.ANALYSIS_DATA[index]
|
|||
|
if (data.Callers.length == 1 && data.Callers[0].Sites.length == 1) {
|
|||
|
document.location = data.Callers[0].Sites[0].Href; // jump to sole caller
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var html = "Callers of <code>" + escapeHTML(data.Callee) + "</code>:<br/>\n";
|
|||
|
for (var i = 0; i < data.Callers.length; i++) {
|
|||
|
var caller = data.Callers[i];
|
|||
|
html += "<code>" + escapeHTML(caller.Func) + "</code>";
|
|||
|
var sites = caller.Sites;
|
|||
|
if (sites != null && sites.length > 0) {
|
|||
|
html += " at line ";
|
|||
|
for (var j = 0; j < sites.length; j++) {
|
|||
|
if (j > 0) {
|
|||
|
html += ", ";
|
|||
|
}
|
|||
|
html += "<code>" + makeAnchor(sites[j]) + "</code>";
|
|||
|
}
|
|||
|
}
|
|||
|
html += "<br/>\n";
|
|||
|
}
|
|||
|
showLowFrame(html);
|
|||
|
};
|
|||
|
|
|||
|
// onClickCallees is the onclick action for the '(' token of a function call.
|
|||
|
document.onClickCallees = function(index) {
|
|||
|
var data = document.ANALYSIS_DATA[index]
|
|||
|
if (data.Callees.length == 1) {
|
|||
|
document.location = data.Callees[0].Href; // jump to sole callee
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var html = "Callees of this " + escapeHTML(data.Descr) + ":<br/>\n";
|
|||
|
for (var i = 0; i < data.Callees.length; i++) {
|
|||
|
html += "<code>" + makeAnchor(data.Callees[i]) + "</code><br/>\n";
|
|||
|
}
|
|||
|
showLowFrame(html);
|
|||
|
};
|
|||
|
|
|||
|
// onClickTypeInfo is the onclick action for identifiers declaring a named type.
|
|||
|
document.onClickTypeInfo = function(index) {
|
|||
|
var data = document.ANALYSIS_DATA[index];
|
|||
|
var html = "Type <code>" + data.Name + "</code>: " +
|
|||
|
" <small>(size=" + data.Size + ", align=" + data.Align + ")</small><br/>\n";
|
|||
|
html += implementsHTML(data);
|
|||
|
html += methodsetHTML(data);
|
|||
|
showLowFrame(html);
|
|||
|
};
|
|||
|
|
|||
|
// implementsHTML returns HTML for the implements relation of the
|
|||
|
// specified TypeInfoJSON value.
|
|||
|
function implementsHTML(info) {
|
|||
|
var html = "";
|
|||
|
if (info.ImplGroups != null) {
|
|||
|
for (var i = 0; i < info.ImplGroups.length; i++) {
|
|||
|
var group = info.ImplGroups[i];
|
|||
|
var x = "<code>" + escapeHTML(group.Descr) + "</code> ";
|
|||
|
for (var j = 0; j < group.Facts.length; j++) {
|
|||
|
var fact = group.Facts[j];
|
|||
|
var y = "<code>" + makeAnchor(fact.Other) + "</code>";
|
|||
|
if (fact.ByKind != null) {
|
|||
|
html += escapeHTML(fact.ByKind) + " type " + y + " implements " + x;
|
|||
|
} else {
|
|||
|
html += x + " implements " + y;
|
|||
|
}
|
|||
|
html += "<br/>\n";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return html;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// methodsetHTML returns HTML for the methodset of the specified
|
|||
|
// TypeInfoJSON value.
|
|||
|
function methodsetHTML(info) {
|
|||
|
var html = "";
|
|||
|
if (info.Methods != null) {
|
|||
|
for (var i = 0; i < info.Methods.length; i++) {
|
|||
|
html += "<code>" + makeAnchor(info.Methods[i]) + "</code><br/>\n";
|
|||
|
}
|
|||
|
}
|
|||
|
return html;
|
|||
|
}
|
|||
|
|
|||
|
// onClickComm is the onclick action for channel "make" and "<-"
|
|||
|
// send/receive tokens.
|
|||
|
document.onClickComm = function(index) {
|
|||
|
var ops = document.ANALYSIS_DATA[index].Ops
|
|||
|
if (ops.length == 1) {
|
|||
|
document.location = ops[0].Op.Href; // jump to sole element
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var html = "Operations on this channel:<br/>\n";
|
|||
|
for (var i = 0; i < ops.length; i++) {
|
|||
|
html += makeAnchor(ops[i].Op) + " by <code>" + escapeHTML(ops[i].Fn) + "</code><br/>\n";
|
|||
|
}
|
|||
|
if (ops.length == 0) {
|
|||
|
html += "(none)<br/>\n";
|
|||
|
}
|
|||
|
showLowFrame(html);
|
|||
|
};
|
|||
|
|
|||
|
$(window).load(function() {
|
|||
|
// Scroll window so that first selection is visible.
|
|||
|
// (This means we don't need to emit id='L%d' spans for each line.)
|
|||
|
// TODO(adonovan): ideally, scroll it so that it's under the pointer,
|
|||
|
// but I don't know how to get the pointer y coordinate.
|
|||
|
var elts = document.getElementsByClassName("selection");
|
|||
|
if (elts.length > 0) {
|
|||
|
elts[0].scrollIntoView()
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// setupTypeInfo populates the "Implements" and "Method set" toggle for
|
|||
|
// each type in the package doc.
|
|||
|
function setupTypeInfo() {
|
|||
|
for (var i in document.ANALYSIS_DATA) {
|
|||
|
var data = document.ANALYSIS_DATA[i];
|
|||
|
|
|||
|
var el = document.getElementById("implements-" + i);
|
|||
|
if (el != null) {
|
|||
|
// el != null => data is TypeInfoJSON.
|
|||
|
if (data.ImplGroups != null) {
|
|||
|
el.innerHTML = implementsHTML(data);
|
|||
|
el.parentNode.parentNode.style.display = "block";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
var el = document.getElementById("methodset-" + i);
|
|||
|
if (el != null) {
|
|||
|
// el != null => data is TypeInfoJSON.
|
|||
|
if (data.Methods != null) {
|
|||
|
el.innerHTML = methodsetHTML(data);
|
|||
|
el.parentNode.parentNode.style.display = "block";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function setupCallgraphs() {
|
|||
|
if (document.CALLGRAPH == null) {
|
|||
|
return
|
|||
|
}
|
|||
|
document.getElementById("pkg-callgraph").style.display = "block";
|
|||
|
|
|||
|
var treeviews = document.getElementsByClassName("treeview");
|
|||
|
for (var i = 0; i < treeviews.length; i++) {
|
|||
|
var tree = treeviews[i];
|
|||
|
if (tree.id == null || tree.id.indexOf("callgraph-") != 0) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
var id = tree.id.substring("callgraph-".length);
|
|||
|
$(tree).treeview({collapsed: true, animated: "fast"});
|
|||
|
document.cgAddChildren(tree, tree, [id]);
|
|||
|
tree.parentNode.parentNode.style.display = "block";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
document.cgAddChildren = function(tree, ul, indices) {
|
|||
|
if (indices != null) {
|
|||
|
for (var i = 0; i < indices.length; i++) {
|
|||
|
var li = cgAddChild(tree, ul, document.CALLGRAPH[indices[i]]);
|
|||
|
if (i == indices.length - 1) {
|
|||
|
$(li).addClass("last");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
$(tree).treeview({animated: "fast", add: ul});
|
|||
|
}
|
|||
|
|
|||
|
// cgAddChild adds an <li> element for document.CALLGRAPH node cgn to
|
|||
|
// the parent <ul> element ul. tree is the tree's root <ul> element.
|
|||
|
function cgAddChild(tree, ul, cgn) {
|
|||
|
var li = document.createElement("li");
|
|||
|
ul.appendChild(li);
|
|||
|
li.className = "closed";
|
|||
|
|
|||
|
var code = document.createElement("code");
|
|||
|
|
|||
|
if (cgn.Callees != null) {
|
|||
|
$(li).addClass("expandable");
|
|||
|
|
|||
|
// Event handlers and innerHTML updates don't play nicely together,
|
|||
|
// hence all this explicit DOM manipulation.
|
|||
|
var hitarea = document.createElement("div");
|
|||
|
hitarea.className = "hitarea expandable-hitarea";
|
|||
|
li.appendChild(hitarea);
|
|||
|
|
|||
|
li.appendChild(code);
|
|||
|
|
|||
|
var childUL = document.createElement("ul");
|
|||
|
li.appendChild(childUL);
|
|||
|
childUL.setAttribute('style', "display: none;");
|
|||
|
|
|||
|
var onClick = function() {
|
|||
|
document.cgAddChildren(tree, childUL, cgn.Callees);
|
|||
|
hitarea.removeEventListener('click', onClick)
|
|||
|
};
|
|||
|
hitarea.addEventListener('click', onClick);
|
|||
|
|
|||
|
} else {
|
|||
|
li.appendChild(code);
|
|||
|
}
|
|||
|
code.innerHTML += " " + makeAnchor(cgn.Func);
|
|||
|
return li
|
|||
|
}
|
|||
|
|
|||
|
})();
|
|||
|
`,
|
|||
|
|
|||
|
"images/minus.gif": "GIF89a\t\x00\t\x00\xf7\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\xff\x00,\x00\x00\x00\x00\t\x00\t\x00\x00\b\"\x00\x03\b\x1cH\xf0\x9f\xc1\x83\xff\x04\"<\xa8pa\xc2\x00\xff\x00H\x94\xf8\xd0aE\x87\r\x17\x12\xdc\x18 \x00;",
|
|||
|
|
|||
|
"images/plus.gif": "GIF89a\t\x00\t\x00\xf7\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\xff\x00,\x00\x00\x00\x00\t\x00\t\x00\x00\b&\x00\x03\b\x1cH\xf0\x9f\xc1\x83\xff\x04\x1e\x04pP\xa1A\x86\x06\x15\x02\x9881a\x80\x85\r/>̈0#A\x82\x01\x01\x00;",
|
|||
|
|
|||
|
"images/treeview-black-line.gif": "GIF89a\x10\x00\xf0\x06\xf7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\xff\x00,\x00\x00\x00\x00\x10\x00\xf0\x06\x00\b\xff\x00\xff\t\x1c\xf8\x0f\x00\xc1\x83\b\r\"\\X\x90\xe1B\x85\x0e\tB\x8c(p\"E\x8b\x111:\xd4\xc8\x10\x80Ǐ\x1f\x1fR\x948r G\x91%\x1b\xa6<\x990\xa5ʒ,\x0f\xc6$\xb9\xd2\xe5L\x936s\xd6\xdc\tSgO\x9e#oV\xf4\x19\x94\xe8E\xa3\x19\x91nTڑ)ʟP\x8b\x02=:5iեW\x9bf}*5*U\xafV\xc1b\x15\xab\x95,\u05ef]Ӣ]\x1bVm[\xb6c\xddƅ[Vn]\xbag\xdfꝻ\xf7n\u07fc|\x03\xfb\x15\fx\xb0\xe1\u0088[nUl\x96\xb1\xdd\xc42\x9d:\xc6;\xf9oe\u0097\x0fg\x86L\xb3q\xe4ş=w~\xbc\xb9thҧ)\xa7\xb6\xbc\x1askͯ9\xe3\x04=Zumַ]熽[\xf6PڳE\aG\xdd\xdbt\xf1\xd8Ƈ\xdbV\x8e\x9b\xb9n缡\xfb~Iܥ\xf5\xebسk\xdfν{\xf4\xdf\xc2\xc1W\xff\x17\xbf\x9c|s\xf3\xcf\xd1\u007f\xa7^\x9e\xfdy\xf7\xe9\xe1\xaf\x17*\u007f:\xfd\xfb\x92\x91\xeb?\xce_zr\xf5\xf6\xe5\xd7\x1f\x80\xff\xd5W ~\xc0\x11\xb8\x9f\u007f\v*8\xa0\x81\rB\xf8 \x82\xe1I\xc8\xe0\x84\x02^\xa8\xa1\x83\x1bZ\xc8\xe1\x87\x1e\x86H\xe1x\"f\b\xe2\x88\xed\xa1\xf8\x9e\x8a\xf1\xb18\x9f\x89%&\x
|
|||
|
|
|||
|
"images/treeview-black.gif": "GIF89a`\x00\x85\x00\xa1\x01\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff!\xf9\x04\x01\x00\x00\x02\x00,\x00\x00\x00\x00`\x00\x85\x00\x00\x02\xfe\x94\x8f\xa9\xcb\xed\x0fE\x98\xc1ш\xb3ި\xf2\x0f\x86\x9a'\x96\xa6I\x9e\xeaʶ\xee\nIJ\xfc\xd6&\xb0\xe0\xf6\xfe\xe9\x82\xef\xe3\t#\xc0Cp\x88d\xe0f\xcbY\xf2\x89(\x1a\x8eP\xa8\xf4W\xcdNs\xda,\xd3\xd9\xedR\xc3^\xb2yl~\xa2\xd3\xc85[\xe8~\xabRF9\x8f\xbe\xb5o.\x96\tW?R\x12\a\x98\x80Gx\x88\x98\b\xf8E\xa3\xa826\xe8\x88\x01)yBY)\xf8\xe3Ą\xd9\xf3\xd7\tr\t\xea\xa9\x109\x9a\xc3hzڠ\xba\xfa\xd0\xea\xca\x1a{3\x9bY\x1b\x02\xebj\x98\xbb\xba\x1b\xcb\xd7\x00\x1c\xf5k\xdb{{\x8c\x9c\xac\x8cʸ\xac\xf4\xe9<\x9c\x87\x15\x9dp\xc5{\xdaD\xc3Y}]m]7\xfdM\r>>\x95j\x9e\xae\xbe\xceގd\xb8\x0e\xff+\xac@\u007f뛎o\xae?\xce\xef\x8e\x1d+\x15@P\xa2\xc6yKwМ\xb6\x18\x9a\x1aEKh0\x1c\xb9\x88\xa5\xd4\tt\x871\xa3\xc6d\x8d\x06\xe4\xe5\xdb豗\x9f>!O\x95\xfcv\xb2ZJ\x8e,\r\xa2C\b\xed[A\x991\xbb5d\xc8\xedaM\x9d\x15a\xf6T\xf8\xb2\xa5СDG\xadtvtY\xd2J\xf6:\x8cT\xb8q`-\xa9\xb3\xa8\x06\xfc\x17\x94b9\xa8?\xb5J\x83\xca)\xa7\xb3\x996\xbb\xd24\xdb-kѵlۺ}\v7.\x82\x02\x00;",
|
|||
|
|
|||
|
"images/treeview-default-line.gif": "GIF89a\x10\x00\xf0\x06\xf7\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\xff\x00,\x00\x00\x00\x00\x10\x00\xf0\x06\x00\b\xff\x00\xff\t\x1cH\xb0\xa0A\x81\x01\x0e*\\x0!Ç\v\x1dB\x9cHP\"E\x8a\t3\xfe\xd3x\xb1aNj\x16?2\f)R!ɒ\x06O\xa2\xac\xb8rdˈ/M\xc6\xf48\xb3\xa0ʗ7[\xe6\\\xb9\x13eϒ?E\x06\xfd8\xb4cQ\x905m&e\xb9\x14aS\xa7O\x8fb|\xba\x91\xaaԉW!f}\xb8\xd5eT\xab`\xbf\x8am\xda\x15\xe6إee\x9eM\x9a\x96&ٰo\xd7\xd6l\x9b\x12.Z\xbbl\xf1\xce\xd5;\x93\xaeR\xb9}\xf9\xc6\xf4\xcb4\xaeỀ\a\vƹXgc\x9e\x8f}F\x06:Yhe\xa2\x97\xa9j\xde̹3\xd7\xccH\x133\x16\xed\x984dӒQSVm\x995f\xd7FAO\x85\x1d\xfap^ڳm\xefōUvo\xdeZ}\a\a\xfe\x99\xb8W݁\x8d\x9bE\xaeX\xb9Z棡\x97\x96~\x9azj뫱\xb7\xd6\xfe\x9a{l\xe7n\x11{\xff\xaf-\xbe\xfc\xed\xf1\xb9\xcd\xefF\xff\x9b\xfdp\xf7\xc5\xe1\x1fW\x9f\\\xfer\xfa\xcd\xed?\xc7\x1f\x9d\xfft\xff\xd5\x01x\x9d\x80\xd9\x11\xb8\x9d\x81\xdd!\xf8\x9d~ᝧ y\x0eF\xb8ރ\xe9IX\x1f\x85\xeda\xf8\x9e\x86\xf1q8\x9f\x85\xf9yx\x1f\x88\xfd\x91\xf8\x9f\x89\x01\xa28\xa0\x8a\x05\xb2x\xa0\x8b\t¸\xa0\x88\xfb\xc9
|
|||
|
|
|||
|
"images/treeview-default.gif": "GIF89a`\x00\x85\x00\xa1\x03\x00\x00\x00\x00\x80\x80\x80\xbc\xbc\xbc\xff\xff\xff!\xf9\x04\x01\x00\x00\x03\x00,\x00\x00\x00\x00`\x00\x85\x00\x00\x02\xfe\x9c\x8f\xa9\xcb\xed\x0f\a\x98\xc0ш\xb3ި\xf2\x0f\x86\x9a'\x96\xa6I\x9e\xeaʶ\xee\x1aIJ\xfc\xd6f\xb0\xe0\xf6\xfe\xe9\xd2\xe1\xe3\t#>Rp\x88d\xe0(\x93\x01\ue64c\"\x8a@\xa9uz0^\xb7GCw;\x9c\x89\xc1\xe4\xb2\xd9yN\xab\xa5ߵ\xfb}j\xc3M\x82y\xb2\xae\x90\xdb\x13\x82\xfe\xa3\x8f\xb7\xf7\x11\b\xa2'h@x\xa8\xb8\xc8\xc8&F\xd3(\xf2e\x18\xf90Y\x19r\x89\xd9#\xc1\x84\x06\xb5\x89\xa1\x19\xaa1J*\x9asZ\xfa\x18\xa3\xeajE\xf9*\xeb\x12;k\x1bwې\x98\xfb\x97J\n\xf8\xe7w\xbb\xbbQkG̛\xac\xbc\xfc\xc6\xda\xca\xec\xe5\vM\x15\r\x8df\xa0e\xbd\xe4\te\xbcI}=\x9dU\xa5-\xcd\xec\xecm\xad\xbe\xce\xde\ueb81\xac\x1e\xff\v\xac+l;\x0fM\x9c\xfe\xfb~\xb0\xef/ :u\xa6\x96\x81\xe3\x17\xea \xc1N\x17\xba\x19\x1cWM\x1c6r\x12\x13 \xfc\xe6,\xa0\xc6b\x8d\x1c\xf5i\xcc\xc7\f$\xa6z\xf6DV2\x99\f%/\x95\x1d[\xde\x1aX.\xcfB\x991-.dR\xc1\xa1\xb2\x82;\xcd=\xa49-\xa3ˡD\x8b\x1eb9\xec\xe3\xca{\vH\x1a\x9du\xf1i\xa5\xa8R\x0f\xc1\xac\x88\xa5fV\xac\x14\xcf1l\xa23\x19O\xb1>{\x02='\xb4\xaaڵlۺ}˫\x00\x00;",
|
|||
|
|
|||
|
"images/treeview-gray-line.gif": "GIF89a\x10\x00\xf0\x06\xf7\x00\x00\x00\x00\x00\x80\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00!\xf9\x04\x01\x00\x00\xff\x00,\x00\x00\x00\x00\x10\x00\xf0\x06\x00\b\xff\x00\xff\t\x1c\xf8/\x00\xc1\x83\b\r\"\\X\x90\xe1B\x85\x0e\tB\x8c(p\"E\x8b\x111:\xd4\xc80\x80Ǐ\x1f\x1fR\x948r G\x91%\x1b\xa6<\x990\xa5ʒ,\x0f\xc6$\xb9\xd2\xe5L\x936s\xd6\xdc\tSgO\x9e#oV\xf4\x19\x94\xe8E\xa3\x19\x91nTڑ)ʟP\x8b\x02=:5iեW\x9bf}*5*U\xafV\xc1b\x15\xab\x95,\u05ef]Ӣ]\x1bVm[\xb6c\xddƅ[Vn]\xbag\xdfꝻ\xf7n\u07fc|\x03\xfb\x15\fx\xb0\xe1\u0088[nUl\x96\xb1\xdd\xc42\x9d:\xc6;\xf9oe\u0097\x0fg\x86L\xb3q\xe4ş=w~\xbc\xb9thҧ)\xa7\xb6\xbc\x1askͯ9\xe3\x04=Zumַ]熽[\xf6PڳE\aG\xdd\xdbt\xf1\xd8Ƈ\xdbV\x8e\x9b\xb9n缡\xfb~Iܥ\xf5\xebسk\xdfν{\xf4\xdf\xc2\xc1W\xff\x17\xbf\x9c|s\xf3\xcf\xd1\u007f\xa7^\x9e\xfdy\xf7\xe9\xe1\xaf\x17*\u007f:\xfd\xfb\x92\x91\xeb?\xce_zr\xf5\xf6\xe5\xd7\x1f\x80\xff\xd5W ~\xc0\x11\xb8\x9f\u007f\v*8\xa0\x81\rB\xf8 \x82\xe1I\xc8\xe0\x84\x02^\xa8\xa1\x83\x1bZ\xc8\xe1\x87\x1e\x86H\xe1x\"f\b\xe2\x88\xed\xa1\xf8\x9e\x8a\xf1\xb18\x9f\x89%&\x18c\x85
|
|||
|
|
|||
|
"images/treeview-gray.gif": "GIF89a`\x00\x85\x00\xa1\x03\x00\x00\x00\x00\x80\x80\x80\xbc\xbc\xbc\xff\xff\xff!\xf9\x04\x01\x00\x00\x03\x00,\x00\x00\x00\x00`\x00\x85\x00\x00\x02\xfe\x9c\x8f\xa9\xcb\xed\x0f\x87\x98\xc2ш\xb3ި\xf2\x0f\x86\x9a'\x96\xa6I\x9e\xeaʶ\xee\x1aIJ\xfc\xd6f\xb0\xe0\xf6\xfe\xe9\x03p\xf0\xf1\x86\x11\x1f\xd0 $*\x198\x80\xd39\x98%\x97Kc\x90\x8aUX\x91\xd9.W\xeb\xedJg\xe1\xf2\xb4,F\xab\xcfj*\xbb\xad|Ç\xf2\xb9*u\xb5\xef\xf0_\xfdh\xf2p\x01\xe67RRG\x98\xc0\x87\xb8\xc8\xd8H8F\xe3\xa8rv(\x89Aiy\x82\x99i\xf8\xf3\x04$\xc5ٓ#*\xb2Y::\x88\xca\x01\x19\xb3\xda\xf9\xaa\x19+;\v[\x1bRyې{\xab\xc8[\xeb;+\xd80\x8c\xf0K\xa8\xa8q여\xeb\xfc\f\rݺ\xfcz\x1a\xadz\x14u\xcdt\x90M\xbd\xda\xf4\x19E\xb6\xdd\xe7]\x8e\x9d\x87\xaen\xbcn\xdc\xea\x1e/?O_\xef\xd5,\x8f\xffJ\x81_\xec\x1c\x9c\x8fT@U\xee\x00\xdac7oZB\x81\xf1\xb6h\x93\xe7\xf0\x1b\xaapO\xc6E*\x17q\xa1\x81ms\x10\x19\xbaSx0\xa4ȑ$%\x90\xd4W\xf0\x9a?\x05+{\x9d|Y2fL\x90\r=\xae\xb3v\xd3&:\x8aPB\xedԉ\x11\xe86\x9c;\xe1\xc9<\x8a4\xe9*\x94똢sZ\xaa\xe5\x01\xa9\xd7$\xea\xb2z\vk-\xad\xb3\xb8\x96\xa2\xf9QhU\xb1ш\x06\xfd\x04\x8a\\P\x829\xd9\xfet\x8bѨҹt\xebڽ\x8b7\xaf\x82\x02\x00;",
|
|||
|
|
|||
|
"implements.html": `<div class="toggle" style="display: none">
|
|||
|
<div class="collapsed">
|
|||
|
<p class="exampleHeading toggleButton">▹ <span class="text">Implements</span></p>
|
|||
|
</div>
|
|||
|
<div class="expanded">
|
|||
|
<p class="exampleHeading toggleButton">▾ <span class="text">Implements</span></p>
|
|||
|
<div style="margin-left: 1in" id='implements-{{.Index}}'>...</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
`,
|
|||
|
|
|||
|
"jquery.js": `/*! jQuery v1.8.2 jquery.com | jquery.org/license */
|
|||
|
(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ
|
|||
|
|
|||
|
"jquery.treeview.css": `/* https://github.com/jzaefferer/jquery-treeview/blob/master/jquery.treeview.css */
|
|||
|
/* License: MIT. */
|
|||
|
.treeview, .treeview ul {
|
|||
|
padding: 0;
|
|||
|
margin: 0;
|
|||
|
list-style: none;
|
|||
|
}
|
|||
|
|
|||
|
.treeview ul {
|
|||
|
background-color: white;
|
|||
|
margin-top: 4px;
|
|||
|
}
|
|||
|
|
|||
|
.treeview .hitarea {
|
|||
|
background: url(images/treeview-default.gif) -64px -25px no-repeat;
|
|||
|
height: 16px;
|
|||
|
width: 16px;
|
|||
|
margin-left: -16px;
|
|||
|
float: left;
|
|||
|
cursor: pointer;
|
|||
|
}
|
|||
|
/* fix for IE6 */
|
|||
|
* html .hitarea {
|
|||
|
display: inline;
|
|||
|
float:none;
|
|||
|
}
|
|||
|
|
|||
|
.treeview li {
|
|||
|
margin: 0;
|
|||
|
padding: 3px 0pt 3px 16px;
|
|||
|
}
|
|||
|
|
|||
|
.treeview a.selected {
|
|||
|
background-color: #eee;
|
|||
|
}
|
|||
|
|
|||
|
#treecontrol { margin: 1em 0; display: none; }
|
|||
|
|
|||
|
.treeview .hover { color: red; cursor: pointer; }
|
|||
|
|
|||
|
.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; }
|
|||
|
.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
|
|||
|
|
|||
|
.treeview .expandable-hitarea { background-position: -80px -3px; }
|
|||
|
|
|||
|
.treeview li.last { background-position: 0 -1766px }
|
|||
|
.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); }
|
|||
|
.treeview li.lastCollapsable { background-position: 0 -111px }
|
|||
|
.treeview li.lastExpandable { background-position: -32px -67px }
|
|||
|
|
|||
|
.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
|
|||
|
|
|||
|
.treeview-red li { background-image: url(images/treeview-red-line.gif); }
|
|||
|
.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); }
|
|||
|
|
|||
|
.treeview-black li { background-image: url(images/treeview-black-line.gif); }
|
|||
|
.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); }
|
|||
|
|
|||
|
.treeview-gray li { background-image: url(images/treeview-gray-line.gif); }
|
|||
|
.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); }
|
|||
|
|
|||
|
.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); }
|
|||
|
.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); }
|
|||
|
|
|||
|
.treeview .placeholder {
|
|||
|
background: url(images/ajax-loader.gif) 0 0 no-repeat;
|
|||
|
height: 16px;
|
|||
|
width: 16px;
|
|||
|
display: block;
|
|||
|
}
|
|||
|
|
|||
|
.filetree li { padding: 3px 0 2px 16px; }
|
|||
|
.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
|
|||
|
.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; }
|
|||
|
.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; }
|
|||
|
.filetree span.file { background: url(images/file.gif) 0 0 no-repeat; }
|
|||
|
`,
|
|||
|
|
|||
|
"jquery.treeview.edit.js": `/* https://github.com/jzaefferer/jquery-treeview/blob/master/jquery.treeview.edit.js */
|
|||
|
/* License: MIT. */
|
|||
|
(function($) {
|
|||
|
var CLASSES = $.treeview.classes;
|
|||
|
var proxied = $.fn.treeview;
|
|||
|
$.fn.treeview = function(settings) {
|
|||
|
settings = $.extend({}, settings);
|
|||
|
if (settings.add) {
|
|||
|
return this.trigger("add", [settings.add]);
|
|||
|
}
|
|||
|
if (settings.remove) {
|
|||
|
return this.trigger("remove", [settings.remove]);
|
|||
|
}
|
|||
|
return proxied.apply(this, arguments).bind("add", function(event, branches) {
|
|||
|
$(branches).prev()
|
|||
|
.removeClass(CLASSES.last)
|
|||
|
.removeClass(CLASSES.lastCollapsable)
|
|||
|
.removeClass(CLASSES.lastExpandable)
|
|||
|
.find(">.hitarea")
|
|||
|
.removeClass(CLASSES.lastCollapsableHitarea)
|
|||
|
.removeClass(CLASSES.lastExpandableHitarea);
|
|||
|
$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, $(this).data("toggler"));
|
|||
|
}).bind("remove", function(event, branches) {
|
|||
|
var prev = $(branches).prev();
|
|||
|
var parent = $(branches).parent();
|
|||
|
$(branches).remove();
|
|||
|
prev.filter(":last-child").addClass(CLASSES.last)
|
|||
|
.filter("." + CLASSES.expandable).replaceClass(CLASSES.last, CLASSES.lastExpandable).end()
|
|||
|
.find(">.hitarea").replaceClass(CLASSES.expandableHitarea, CLASSES.lastExpandableHitarea).end()
|
|||
|
.filter("." + CLASSES.collapsable).replaceClass(CLASSES.last, CLASSES.lastCollapsable).end()
|
|||
|
.find(">.hitarea").replaceClass(CLASSES.collapsableHitarea, CLASSES.lastCollapsableHitarea);
|
|||
|
if (parent.is(":not(:has(>))") && parent[0] != this) {
|
|||
|
parent.parent().removeClass(CLASSES.collapsable).removeClass(CLASSES.expandable)
|
|||
|
parent.siblings(".hitarea").andSelf().remove();
|
|||
|
}
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
})(jQuery);
|
|||
|
`,
|
|||
|
|
|||
|
"jquery.treeview.js": `/*
|
|||
|
* Treeview 1.4.1 - jQuery plugin to hide and show branches of a tree
|
|||
|
*
|
|||
|
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
|
|||
|
* http://docs.jquery.com/Plugins/Treeview
|
|||
|
*
|
|||
|
* Copyright (c) 2007 Jörn Zaefferer
|
|||
|
*
|
|||
|
* Dual licensed under the MIT and GPL licenses:
|
|||
|
* http://www.opensource.org/licenses/mit-license.php
|
|||
|
* http://www.gnu.org/licenses/gpl.html
|
|||
|
*
|
|||
|
* Revision: $Id: jquery.treeview.js 5759 2008-07-01 07:50:28Z joern.zaefferer $
|
|||
|
*
|
|||
|
*/
|
|||
|
|
|||
|
;(function($) {
|
|||
|
|
|||
|
// TODO rewrite as a widget, removing all the extra plugins
|
|||
|
$.extend($.fn, {
|
|||
|
swapClass: function(c1, c2) {
|
|||
|
var c1Elements = this.filter('.' + c1);
|
|||
|
this.filter('.' + c2).removeClass(c2).addClass(c1);
|
|||
|
c1Elements.removeClass(c1).addClass(c2);
|
|||
|
return this;
|
|||
|
},
|
|||
|
replaceClass: function(c1, c2) {
|
|||
|
return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
|
|||
|
},
|
|||
|
hoverClass: function(className) {
|
|||
|
className = className || "hover";
|
|||
|
return this.hover(function() {
|
|||
|
$(this).addClass(className);
|
|||
|
}, function() {
|
|||
|
$(this).removeClass(className);
|
|||
|
});
|
|||
|
},
|
|||
|
heightToggle: function(animated, callback) {
|
|||
|
animated ?
|
|||
|
this.animate({ height: "toggle" }, animated, callback) :
|
|||
|
this.each(function(){
|
|||
|
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
|
|||
|
if(callback)
|
|||
|
callback.apply(this, arguments);
|
|||
|
});
|
|||
|
},
|
|||
|
heightHide: function(animated, callback) {
|
|||
|
if (animated) {
|
|||
|
this.animate({ height: "hide" }, animated, callback);
|
|||
|
} else {
|
|||
|
this.hide();
|
|||
|
if (callback)
|
|||
|
this.each(callback);
|
|||
|
}
|
|||
|
},
|
|||
|
prepareBranches: function(settings) {
|
|||
|
if (!settings.prerendered) {
|
|||
|
// mark last tree items
|
|||
|
this.filter(":last-child:not(ul)").addClass(CLASSES.last);
|
|||
|
// collapse whole tree, or only those marked as closed, anyway except those marked as open
|
|||
|
this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
|
|||
|
}
|
|||
|
// return all items with sublists
|
|||
|
return this.filter(":has(>ul)");
|
|||
|
},
|
|||
|
applyClasses: function(settings, toggler) {
|
|||
|
// TODO use event delegation
|
|||
|
this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) {
|
|||
|
// don't handle click events on children, eg. checkboxes
|
|||
|
if ( this == event.target )
|
|||
|
toggler.apply($(this).next());
|
|||
|
}).add( $("a", this) ).hoverClass();
|
|||
|
|
|||
|
if (!settings.prerendered) {
|
|||
|
// handle closed ones first
|
|||
|
this.filter(":has(>ul:hidden)")
|
|||
|
.addClass(CLASSES.expandable)
|
|||
|
.replaceClass(CLASSES.last, CLASSES.lastExpandable);
|
|||
|
|
|||
|
// handle open ones
|
|||
|
this.not(":has(>ul:hidden)")
|
|||
|
.addClass(CLASSES.collapsable)
|
|||
|
.replaceClass(CLASSES.last, CLASSES.lastCollapsable);
|
|||
|
|
|||
|
// create hitarea if not present
|
|||
|
var hitarea = this.find("div." + CLASSES.hitarea);
|
|||
|
if (!hitarea.length)
|
|||
|
hitarea = this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea);
|
|||
|
hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {
|
|||
|
var classes = "";
|
|||
|
$.each($(this).parent().attr("class").split(" "), function() {
|
|||
|
classes += this + "-hitarea ";
|
|||
|
});
|
|||
|
$(this).addClass( classes );
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
// apply event to hitarea
|
|||
|
this.find("div." + CLASSES.hitarea).click( toggler );
|
|||
|
},
|
|||
|
treeview: function(settings) {
|
|||
|
|
|||
|
settings = $.extend({
|
|||
|
cookieId: "treeview"
|
|||
|
}, settings);
|
|||
|
|
|||
|
if ( settings.toggle ) {
|
|||
|
var callback = settings.toggle;
|
|||
|
settings.toggle = function() {
|
|||
|
return callback.apply($(this).parent()[0], arguments);
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
// factory for treecontroller
|
|||
|
function treeController(tree, control) {
|
|||
|
// factory for click handlers
|
|||
|
function handler(filter) {
|
|||
|
return function() {
|
|||
|
// reuse toggle event handler, applying the elements to toggle
|
|||
|
// start searching for all hitareas
|
|||
|
toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
|
|||
|
// for plain toggle, no filter is provided, otherwise we need to check the parent element
|
|||
|
return filter ? $(this).parent("." + filter).length : true;
|
|||
|
}) );
|
|||
|
return false;
|
|||
|
};
|
|||
|
}
|
|||
|
// click on first element to collapse tree
|
|||
|
$("a:eq(0)", control).click( handler(CLASSES.collapsable) );
|
|||
|
// click on second to expand tree
|
|||
|
$("a:eq(1)", control).click( handler(CLASSES.expandable) );
|
|||
|
// click on third to toggle tree
|
|||
|
$("a:eq(2)", control).click( handler() );
|
|||
|
}
|
|||
|
|
|||
|
// handle toggle event
|
|||
|
function toggler() {
|
|||
|
$(this)
|
|||
|
.parent()
|
|||
|
// swap classes for hitarea
|
|||
|
.find(">.hitarea")
|
|||
|
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
|||
|
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
|
|||
|
.end()
|
|||
|
// swap classes for parent li
|
|||
|
.swapClass( CLASSES.collapsable, CLASSES.expandable )
|
|||
|
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
|||
|
// find child lists
|
|||
|
.find( ">ul" )
|
|||
|
// toggle them
|
|||
|
.heightToggle( settings.animated, settings.toggle );
|
|||
|
if ( settings.unique ) {
|
|||
|
$(this).parent()
|
|||
|
.siblings()
|
|||
|
// swap classes for hitarea
|
|||
|
.find(">.hitarea")
|
|||
|
.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
|||
|
.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
|
|||
|
.end()
|
|||
|
.replaceClass( CLASSES.collapsable, CLASSES.expandable )
|
|||
|
.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
|||
|
.find( ">ul" )
|
|||
|
.heightHide( settings.animated, settings.toggle );
|
|||
|
}
|
|||
|
}
|
|||
|
this.data("toggler", toggler);
|
|||
|
|
|||
|
function serialize() {
|
|||
|
function binary(arg) {
|
|||
|
return arg ? 1 : 0;
|
|||
|
}
|
|||
|
var data = [];
|
|||
|
branches.each(function(i, e) {
|
|||
|
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
|
|||
|
});
|
|||
|
$.cookie(settings.cookieId, data.join(""), settings.cookieOptions );
|
|||
|
}
|
|||
|
|
|||
|
function deserialize() {
|
|||
|
var stored = $.cookie(settings.cookieId);
|
|||
|
if ( stored ) {
|
|||
|
var data = stored.split("");
|
|||
|
branches.each(function(i, e) {
|
|||
|
$(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// add treeview class to activate styles
|
|||
|
this.addClass("treeview");
|
|||
|
|
|||
|
// prepare branches and find all tree items with child lists
|
|||
|
var branches = this.find("li").prepareBranches(settings);
|
|||
|
|
|||
|
switch(settings.persist) {
|
|||
|
case "cookie":
|
|||
|
var toggleCallback = settings.toggle;
|
|||
|
settings.toggle = function() {
|
|||
|
serialize();
|
|||
|
if (toggleCallback) {
|
|||
|
toggleCallback.apply(this, arguments);
|
|||
|
}
|
|||
|
};
|
|||
|
deserialize();
|
|||
|
break;
|
|||
|
case "location":
|
|||
|
var current = this.find("a").filter(function() {
|
|||
|
return this.href.toLowerCase() == location.href.toLowerCase();
|
|||
|
});
|
|||
|
if ( current.length ) {
|
|||
|
// TODO update the open/closed classes
|
|||
|
var items = current.addClass("selected").parents("ul, li").add( current.next() ).show();
|
|||
|
if (settings.prerendered) {
|
|||
|
// if prerendered is on, replicate the basic class swapping
|
|||
|
items.filter("li")
|
|||
|
.swapClass( CLASSES.collapsable, CLASSES.expandable )
|
|||
|
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
|
|||
|
.find(">.hitarea")
|
|||
|
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
|
|||
|
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
branches.applyClasses(settings, toggler);
|
|||
|
|
|||
|
// if control option is set, create the treecontroller and show it
|
|||
|
if ( settings.control ) {
|
|||
|
treeController(this, settings.control);
|
|||
|
$(settings.control).show();
|
|||
|
}
|
|||
|
|
|||
|
return this;
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// classes used by the plugin
|
|||
|
// need to be styled via external stylesheet, see first example
|
|||
|
$.treeview = {};
|
|||
|
var CLASSES = ($.treeview.classes = {
|
|||
|
open: "open",
|
|||
|
closed: "closed",
|
|||
|
expandable: "expandable",
|
|||
|
expandableHitarea: "expandable-hitarea",
|
|||
|
lastExpandableHitarea: "lastExpandable-hitarea",
|
|||
|
collapsable: "collapsable",
|
|||
|
collapsableHitarea: "collapsable-hitarea",
|
|||
|
lastCollapsableHitarea: "lastCollapsable-hitarea",
|
|||
|
lastCollapsable: "lastCollapsable",
|
|||
|
lastExpandable: "lastExpandable",
|
|||
|
last: "last",
|
|||
|
hitarea: "hitarea"
|
|||
|
});
|
|||
|
|
|||
|
})(jQuery);
|
|||
|
`,
|
|||
|
|
|||
|
"methodset.html": `<div class="toggle" style="display: none">
|
|||
|
<div class="collapsed">
|
|||
|
<p class="exampleHeading toggleButton">▹ <span class="text">Method set</span></p>
|
|||
|
</div>
|
|||
|
<div class="expanded">
|
|||
|
<p class="exampleHeading toggleButton">▾ <span class="text">Method set</span></p>
|
|||
|
<div style="margin-left: 1in" id='methodset-{{.Index}}'>...</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
`,
|
|||
|
|
|||
|
"opensearch.xml": `<?xml version="1.0" encoding="UTF-8"?>
|
|||
|
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
|||
|
<ShortName>godoc</ShortName>
|
|||
|
<Description>The Go Programming Language</Description>
|
|||
|
<Tags>go golang</Tags>
|
|||
|
<Contact />
|
|||
|
<Url type="text/html" template="{{.BaseURL}}/search?q={searchTerms}" />
|
|||
|
<Image height="15" width="16" type="image/x-icon">/favicon.ico</Image>
|
|||
|
<OutputEncoding>UTF-8</OutputEncoding>
|
|||
|
<InputEncoding>UTF-8</InputEncoding>
|
|||
|
</OpenSearchDescription>
|
|||
|
`,
|
|||
|
|
|||
|
"package.html": `<!--
|
|||
|
Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
<!--
|
|||
|
Note: Static (i.e., not template-generated) href and id
|
|||
|
attributes start with "pkg-" to make it impossible for
|
|||
|
them to conflict with generated attributes (some of which
|
|||
|
correspond to Go identifiers).
|
|||
|
-->
|
|||
|
{{with .PDoc}}
|
|||
|
<script type='text/javascript'>
|
|||
|
document.ANALYSIS_DATA = {{$.AnalysisData}};
|
|||
|
document.CALLGRAPH = {{$.CallGraph}};
|
|||
|
</script>
|
|||
|
|
|||
|
{{if $.IsMain}}
|
|||
|
{{/* command documentation */}}
|
|||
|
{{comment_html .Doc}}
|
|||
|
{{else}}
|
|||
|
{{/* package documentation */}}
|
|||
|
<div id="short-nav">
|
|||
|
<dl>
|
|||
|
<dd><code>import "{{html .ImportPath}}"</code></dd>
|
|||
|
</dl>
|
|||
|
<dl>
|
|||
|
<dd><a href="#pkg-overview" class="overviewLink">Overview</a></dd>
|
|||
|
<dd><a href="#pkg-index" class="indexLink">Index</a></dd>
|
|||
|
{{if $.Examples}}
|
|||
|
<dd><a href="#pkg-examples" class="examplesLink">Examples</a></dd>
|
|||
|
{{end}}
|
|||
|
{{if $.Dirs}}
|
|||
|
<dd><a href="#pkg-subdirectories">Subdirectories</a></dd>
|
|||
|
{{end}}
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
<!-- The package's Name is printed as title by the top-level template -->
|
|||
|
<div id="pkg-overview" class="toggleVisible">
|
|||
|
<div class="collapsed">
|
|||
|
<h2 class="toggleButton" title="Click to show Overview section">Overview ▹</h2>
|
|||
|
</div>
|
|||
|
<div class="expanded">
|
|||
|
<h2 class="toggleButton" title="Click to hide Overview section">Overview ▾</h2>
|
|||
|
{{comment_html .Doc}}
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
{{example_html $ ""}}
|
|||
|
|
|||
|
<div id="pkg-index" class="toggleVisible">
|
|||
|
<div class="collapsed">
|
|||
|
<h2 class="toggleButton" title="Click to show Index section">Index ▹</h2>
|
|||
|
</div>
|
|||
|
<div class="expanded">
|
|||
|
<h2 class="toggleButton" title="Click to hide Index section">Index ▾</h2>
|
|||
|
|
|||
|
<!-- Table of contents for API; must be named manual-nav to turn off auto nav. -->
|
|||
|
<div id="manual-nav">
|
|||
|
<dl>
|
|||
|
{{if .Consts}}
|
|||
|
<dd><a href="#pkg-constants">Constants</a></dd>
|
|||
|
{{end}}
|
|||
|
{{if .Vars}}
|
|||
|
<dd><a href="#pkg-variables">Variables</a></dd>
|
|||
|
{{end}}
|
|||
|
{{range .Funcs}}
|
|||
|
{{$name_html := html .Name}}
|
|||
|
<dd><a href="#{{$name_html}}">{{node_html $ .Decl false | sanitize}}</a></dd>
|
|||
|
{{end}}
|
|||
|
{{range .Types}}
|
|||
|
{{$tname_html := html .Name}}
|
|||
|
<dd><a href="#{{$tname_html}}">type {{$tname_html}}</a></dd>
|
|||
|
{{range .Funcs}}
|
|||
|
{{$name_html := html .Name}}
|
|||
|
<dd> <a href="#{{$name_html}}">{{node_html $ .Decl false | sanitize}}</a></dd>
|
|||
|
{{end}}
|
|||
|
{{range .Methods}}
|
|||
|
{{$name_html := html .Name}}
|
|||
|
<dd> <a href="#{{$tname_html}}.{{$name_html}}">{{node_html $ .Decl false | sanitize}}</a></dd>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{if $.Notes}}
|
|||
|
{{range $marker, $item := $.Notes}}
|
|||
|
<dd><a href="#pkg-note-{{$marker}}">{{noteTitle $marker | html}}s</a></dd>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
</dl>
|
|||
|
</div><!-- #manual-nav -->
|
|||
|
|
|||
|
{{if $.Examples}}
|
|||
|
<div id="pkg-examples">
|
|||
|
<h3>Examples</h3>
|
|||
|
<dl>
|
|||
|
{{range $.Examples}}
|
|||
|
<dd><a class="exampleLink" href="#example_{{.Name}}">{{example_name .Name}}</a></dd>
|
|||
|
{{end}}
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{with .Filenames}}
|
|||
|
<h3>Package files</h3>
|
|||
|
<p>
|
|||
|
<span style="font-size:90%">
|
|||
|
{{range .}}
|
|||
|
<a href="{{.|srcLink|html}}">{{.|filename|html}}</a>
|
|||
|
{{end}}
|
|||
|
</span>
|
|||
|
</p>
|
|||
|
{{end}}
|
|||
|
</div><!-- .expanded -->
|
|||
|
</div><!-- #pkg-index -->
|
|||
|
|
|||
|
<div id="pkg-callgraph" class="toggle" style="display: none">
|
|||
|
<div class="collapsed">
|
|||
|
<h2 class="toggleButton" title="Click to show Internal Call Graph section">Internal call graph ▹</h2>
|
|||
|
</div> <!-- .expanded -->
|
|||
|
<div class="expanded">
|
|||
|
<h2 class="toggleButton" title="Click to hide Internal Call Graph section">Internal call graph ▾</h2>
|
|||
|
<p>
|
|||
|
In the call graph viewer below, each node
|
|||
|
is a function belonging to this package
|
|||
|
and its children are the functions it
|
|||
|
calls—perhaps dynamically.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
The root nodes are the entry points of the
|
|||
|
package: functions that may be called from
|
|||
|
outside the package.
|
|||
|
There may be non-exported or anonymous
|
|||
|
functions among them if they are called
|
|||
|
dynamically from another package.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Click a node to visit that function's source code.
|
|||
|
From there you can visit its callers by
|
|||
|
clicking its declaring <code>func</code>
|
|||
|
token.
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
Functions may be omitted if they were
|
|||
|
determined to be unreachable in the
|
|||
|
particular programs or tests that were
|
|||
|
analyzed.
|
|||
|
</p>
|
|||
|
<!-- Zero means show all package entry points. -->
|
|||
|
<ul style="margin-left: 0.5in" id="callgraph-0" class="treeview"></ul>
|
|||
|
</div>
|
|||
|
</div> <!-- #pkg-callgraph -->
|
|||
|
|
|||
|
{{with .Consts}}
|
|||
|
<h2 id="pkg-constants">Constants</h2>
|
|||
|
{{range .}}
|
|||
|
{{comment_html .Doc}}
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{with .Vars}}
|
|||
|
<h2 id="pkg-variables">Variables</h2>
|
|||
|
{{range .}}
|
|||
|
{{comment_html .Doc}}
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{range .Funcs}}
|
|||
|
{{/* Name is a string - no need for FSet */}}
|
|||
|
{{$name_html := html .Name}}
|
|||
|
<h2 id="{{$name_html}}">func <a href="{{posLink_url $ .Decl}}">{{$name_html}}</a>
|
|||
|
<a class="permalink" href="#{{$name_html}}">¶</a>
|
|||
|
</h2>
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
{{comment_html .Doc}}
|
|||
|
{{example_html $ .Name}}
|
|||
|
{{callgraph_html $ "" .Name}}
|
|||
|
|
|||
|
{{end}}
|
|||
|
{{range .Types}}
|
|||
|
{{$tname := .Name}}
|
|||
|
{{$tname_html := html .Name}}
|
|||
|
<h2 id="{{$tname_html}}">type <a href="{{posLink_url $ .Decl}}">{{$tname_html}}</a>
|
|||
|
<a class="permalink" href="#{{$tname_html}}">¶</a>
|
|||
|
</h2>
|
|||
|
{{comment_html .Doc}}
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
|
|||
|
{{range .Consts}}
|
|||
|
{{comment_html .Doc}}
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{range .Vars}}
|
|||
|
{{comment_html .Doc}}
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{example_html $ $tname}}
|
|||
|
{{implements_html $ $tname}}
|
|||
|
{{methodset_html $ $tname}}
|
|||
|
|
|||
|
{{range .Funcs}}
|
|||
|
{{$name_html := html .Name}}
|
|||
|
<h3 id="{{$name_html}}">func <a href="{{posLink_url $ .Decl}}">{{$name_html}}</a>
|
|||
|
<a class="permalink" href="#{{$name_html}}">¶</a>
|
|||
|
</h3>
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
{{comment_html .Doc}}
|
|||
|
{{example_html $ .Name}}
|
|||
|
{{callgraph_html $ "" .Name}}
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{range .Methods}}
|
|||
|
{{$name_html := html .Name}}
|
|||
|
<h3 id="{{$tname_html}}.{{$name_html}}">func ({{html .Recv}}) <a href="{{posLink_url $ .Decl}}">{{$name_html}}</a>
|
|||
|
<a class="permalink" href="#{{$tname_html}}.{{$name_html}}">¶</a>
|
|||
|
</h3>
|
|||
|
<pre>{{node_html $ .Decl true}}</pre>
|
|||
|
{{comment_html .Doc}}
|
|||
|
{{$name := printf "%s_%s" $tname .Name}}
|
|||
|
{{example_html $ $name}}
|
|||
|
{{callgraph_html $ .Recv .Name}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{with $.Notes}}
|
|||
|
{{range $marker, $content := .}}
|
|||
|
<h2 id="pkg-note-{{$marker}}">{{noteTitle $marker | html}}s</h2>
|
|||
|
<ul style="list-style: none; padding: 0;">
|
|||
|
{{range .}}
|
|||
|
<li><a href="{{posLink_url $ .}}" style="float: left;">☞</a> {{comment_html .Body}}</li>
|
|||
|
{{end}}
|
|||
|
</ul>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{with .PAst}}
|
|||
|
{{range $filename, $ast := .}}
|
|||
|
<a href="{{$filename|srcLink|html}}">{{$filename|filename|html}}</a>:<pre>{{node_html $ $ast false}}</pre>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{with .Dirs}}
|
|||
|
{{/* DirList entries are numbers and strings - no need for FSet */}}
|
|||
|
{{if $.PDoc}}
|
|||
|
<h2 id="pkg-subdirectories">Subdirectories</h2>
|
|||
|
{{end}}
|
|||
|
{{if eq $.Dirname "/src"}}
|
|||
|
<div id="manual-nav">
|
|||
|
<dl>
|
|||
|
<dt><a href="#stdlib">Standard library</a></dt>
|
|||
|
<dt><a href="#other">Other packages</a></dt>
|
|||
|
<dd><a href="#subrepo">Sub-repositories</a></dd>
|
|||
|
<dd><a href="#community">Community</a></dd>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
<h2 id="stdlib">Standard library</h2>
|
|||
|
<img alt="" class="gopher" src="/doc/gopher/pkg.png"/>
|
|||
|
{{end}}
|
|||
|
|
|||
|
|
|||
|
<div class="pkg-dir">
|
|||
|
<table>
|
|||
|
<tr>
|
|||
|
<th class="pkg-name">Name</th>
|
|||
|
<th class="pkg-synopsis">Synopsis</th>
|
|||
|
</tr>
|
|||
|
|
|||
|
{{if not (or (eq $.Dirname "/src") (eq $.Dirname "/src/cmd") $.DirFlat)}}
|
|||
|
<tr>
|
|||
|
<td colspan="2"><a href="..">..</a></td>
|
|||
|
</tr>
|
|||
|
{{end}}
|
|||
|
|
|||
|
{{range .List}}
|
|||
|
{{if $.DirFlat}}
|
|||
|
{{if .HasPkg}}
|
|||
|
<tr>
|
|||
|
<td class="pkg-name">
|
|||
|
<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Path}}</a>
|
|||
|
</td>
|
|||
|
<td class="pkg-synopsis">
|
|||
|
{{html .Synopsis}}
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
{{end}}
|
|||
|
{{else}}
|
|||
|
<tr>
|
|||
|
<td class="pkg-name" style="padding-left: {{multiply .Depth 20}}px;">
|
|||
|
<a href="{{html .Path}}/{{modeQueryString $.Mode | html}}">{{html .Name}}</a>
|
|||
|
</td>
|
|||
|
<td class="pkg-synopsis">
|
|||
|
{{html .Synopsis}}
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
</table>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
{{if eq $.Dirname "/src"}}
|
|||
|
<h2 id="other">Other packages</h2>
|
|||
|
|
|||
|
<h3 id="subrepo">Sub-repositories</h3>
|
|||
|
<p>
|
|||
|
These packages are part of the Go Project but outside the main Go tree.
|
|||
|
They are developed under looser <a href="/doc/go1compat">compatibility requirements</a> than the Go core.
|
|||
|
Install them with "<a href="/cmd/go/#hdr-Download_and_install_packages_and_dependencies">go get</a>".
|
|||
|
</p>
|
|||
|
<ul>
|
|||
|
<li><a href="//godoc.org/golang.org/x/benchmarks">benchmarks</a> — benchmarks to measure Go as it is developed.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/blog">blog</a> — <a href="//blog.golang.org">blog.golang.org</a>'s implementation.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/build">build</a> — <a href="//build.golang.org">build.golang.org</a>'s implementation.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/crypto">crypto</a> — additional cryptography packages.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/debug">debug</a> — an experimental debugger for Go.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/image">image</a> — additional imaging packages.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/mobile">mobile</a> — experimental support for Go on mobile platforms.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/net">net</a> — additional networking packages.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/sys">sys</a> — packages for making system calls.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/text">text</a> — packages for working with text.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/tools">tools</a> — godoc, goimports, gorename, and other tools.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/tour">tour</a> — <a href="//tour.golang.org">tour.golang.org</a>'s implementation.</li>
|
|||
|
<li><a href="//godoc.org/golang.org/x/exp">exp</a> — experimental and deprecated packages (handle with care; may change without warning).</li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<h3 id="community">Community</h3>
|
|||
|
<p>
|
|||
|
These services can help you find Open Source packages provided by the community.
|
|||
|
</p>
|
|||
|
<ul>
|
|||
|
<li><a href="//godoc.org">GoDoc</a> - a package index and search engine.</li>
|
|||
|
<li><a href="http://go-search.org">Go Search</a> - a code search engine.</li>
|
|||
|
<li><a href="/wiki/Projects">Projects at the Go Wiki</a> - a curated list of Go projects.</li>
|
|||
|
</ul>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
`,
|
|||
|
|
|||
|
"package.txt": `{{$info := .}}{{$filtered := .IsFiltered}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if $filtered}}{{range .PAst}}{{range .Decls}}{{node $info .}}
|
|||
|
|
|||
|
{{end}}{{end}}{{else}}{{with .PAst}}{{range $filename, $ast := .}}{{$filename}}:
|
|||
|
{{node $ $ast}}{{end}}{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if and $filtered (not (or .PDoc .PAst))}}No match found.
|
|||
|
{{end}}{{with .PDoc}}{{if $.IsMain}}COMMAND DOCUMENTATION
|
|||
|
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{else}}{{if not $filtered}}PACKAGE DOCUMENTATION
|
|||
|
|
|||
|
package {{.Name}}
|
|||
|
import "{{.ImportPath}}"
|
|||
|
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{example_text $ "" " "}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Consts}}{{if not $filtered}}CONSTANTS
|
|||
|
|
|||
|
{{end}}{{range .}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Vars}}{{if not $filtered}}VARIABLES
|
|||
|
|
|||
|
{{end}}{{range .}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Funcs}}{{if not $filtered}}FUNCTIONS
|
|||
|
|
|||
|
{{end}}{{range .}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{example_text $ .Name " "}}{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Types}}{{if not $filtered}}TYPES
|
|||
|
|
|||
|
{{end}}{{range .}}{{$tname := .Name}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if .Consts}}{{range .Consts}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if .Vars}}{{range .Vars}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{range $name := .Names}}{{example_text $ $name " "}}{{end}}{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if .Funcs}}{{range .Funcs}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{example_text $ .Name " "}}{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if .Methods}}{{range .Methods}}{{node $ .Decl}}
|
|||
|
{{comment_text .Doc " " "\t"}}
|
|||
|
{{$name := printf "%s_%s" $tname .Name}}{{example_text $ $name " "}}{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if and $filtered (not (or .Consts (or .Vars (or .Funcs .Types))))}}No match found.
|
|||
|
{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with $.Notes}}
|
|||
|
{{range $marker, $content := .}}
|
|||
|
{{$marker}}S
|
|||
|
|
|||
|
{{range $content}}{{comment_text .Body " " "\t"}}
|
|||
|
{{end}}{{end}}{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if not $filtered}}{{with .Dirs}}SUBDIRECTORIES
|
|||
|
{{if $.DirFlat}}{{range .List}}{{if .HasPkg}}
|
|||
|
{{.Path}}{{end}}{{end}}
|
|||
|
{{else}}{{range .List}}
|
|||
|
{{repeat ` + "`" + `. ` + "`" + ` .Depth}}{{.Name}}{{end}}
|
|||
|
{{end}}{{end}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{end}}{{/*
|
|||
|
Make sure there is no newline at the end of this file.
|
|||
|
perl -i -pe 'chomp if eof' package.txt
|
|||
|
*/}}
|
|||
|
`,
|
|||
|
|
|||
|
"play.js": `// Copyright 2012 The Go Authors. All rights reserved.
|
|||
|
// Use of this source code is governed by a BSD-style
|
|||
|
// license that can be found in the LICENSE file.
|
|||
|
|
|||
|
function initPlayground(transport) {
|
|||
|
'use strict';
|
|||
|
|
|||
|
function text(node) {
|
|||
|
var s = '';
|
|||
|
for (var i = 0; i < node.childNodes.length; i++) {
|
|||
|
var n = node.childNodes[i];
|
|||
|
if (n.nodeType === 1) {
|
|||
|
if (n.tagName === 'BUTTON') continue
|
|||
|
if (n.tagName === 'SPAN' && n.className === 'number') continue;
|
|||
|
if (n.tagName === 'DIV' || n.tagName == 'BR') {
|
|||
|
s += "\n";
|
|||
|
}
|
|||
|
s += text(n);
|
|||
|
continue;
|
|||
|
}
|
|||
|
if (n.nodeType === 3) {
|
|||
|
s += n.nodeValue;
|
|||
|
}
|
|||
|
}
|
|||
|
return s.replace('\xA0', ' '); // replace non-breaking spaces
|
|||
|
}
|
|||
|
|
|||
|
// When presenter notes are enabled, the index passed
|
|||
|
// here will identify the playground to be synced
|
|||
|
function init(code, index) {
|
|||
|
var output = document.createElement('div');
|
|||
|
var outpre = document.createElement('pre');
|
|||
|
var running;
|
|||
|
|
|||
|
if ($ && $(output).resizable) {
|
|||
|
$(output).resizable({
|
|||
|
handles: 'n,w,nw',
|
|||
|
minHeight: 27,
|
|||
|
minWidth: 135,
|
|||
|
maxHeight: 608,
|
|||
|
maxWidth: 990
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
function onKill() {
|
|||
|
if (running) running.Kill();
|
|||
|
if (window.notesEnabled) updatePlayStorage('onKill', index);
|
|||
|
}
|
|||
|
|
|||
|
function onRun(e) {
|
|||
|
var sk = e.shiftKey || localStorage.getItem('play-shiftKey') === 'true';
|
|||
|
if (running) running.Kill();
|
|||
|
output.style.display = 'block';
|
|||
|
outpre.innerHTML = '';
|
|||
|
run1.style.display = 'none';
|
|||
|
var options = {Race: sk};
|
|||
|
running = transport.Run(text(code), PlaygroundOutput(outpre), options);
|
|||
|
if (window.notesEnabled) updatePlayStorage('onRun', index, e);
|
|||
|
}
|
|||
|
|
|||
|
function onClose() {
|
|||
|
if (running) running.Kill();
|
|||
|
output.style.display = 'none';
|
|||
|
run1.style.display = 'inline-block';
|
|||
|
if (window.notesEnabled) updatePlayStorage('onClose', index);
|
|||
|
}
|
|||
|
|
|||
|
if (window.notesEnabled) {
|
|||
|
playgroundHandlers.onRun.push(onRun);
|
|||
|
playgroundHandlers.onClose.push(onClose);
|
|||
|
playgroundHandlers.onKill.push(onKill);
|
|||
|
}
|
|||
|
|
|||
|
var run1 = document.createElement('button');
|
|||
|
run1.innerHTML = 'Run';
|
|||
|
run1.className = 'run';
|
|||
|
run1.addEventListener("click", onRun, false);
|
|||
|
var run2 = document.createElement('button');
|
|||
|
run2.className = 'run';
|
|||
|
run2.innerHTML = 'Run';
|
|||
|
run2.addEventListener("click", onRun, false);
|
|||
|
var kill = document.createElement('button');
|
|||
|
kill.className = 'kill';
|
|||
|
kill.innerHTML = 'Kill';
|
|||
|
kill.addEventListener("click", onKill, false);
|
|||
|
var close = document.createElement('button');
|
|||
|
close.className = 'close';
|
|||
|
close.innerHTML = 'Close';
|
|||
|
close.addEventListener("click", onClose, false);
|
|||
|
|
|||
|
var button = document.createElement('div');
|
|||
|
button.classList.add('buttons');
|
|||
|
button.appendChild(run1);
|
|||
|
// Hack to simulate insertAfter
|
|||
|
code.parentNode.insertBefore(button, code.nextSibling);
|
|||
|
|
|||
|
var buttons = document.createElement('div');
|
|||
|
buttons.classList.add('buttons');
|
|||
|
buttons.appendChild(run2);
|
|||
|
buttons.appendChild(kill);
|
|||
|
buttons.appendChild(close);
|
|||
|
|
|||
|
output.classList.add('output');
|
|||
|
output.appendChild(buttons);
|
|||
|
output.appendChild(outpre);
|
|||
|
output.style.display = 'none';
|
|||
|
code.parentNode.insertBefore(output, button.nextSibling);
|
|||
|
}
|
|||
|
|
|||
|
var play = document.querySelectorAll('div.playground');
|
|||
|
for (var i = 0; i < play.length; i++) {
|
|||
|
init(play[i], i);
|
|||
|
}
|
|||
|
}
|
|||
|
`,
|
|||
|
|
|||
|
"playground.js": `// Copyright 2012 The Go Authors. All rights reserved.
|
|||
|
// Use of this source code is governed by a BSD-style
|
|||
|
// license that can be found in the LICENSE file.
|
|||
|
|
|||
|
/*
|
|||
|
In the absence of any formal way to specify interfaces in JavaScript,
|
|||
|
here's a skeleton implementation of a playground transport.
|
|||
|
|
|||
|
function Transport() {
|
|||
|
// Set up any transport state (eg, make a websocket connection).
|
|||
|
return {
|
|||
|
Run: function(body, output, options) {
|
|||
|
// Compile and run the program 'body' with 'options'.
|
|||
|
// Call the 'output' callback to display program output.
|
|||
|
return {
|
|||
|
Kill: function() {
|
|||
|
// Kill the running program.
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
// The output callback is called multiple times, and each time it is
|
|||
|
// passed an object of this form.
|
|||
|
var write = {
|
|||
|
Kind: 'string', // 'start', 'stdout', 'stderr', 'end'
|
|||
|
Body: 'string' // content of write or end status message
|
|||
|
}
|
|||
|
|
|||
|
// The first call must be of Kind 'start' with no body.
|
|||
|
// Subsequent calls may be of Kind 'stdout' or 'stderr'
|
|||
|
// and must have a non-null Body string.
|
|||
|
// The final call should be of Kind 'end' with an optional
|
|||
|
// Body string, signifying a failure ("killed", for example).
|
|||
|
|
|||
|
// The output callback must be of this form.
|
|||
|
// See PlaygroundOutput (below) for an implementation.
|
|||
|
function outputCallback(write) {
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
function HTTPTransport() {
|
|||
|
'use strict';
|
|||
|
|
|||
|
// TODO(adg): support stderr
|
|||
|
|
|||
|
function playback(output, events) {
|
|||
|
var timeout;
|
|||
|
output({Kind: 'start'});
|
|||
|
function next() {
|
|||
|
if (!events || events.length === 0) {
|
|||
|
output({Kind: 'end'});
|
|||
|
return;
|
|||
|
}
|
|||
|
var e = events.shift();
|
|||
|
if (e.Delay === 0) {
|
|||
|
output({Kind: 'stdout', Body: e.Message});
|
|||
|
next();
|
|||
|
return;
|
|||
|
}
|
|||
|
timeout = setTimeout(function() {
|
|||
|
output({Kind: 'stdout', Body: e.Message});
|
|||
|
next();
|
|||
|
}, e.Delay / 1000000);
|
|||
|
}
|
|||
|
next();
|
|||
|
return {
|
|||
|
Stop: function() {
|
|||
|
clearTimeout(timeout);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function error(output, msg) {
|
|||
|
output({Kind: 'start'});
|
|||
|
output({Kind: 'stderr', Body: msg});
|
|||
|
output({Kind: 'end'});
|
|||
|
}
|
|||
|
|
|||
|
var seq = 0;
|
|||
|
return {
|
|||
|
Run: function(body, output, options) {
|
|||
|
seq++;
|
|||
|
var cur = seq;
|
|||
|
var playing;
|
|||
|
$.ajax('/compile', {
|
|||
|
type: 'POST',
|
|||
|
data: {'version': 2, 'body': body},
|
|||
|
dataType: 'json',
|
|||
|
success: function(data) {
|
|||
|
if (seq != cur) return;
|
|||
|
if (!data) return;
|
|||
|
if (playing != null) playing.Stop();
|
|||
|
if (data.Errors) {
|
|||
|
error(output, data.Errors);
|
|||
|
return;
|
|||
|
}
|
|||
|
playing = playback(output, data.Events);
|
|||
|
},
|
|||
|
error: function() {
|
|||
|
error(output, 'Error communicating with remote server.');
|
|||
|
}
|
|||
|
});
|
|||
|
return {
|
|||
|
Kill: function() {
|
|||
|
if (playing != null) playing.Stop();
|
|||
|
output({Kind: 'end', Body: 'killed'});
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
function SocketTransport() {
|
|||
|
'use strict';
|
|||
|
|
|||
|
var id = 0;
|
|||
|
var outputs = {};
|
|||
|
var started = {};
|
|||
|
var websocket;
|
|||
|
if (window.location.protocol == "http:") {
|
|||
|
websocket = new WebSocket('ws://' + window.location.host + '/socket');
|
|||
|
} else if (window.location.protocol == "https:") {
|
|||
|
websocket = new WebSocket('wss://' + window.location.host + '/socket');
|
|||
|
}
|
|||
|
|
|||
|
websocket.onclose = function() {
|
|||
|
console.log('websocket connection closed');
|
|||
|
}
|
|||
|
|
|||
|
websocket.onmessage = function(e) {
|
|||
|
var m = JSON.parse(e.data);
|
|||
|
var output = outputs[m.Id];
|
|||
|
if (output === null)
|
|||
|
return;
|
|||
|
if (!started[m.Id]) {
|
|||
|
output({Kind: 'start'});
|
|||
|
started[m.Id] = true;
|
|||
|
}
|
|||
|
output({Kind: m.Kind, Body: m.Body});
|
|||
|
}
|
|||
|
|
|||
|
function send(m) {
|
|||
|
websocket.send(JSON.stringify(m));
|
|||
|
}
|
|||
|
|
|||
|
return {
|
|||
|
Run: function(body, output, options) {
|
|||
|
var thisID = id+'';
|
|||
|
id++;
|
|||
|
outputs[thisID] = output;
|
|||
|
send({Id: thisID, Kind: 'run', Body: body, Options: options});
|
|||
|
return {
|
|||
|
Kill: function() {
|
|||
|
send({Id: thisID, Kind: 'kill'});
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
function PlaygroundOutput(el) {
|
|||
|
'use strict';
|
|||
|
|
|||
|
return function(write) {
|
|||
|
if (write.Kind == 'start') {
|
|||
|
el.innerHTML = '';
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
var cl = 'system';
|
|||
|
if (write.Kind == 'stdout' || write.Kind == 'stderr')
|
|||
|
cl = write.Kind;
|
|||
|
|
|||
|
var m = write.Body;
|
|||
|
if (write.Kind == 'end') {
|
|||
|
m = '\nProgram exited' + (m?(': '+m):'.');
|
|||
|
}
|
|||
|
|
|||
|
if (m.indexOf('IMAGE:') === 0) {
|
|||
|
// TODO(adg): buffer all writes before creating image
|
|||
|
var url = 'data:image/png;base64,' + m.substr(6);
|
|||
|
var img = document.createElement('img');
|
|||
|
img.src = url;
|
|||
|
el.appendChild(img);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// ^L clears the screen.
|
|||
|
var s = m.split('\x0c');
|
|||
|
if (s.length > 1) {
|
|||
|
el.innerHTML = '';
|
|||
|
m = s.pop();
|
|||
|
}
|
|||
|
|
|||
|
m = m.replace(/&/g, '&');
|
|||
|
m = m.replace(/</g, '<');
|
|||
|
m = m.replace(/>/g, '>');
|
|||
|
|
|||
|
var needScroll = (el.scrollTop + el.offsetHeight) == el.scrollHeight;
|
|||
|
|
|||
|
var span = document.createElement('span');
|
|||
|
span.className = cl;
|
|||
|
span.innerHTML = m;
|
|||
|
el.appendChild(span);
|
|||
|
|
|||
|
if (needScroll)
|
|||
|
el.scrollTop = el.scrollHeight - el.offsetHeight;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
(function() {
|
|||
|
function lineHighlight(error) {
|
|||
|
var regex = /prog.go:([0-9]+)/g;
|
|||
|
var r = regex.exec(error);
|
|||
|
while (r) {
|
|||
|
$(".lines div").eq(r[1]-1).addClass("lineerror");
|
|||
|
r = regex.exec(error);
|
|||
|
}
|
|||
|
}
|
|||
|
function highlightOutput(wrappedOutput) {
|
|||
|
return function(write) {
|
|||
|
if (write.Body) lineHighlight(write.Body);
|
|||
|
wrappedOutput(write);
|
|||
|
}
|
|||
|
}
|
|||
|
function lineClear() {
|
|||
|
$(".lineerror").removeClass("lineerror");
|
|||
|
}
|
|||
|
|
|||
|
// opts is an object with these keys
|
|||
|
// codeEl - code editor element
|
|||
|
// outputEl - program output element
|
|||
|
// runEl - run button element
|
|||
|
// fmtEl - fmt button element (optional)
|
|||
|
// fmtImportEl - fmt "imports" checkbox element (optional)
|
|||
|
// shareEl - share button element (optional)
|
|||
|
// shareURLEl - share URL text input element (optional)
|
|||
|
// shareRedirect - base URL to redirect to on share (optional)
|
|||
|
// toysEl - toys select element (optional)
|
|||
|
// enableHistory - enable using HTML5 history API (optional)
|
|||
|
// transport - playground transport to use (default is HTTPTransport)
|
|||
|
// enableShortcuts - whether to enable shortcuts (Ctrl+S/Cmd+S to save) (default is false)
|
|||
|
function playground(opts) {
|
|||
|
var code = $(opts.codeEl);
|
|||
|
var transport = opts['transport'] || new HTTPTransport();
|
|||
|
var running;
|
|||
|
|
|||
|
// autoindent helpers.
|
|||
|
function insertTabs(n) {
|
|||
|
// find the selection start and end
|
|||
|
var start = code[0].selectionStart;
|
|||
|
var end = code[0].selectionEnd;
|
|||
|
// split the textarea content into two, and insert n tabs
|
|||
|
var v = code[0].value;
|
|||
|
var u = v.substr(0, start);
|
|||
|
for (var i=0; i<n; i++) {
|
|||
|
u += "\t";
|
|||
|
}
|
|||
|
u += v.substr(end);
|
|||
|
// set revised content
|
|||
|
code[0].value = u;
|
|||
|
// reset caret position after inserted tabs
|
|||
|
code[0].selectionStart = start+n;
|
|||
|
code[0].selectionEnd = start+n;
|
|||
|
}
|
|||
|
function autoindent(el) {
|
|||
|
var curpos = el.selectionStart;
|
|||
|
var tabs = 0;
|
|||
|
while (curpos > 0) {
|
|||
|
curpos--;
|
|||
|
if (el.value[curpos] == "\t") {
|
|||
|
tabs++;
|
|||
|
} else if (tabs > 0 || el.value[curpos] == "\n") {
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
setTimeout(function() {
|
|||
|
insertTabs(tabs);
|
|||
|
}, 1);
|
|||
|
}
|
|||
|
|
|||
|
// NOTE(cbro): e is a jQuery event, not a DOM event.
|
|||
|
function handleSaveShortcut(e) {
|
|||
|
if (e.isDefaultPrevented()) return false;
|
|||
|
if (!e.metaKey && !e.ctrlKey) return false;
|
|||
|
if (e.key != "S" && e.key != "s") return false;
|
|||
|
|
|||
|
e.preventDefault();
|
|||
|
|
|||
|
// Share and save
|
|||
|
share(function(url) {
|
|||
|
window.location.href = url + ".go?download=true";
|
|||
|
});
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
function keyHandler(e) {
|
|||
|
if (opts.enableShortcuts && handleSaveShortcut(e)) return;
|
|||
|
|
|||
|
if (e.keyCode == 9 && !e.ctrlKey) { // tab (but not ctrl-tab)
|
|||
|
insertTabs(1);
|
|||
|
e.preventDefault();
|
|||
|
return false;
|
|||
|
}
|
|||
|
if (e.keyCode == 13) { // enter
|
|||
|
if (e.shiftKey) { // +shift
|
|||
|
run();
|
|||
|
e.preventDefault();
|
|||
|
return false;
|
|||
|
} if (e.ctrlKey) { // +control
|
|||
|
fmt();
|
|||
|
e.preventDefault();
|
|||
|
} else {
|
|||
|
autoindent(e.target);
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
code.unbind('keydown').bind('keydown', keyHandler);
|
|||
|
var outdiv = $(opts.outputEl).empty();
|
|||
|
var output = $('<pre/>').appendTo(outdiv);
|
|||
|
|
|||
|
function body() {
|
|||
|
return $(opts.codeEl).val();
|
|||
|
}
|
|||
|
function setBody(text) {
|
|||
|
$(opts.codeEl).val(text);
|
|||
|
}
|
|||
|
function origin(href) {
|
|||
|
return (""+href).split("/").slice(0, 3).join("/");
|
|||
|
}
|
|||
|
|
|||
|
var pushedEmpty = (window.location.pathname == "/");
|
|||
|
function inputChanged() {
|
|||
|
if (pushedEmpty) {
|
|||
|
return;
|
|||
|
}
|
|||
|
pushedEmpty = true;
|
|||
|
$(opts.shareURLEl).hide();
|
|||
|
window.history.pushState(null, "", "/");
|
|||
|
}
|
|||
|
function popState(e) {
|
|||
|
if (e === null) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (e && e.state && e.state.code) {
|
|||
|
setBody(e.state.code);
|
|||
|
}
|
|||
|
}
|
|||
|
var rewriteHistory = false;
|
|||
|
if (window.history && window.history.pushState && window.addEventListener && opts.enableHistory) {
|
|||
|
rewriteHistory = true;
|
|||
|
code[0].addEventListener('input', inputChanged);
|
|||
|
window.addEventListener('popstate', popState);
|
|||
|
}
|
|||
|
|
|||
|
function setError(error) {
|
|||
|
if (running) running.Kill();
|
|||
|
lineClear();
|
|||
|
lineHighlight(error);
|
|||
|
output.empty().addClass("error").text(error);
|
|||
|
}
|
|||
|
function loading() {
|
|||
|
lineClear();
|
|||
|
if (running) running.Kill();
|
|||
|
output.removeClass("error").text('Waiting for remote server...');
|
|||
|
}
|
|||
|
function run() {
|
|||
|
loading();
|
|||
|
running = transport.Run(body(), highlightOutput(PlaygroundOutput(output[0])));
|
|||
|
}
|
|||
|
|
|||
|
function fmt() {
|
|||
|
loading();
|
|||
|
var data = {"body": body()};
|
|||
|
if ($(opts.fmtImportEl).is(":checked")) {
|
|||
|
data["imports"] = "true";
|
|||
|
}
|
|||
|
$.ajax("/fmt", {
|
|||
|
data: data,
|
|||
|
type: "POST",
|
|||
|
dataType: "json",
|
|||
|
success: function(data) {
|
|||
|
if (data.Error) {
|
|||
|
setError(data.Error);
|
|||
|
} else {
|
|||
|
setBody(data.Body);
|
|||
|
setError("");
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
var shareURL; // jQuery element to show the shared URL.
|
|||
|
var sharing = false; // true if there is a pending request.
|
|||
|
var shareCallbacks = [];
|
|||
|
function share(opt_callback) {
|
|||
|
if (opt_callback) shareCallbacks.push(opt_callback);
|
|||
|
|
|||
|
if (sharing) return;
|
|||
|
sharing = true;
|
|||
|
|
|||
|
var sharingData = body();
|
|||
|
$.ajax("/share", {
|
|||
|
processData: false,
|
|||
|
data: sharingData,
|
|||
|
type: "POST",
|
|||
|
contentType: "text/plain; charset=utf-8",
|
|||
|
complete: function(xhr) {
|
|||
|
sharing = false;
|
|||
|
if (xhr.status != 200) {
|
|||
|
alert("Server error; try again.");
|
|||
|
return;
|
|||
|
}
|
|||
|
if (opts.shareRedirect) {
|
|||
|
window.location = opts.shareRedirect + xhr.responseText;
|
|||
|
}
|
|||
|
var path = "/p/" + xhr.responseText;
|
|||
|
var url = origin(window.location) + path;
|
|||
|
|
|||
|
for (var i = 0; i < shareCallbacks.length; i++) {
|
|||
|
shareCallbacks[i](url);
|
|||
|
}
|
|||
|
shareCallbacks = [];
|
|||
|
|
|||
|
if (shareURL) {
|
|||
|
shareURL.show().val(url).focus().select();
|
|||
|
|
|||
|
if (rewriteHistory) {
|
|||
|
var historyData = {"code": sharingData};
|
|||
|
window.history.pushState(historyData, "", path);
|
|||
|
pushedEmpty = false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
$(opts.runEl).click(run);
|
|||
|
$(opts.fmtEl).click(fmt);
|
|||
|
|
|||
|
if (opts.shareEl !== null && (opts.shareURLEl !== null || opts.shareRedirect !== null)) {
|
|||
|
if (opts.shareURLEl) {
|
|||
|
shareURL = $(opts.shareURLEl).hide();
|
|||
|
}
|
|||
|
$(opts.shareEl).click(function() {
|
|||
|
share();
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
if (opts.toysEl !== null) {
|
|||
|
$(opts.toysEl).bind('change', function() {
|
|||
|
var toy = $(this).val();
|
|||
|
$.ajax("/doc/play/"+toy, {
|
|||
|
processData: false,
|
|||
|
type: "GET",
|
|||
|
complete: function(xhr) {
|
|||
|
if (xhr.status != 200) {
|
|||
|
alert("Server error; try again.");
|
|||
|
return;
|
|||
|
}
|
|||
|
setBody(xhr.responseText);
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
window.playground = playground;
|
|||
|
})();
|
|||
|
`,
|
|||
|
|
|||
|
"search.html": `<!--
|
|||
|
Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
{{with .Alert}}
|
|||
|
<p>
|
|||
|
<span class="alert" style="font-size:120%">{{html .}}</span>
|
|||
|
</p>
|
|||
|
{{end}}
|
|||
|
{{with .Alt}}
|
|||
|
<p>
|
|||
|
<span class="alert" style="font-size:120%">Did you mean: </span>
|
|||
|
{{range .Alts}}
|
|||
|
<a href="search?q={{urlquery .}}" style="font-size:120%">{{html .}}</a>
|
|||
|
{{end}}
|
|||
|
</p>
|
|||
|
{{end}}
|
|||
|
`,
|
|||
|
|
|||
|
"search.txt": `QUERY
|
|||
|
{{.Query}}
|
|||
|
|
|||
|
{{with .Alert}}{{.}}
|
|||
|
{{end}}{{/* .Alert */}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Alt}}DID YOU MEAN
|
|||
|
|
|||
|
{{range .Alts}} {{.}}
|
|||
|
{{end}}
|
|||
|
{{end}}{{/* .Alt */}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Pak}}PACKAGE {{$.Query}}
|
|||
|
|
|||
|
{{range .}} {{pkgLink .Pak.Path}}
|
|||
|
{{end}}
|
|||
|
{{end}}{{/* .Pak */}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{range $key, $val := .Idents}}{{if $val}}{{$key.Name}}
|
|||
|
{{range $val}} {{.Path}}.{{.Name}}
|
|||
|
{{end}}
|
|||
|
{{end}}{{end}}{{/* .Idents */}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Hit}}{{with .Decls}}PACKAGE-LEVEL DECLARATIONS
|
|||
|
|
|||
|
{{range .}}package {{.Pak.Name}}
|
|||
|
{{range $file := .Files}}{{range .Groups}}{{range .}} {{srcLink $file.File.Path}}:{{infoLine .}}{{end}}
|
|||
|
{{end}}{{end}}{{/* .Files */}}
|
|||
|
{{end}}{{end}}{{/* .Decls */}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{with .Others}}LOCAL DECLARATIONS AND USES
|
|||
|
|
|||
|
{{range .}}package {{.Pak.Name}}
|
|||
|
{{range $file := .Files}}{{range .Groups}}{{range .}} {{srcLink $file.File.Path}}:{{infoLine .}}
|
|||
|
{{end}}{{end}}{{end}}{{/* .Files */}}
|
|||
|
{{end}}{{end}}{{/* .Others */}}{{end}}{{/* .Hit */}}{{/*
|
|||
|
|
|||
|
---------------------------------------
|
|||
|
|
|||
|
*/}}{{if .Textual}}{{if .Complete}}{{.Found}} TEXTUAL OCCURRENCES{{else}}MORE THAN {{.Found}} TEXTUAL OCCURRENCES{{end}}
|
|||
|
|
|||
|
{{range .Textual}}{{len .Lines}} {{srcLink .Filename}}
|
|||
|
{{end}}{{if not .Complete}}... ...
|
|||
|
{{end}}{{end}}
|
|||
|
`,
|
|||
|
|
|||
|
"searchcode.html": `<!--
|
|||
|
Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
{{$query_url := urlquery .Query}}
|
|||
|
{{if not .Idents}}
|
|||
|
{{with .Pak}}
|
|||
|
<h2 id="Packages">Package {{html $.Query}}</h2>
|
|||
|
<p>
|
|||
|
<table class="layout">
|
|||
|
{{range .}}
|
|||
|
{{$pkg_html := pkgLink .Pak.Path | html}}
|
|||
|
<tr><td><a href="/{{$pkg_html}}">{{$pkg_html}}</a></td></tr>
|
|||
|
{{end}}
|
|||
|
</table>
|
|||
|
</p>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{with .Hit}}
|
|||
|
{{with .Decls}}
|
|||
|
<h2 id="Global">Package-level declarations</h2>
|
|||
|
{{range .}}
|
|||
|
{{$pkg_html := pkgLink .Pak.Path | html}}
|
|||
|
<h3 id="Global_{{$pkg_html}}">package <a href="/{{$pkg_html}}">{{html .Pak.Name}}</a></h3>
|
|||
|
{{range .Files}}
|
|||
|
{{$file := .File.Path}}
|
|||
|
{{range .Groups}}
|
|||
|
{{range .}}
|
|||
|
{{$line := infoLine .}}
|
|||
|
<a href="{{queryLink $file $query_url $line | html}}">{{$file}}:{{$line}}</a>
|
|||
|
{{infoSnippet_html .}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{with .Others}}
|
|||
|
<h2 id="Local">Local declarations and uses</h2>
|
|||
|
{{range .}}
|
|||
|
{{$pkg_html := pkgLink .Pak.Path | html}}
|
|||
|
<h3 id="Local_{{$pkg_html}}">package <a href="/{{$pkg_html}}">{{html .Pak.Name}}</a></h3>
|
|||
|
{{range .Files}}
|
|||
|
{{$file := .File.Path}}
|
|||
|
<a href="{{queryLink $file $query_url 0 | html}}">{{$file}}</a>
|
|||
|
<table class="layout">
|
|||
|
{{range .Groups}}
|
|||
|
<tr>
|
|||
|
<td width="25"></td>
|
|||
|
<th align="left" valign="top">{{index . 0 | infoKind_html}}</th>
|
|||
|
<td align="left" width="4"></td>
|
|||
|
<td>
|
|||
|
{{range .}}
|
|||
|
{{$line := infoLine .}}
|
|||
|
<a href="{{queryLink $file $query_url $line | html}}">{{$line}}</a>
|
|||
|
{{end}}
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
{{end}}
|
|||
|
</table>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
`,
|
|||
|
|
|||
|
"searchdoc.html": `<!--
|
|||
|
Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
{{range $key, $val := .Idents}}
|
|||
|
{{if $val}}
|
|||
|
<h2 id="{{$key.Name}}">{{$key.Name}}</h2>
|
|||
|
{{range $val}}
|
|||
|
{{$pkg_html := pkgLink .Path | html}}
|
|||
|
{{if eq "Packages" $key.Name}}
|
|||
|
<a href="/{{$pkg_html}}">{{html .Path}}</a>
|
|||
|
{{else}}
|
|||
|
{{$doc_html := docLink .Path .Name| html}}
|
|||
|
<a href="/{{$pkg_html}}">{{html .Package}}</a>.<a href="{{$doc_html}}">{{.Name}}</a>
|
|||
|
{{end}}
|
|||
|
{{if .Doc}}
|
|||
|
<p>{{comment_html .Doc}}</p>
|
|||
|
{{else}}
|
|||
|
<p><em>No documentation available</em></p>
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
{{end}}
|
|||
|
`,
|
|||
|
|
|||
|
"searchtxt.html": `<!--
|
|||
|
Copyright 2009 The Go Authors. All rights reserved.
|
|||
|
Use of this source code is governed by a BSD-style
|
|||
|
license that can be found in the LICENSE file.
|
|||
|
-->
|
|||
|
{{$query_url := urlquery .Query}}
|
|||
|
{{with .Textual}}
|
|||
|
{{if $.Complete}}
|
|||
|
<h2 id="Textual">{{html $.Found}} textual occurrences</h2>
|
|||
|
{{else}}
|
|||
|
<h2 id="Textual">More than {{html $.Found}} textual occurrences</h2>
|
|||
|
<p>
|
|||
|
<span class="alert" style="font-size:120%">Not all files or lines containing "{{html $.Query}}" are shown.</span>
|
|||
|
</p>
|
|||
|
{{end}}
|
|||
|
<p>
|
|||
|
<table class="layout">
|
|||
|
{{range .}}
|
|||
|
{{$file := .Filename}}
|
|||
|
<tr>
|
|||
|
<td align="left" valign="top">
|
|||
|
<a href="{{queryLink $file $query_url 0}}">{{$file}}</a>:
|
|||
|
</td>
|
|||
|
<td align="left" width="4"></td>
|
|||
|
<th align="left" valign="top">{{len .Lines}}</th>
|
|||
|
<td align="left" width="4"></td>
|
|||
|
<td align="left">
|
|||
|
{{range .Lines}}
|
|||
|
<a href="{{queryLink $file $query_url .}}">{{html .}}</a>
|
|||
|
{{end}}
|
|||
|
{{if not $.Complete}}
|
|||
|
...
|
|||
|
{{end}}
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
{{end}}
|
|||
|
{{if not $.Complete}}
|
|||
|
<tr><td align="left">...</td></tr>
|
|||
|
{{end}}
|
|||
|
</table>
|
|||
|
</p>
|
|||
|
{{end}}
|
|||
|
`,
|
|||
|
|
|||
|
"style.css": `body {
|
|||
|
margin: 0;
|
|||
|
font-family: Arial, sans-serif;
|
|||
|
font-size: 16px;
|
|||
|
background-color: #fff;
|
|||
|
line-height: 1.3em;
|
|||
|
}
|
|||
|
pre,
|
|||
|
code {
|
|||
|
font-family: Menlo, monospace;
|
|||
|
font-size: 14px;
|
|||
|
}
|
|||
|
pre {
|
|||
|
line-height: 1.4em;
|
|||
|
overflow-x: auto;
|
|||
|
}
|
|||
|
pre .comment {
|
|||
|
color: #006600;
|
|||
|
}
|
|||
|
pre .highlight,
|
|||
|
pre .highlight-comment,
|
|||
|
pre .selection-highlight,
|
|||
|
pre .selection-highlight-comment {
|
|||
|
background: #FFFF00;
|
|||
|
}
|
|||
|
pre .selection,
|
|||
|
pre .selection-comment {
|
|||
|
background: #FF9632;
|
|||
|
}
|
|||
|
pre .ln {
|
|||
|
color: #999;
|
|||
|
background: #efefef;
|
|||
|
}
|
|||
|
.ln {
|
|||
|
-webkit-user-select: none;
|
|||
|
-moz-user-select: none;
|
|||
|
-ms-user-select: none;
|
|||
|
user-select: none;
|
|||
|
}
|
|||
|
|
|||
|
body {
|
|||
|
color: #222;
|
|||
|
}
|
|||
|
a,
|
|||
|
.exampleHeading .text {
|
|||
|
color: #375EAB;
|
|||
|
text-decoration: none;
|
|||
|
}
|
|||
|
a:hover,
|
|||
|
.exampleHeading .text:hover {
|
|||
|
text-decoration: underline;
|
|||
|
}
|
|||
|
.article a {
|
|||
|
text-decoration: underline;
|
|||
|
}
|
|||
|
.article .title a {
|
|||
|
text-decoration: none;
|
|||
|
}
|
|||
|
|
|||
|
.permalink {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
:hover > .permalink {
|
|||
|
display: inline;
|
|||
|
}
|
|||
|
|
|||
|
p, li {
|
|||
|
max-width: 800px;
|
|||
|
word-wrap: break-word;
|
|||
|
}
|
|||
|
p,
|
|||
|
pre,
|
|||
|
ul,
|
|||
|
ol {
|
|||
|
margin: 20px;
|
|||
|
}
|
|||
|
pre {
|
|||
|
background: #EFEFEF;
|
|||
|
padding: 10px;
|
|||
|
|
|||
|
-webkit-border-radius: 5px;
|
|||
|
-moz-border-radius: 5px;
|
|||
|
border-radius: 5px;
|
|||
|
}
|
|||
|
|
|||
|
h1,
|
|||
|
h2,
|
|||
|
h3,
|
|||
|
h4,
|
|||
|
.rootHeading {
|
|||
|
margin: 20px 0 20px;
|
|||
|
padding: 0;
|
|||
|
color: #375EAB;
|
|||
|
font-weight: bold;
|
|||
|
}
|
|||
|
h1 {
|
|||
|
font-size: 28px;
|
|||
|
line-height: 1;
|
|||
|
}
|
|||
|
h1 .text-muted {
|
|||
|
color:#777;
|
|||
|
}
|
|||
|
h2 {
|
|||
|
font-size: 20px;
|
|||
|
background: #E0EBF5;
|
|||
|
padding: 8px;
|
|||
|
line-height: 1.25;
|
|||
|
font-weight: normal;
|
|||
|
}
|
|||
|
h2 a {
|
|||
|
font-weight: bold;
|
|||
|
}
|
|||
|
h3 {
|
|||
|
font-size: 20px;
|
|||
|
}
|
|||
|
h3,
|
|||
|
h4 {
|
|||
|
margin: 20px 5px;
|
|||
|
}
|
|||
|
h4 {
|
|||
|
font-size: 16px;
|
|||
|
}
|
|||
|
.rootHeading {
|
|||
|
font-size: 20px;
|
|||
|
margin: 0;
|
|||
|
}
|
|||
|
|
|||
|
dl {
|
|||
|
margin: 20px;
|
|||
|
}
|
|||
|
dd {
|
|||
|
margin: 0 0 0 20px;
|
|||
|
}
|
|||
|
dl,
|
|||
|
dd {
|
|||
|
font-size: 14px;
|
|||
|
}
|
|||
|
div#nav table td {
|
|||
|
vertical-align: top;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#pkg-index h3 {
|
|||
|
font-size: 16px;
|
|||
|
}
|
|||
|
.pkg-dir {
|
|||
|
padding: 0 10px;
|
|||
|
}
|
|||
|
.pkg-dir table {
|
|||
|
border-collapse: collapse;
|
|||
|
border-spacing: 0;
|
|||
|
}
|
|||
|
.pkg-name {
|
|||
|
padding-right: 10px;
|
|||
|
}
|
|||
|
.alert {
|
|||
|
color: #AA0000;
|
|||
|
}
|
|||
|
|
|||
|
.top-heading {
|
|||
|
float: left;
|
|||
|
padding: 21px 0;
|
|||
|
font-size: 20px;
|
|||
|
font-weight: normal;
|
|||
|
}
|
|||
|
.top-heading a {
|
|||
|
color: #222;
|
|||
|
text-decoration: none;
|
|||
|
}
|
|||
|
|
|||
|
div#topbar {
|
|||
|
background: #E0EBF5;
|
|||
|
height: 64px;
|
|||
|
overflow: hidden;
|
|||
|
}
|
|||
|
|
|||
|
body {
|
|||
|
text-align: center;
|
|||
|
}
|
|||
|
div#page {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
div#page > .container,
|
|||
|
div#topbar > .container {
|
|||
|
text-align: left;
|
|||
|
margin-left: auto;
|
|||
|
margin-right: auto;
|
|||
|
padding: 0 20px;
|
|||
|
}
|
|||
|
div#topbar > .container,
|
|||
|
div#page > .container {
|
|||
|
max-width: 950px;
|
|||
|
}
|
|||
|
div#page.wide > .container,
|
|||
|
div#topbar.wide > .container {
|
|||
|
max-width: none;
|
|||
|
}
|
|||
|
div#plusone {
|
|||
|
float: right;
|
|||
|
clear: right;
|
|||
|
margin-top: 5px;
|
|||
|
}
|
|||
|
|
|||
|
div#footer {
|
|||
|
text-align: center;
|
|||
|
color: #666;
|
|||
|
font-size: 14px;
|
|||
|
margin: 40px 0;
|
|||
|
}
|
|||
|
|
|||
|
div#menu > a,
|
|||
|
input#search,
|
|||
|
div#learn .buttons a,
|
|||
|
div.play .buttons a,
|
|||
|
div#blog .read a,
|
|||
|
#menu-button {
|
|||
|
padding: 10px;
|
|||
|
|
|||
|
text-decoration: none;
|
|||
|
font-size: 16px;
|
|||
|
|
|||
|
-webkit-border-radius: 5px;
|
|||
|
-moz-border-radius: 5px;
|
|||
|
border-radius: 5px;
|
|||
|
}
|
|||
|
div#playground .buttons a,
|
|||
|
div#menu > a,
|
|||
|
input#search,
|
|||
|
#menu-button {
|
|||
|
border: 1px solid #375EAB;
|
|||
|
}
|
|||
|
div#playground .buttons a,
|
|||
|
div#menu > a,
|
|||
|
#menu-button {
|
|||
|
color: white;
|
|||
|
background: #375EAB;
|
|||
|
}
|
|||
|
#playgroundButton.active {
|
|||
|
background: white;
|
|||
|
color: #375EAB;
|
|||
|
}
|
|||
|
a#start,
|
|||
|
div#learn .buttons a,
|
|||
|
div.play .buttons a,
|
|||
|
div#blog .read a {
|
|||
|
color: #222;
|
|||
|
border: 1px solid #375EAB;
|
|||
|
background: #E0EBF5;
|
|||
|
}
|
|||
|
.download {
|
|||
|
width: 150px;
|
|||
|
}
|
|||
|
|
|||
|
div#menu {
|
|||
|
text-align: right;
|
|||
|
padding: 10px;
|
|||
|
white-space: nowrap;
|
|||
|
max-height: 0;
|
|||
|
-moz-transition: max-height .25s linear;
|
|||
|
transition: max-height .25s linear;
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
div#menu.menu-visible {
|
|||
|
max-height: 500px;
|
|||
|
}
|
|||
|
div#menu > a,
|
|||
|
#menu-button {
|
|||
|
margin: 10px 2px;
|
|||
|
padding: 10px;
|
|||
|
}
|
|||
|
::-webkit-input-placeholder {
|
|||
|
color: #7f7f7f;
|
|||
|
opacity: 1;
|
|||
|
}
|
|||
|
::placeholder {
|
|||
|
color: #7f7f7f;
|
|||
|
opacity: 1;
|
|||
|
}
|
|||
|
#menu .search-box {
|
|||
|
display: inline-flex;
|
|||
|
width: 140px;
|
|||
|
}
|
|||
|
input#search {
|
|||
|
background: white;
|
|||
|
color: #222;
|
|||
|
box-sizing: border-box;
|
|||
|
-webkit-appearance: none;
|
|||
|
border-top-right-radius: 0;
|
|||
|
border-bottom-right-radius: 0;
|
|||
|
border-right: 0;
|
|||
|
margin-right: 0;
|
|||
|
flex-grow: 1;
|
|||
|
max-width: 100%;
|
|||
|
min-width: 90px;
|
|||
|
}
|
|||
|
input#search:-moz-ui-invalid {
|
|||
|
box-shadow: unset;
|
|||
|
}
|
|||
|
input#search + button {
|
|||
|
display: inline;
|
|||
|
font-size: 1em;
|
|||
|
background-color: #375EAB;
|
|||
|
color: white;
|
|||
|
border: 1px solid #375EAB;
|
|||
|
border-top-left-radius: 0;
|
|||
|
border-top-right-radius: 5px;
|
|||
|
border-bottom-left-radius: 0;
|
|||
|
border-bottom-right-radius: 5px;
|
|||
|
margin-left: 0;
|
|||
|
cursor: pointer;
|
|||
|
}
|
|||
|
input#search + button span {
|
|||
|
display: flex;
|
|||
|
}
|
|||
|
input#search + button svg {
|
|||
|
fill: white
|
|||
|
}
|
|||
|
|
|||
|
#menu-button {
|
|||
|
display: none;
|
|||
|
position: absolute;
|
|||
|
right: 5px;
|
|||
|
top: 0;
|
|||
|
margin-right: 5px;
|
|||
|
}
|
|||
|
#menu-button-arrow {
|
|||
|
display: inline-block;
|
|||
|
}
|
|||
|
.vertical-flip {
|
|||
|
transform: rotate(-180deg);
|
|||
|
}
|
|||
|
|
|||
|
div.left {
|
|||
|
float: left;
|
|||
|
clear: left;
|
|||
|
margin-right: 2.5%;
|
|||
|
}
|
|||
|
div.right {
|
|||
|
float: right;
|
|||
|
clear: right;
|
|||
|
margin-left: 2.5%;
|
|||
|
}
|
|||
|
div.left,
|
|||
|
div.right {
|
|||
|
width: 45%;
|
|||
|
}
|
|||
|
|
|||
|
div#learn,
|
|||
|
div#about {
|
|||
|
padding-top: 20px;
|
|||
|
}
|
|||
|
div#learn h2,
|
|||
|
div#about {
|
|||
|
margin: 0;
|
|||
|
}
|
|||
|
div#about {
|
|||
|
font-size: 20px;
|
|||
|
margin: 0 auto 30px;
|
|||
|
}
|
|||
|
div#gopher {
|
|||
|
background: url(/doc/gopher/frontpage.png) no-repeat;
|
|||
|
background-position: center top;
|
|||
|
height: 155px;
|
|||
|
}
|
|||
|
a#start {
|
|||
|
display: block;
|
|||
|
padding: 10px;
|
|||
|
|
|||
|
text-align: center;
|
|||
|
text-decoration: none;
|
|||
|
|
|||
|
-webkit-border-radius: 5px;
|
|||
|
-moz-border-radius: 5px;
|
|||
|
border-radius: 5px;
|
|||
|
}
|
|||
|
a#start .big {
|
|||
|
display: block;
|
|||
|
font-weight: bold;
|
|||
|
font-size: 20px;
|
|||
|
}
|
|||
|
a#start .desc {
|
|||
|
display: block;
|
|||
|
font-size: 14px;
|
|||
|
font-weight: normal;
|
|||
|
margin-top: 5px;
|
|||
|
}
|
|||
|
|
|||
|
div#learn .popout {
|
|||
|
float: right;
|
|||
|
display: block;
|
|||
|
cursor: pointer;
|
|||
|
font-size: 12px;
|
|||
|
background: url(/doc/share.png) no-repeat;
|
|||
|
background-position: right top;
|
|||
|
padding: 5px 27px;
|
|||
|
}
|
|||
|
div#learn pre,
|
|||
|
div#learn textarea {
|
|||
|
padding: 0;
|
|||
|
margin: 0;
|
|||
|
font-family: Menlo, monospace;
|
|||
|
font-size: 14px;
|
|||
|
}
|
|||
|
div#learn .input {
|
|||
|
padding: 10px;
|
|||
|
margin-top: 10px;
|
|||
|
height: 150px;
|
|||
|
|
|||
|
-webkit-border-top-left-radius: 5px;
|
|||
|
-webkit-border-top-right-radius: 5px;
|
|||
|
-moz-border-radius-topleft: 5px;
|
|||
|
-moz-border-radius-topright: 5px;
|
|||
|
border-top-left-radius: 5px;
|
|||
|
border-top-right-radius: 5px;
|
|||
|
}
|
|||
|
div#learn .input textarea {
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
border: none;
|
|||
|
outline: none;
|
|||
|
resize: none;
|
|||
|
}
|
|||
|
div#learn .output {
|
|||
|
border-top: none !important;
|
|||
|
|
|||
|
padding: 10px;
|
|||
|
height: 59px;
|
|||
|
overflow: auto;
|
|||
|
|
|||
|
-webkit-border-bottom-right-radius: 5px;
|
|||
|
-webkit-border-bottom-left-radius: 5px;
|
|||
|
-moz-border-radius-bottomright: 5px;
|
|||
|
-moz-border-radius-bottomleft: 5px;
|
|||
|
border-bottom-right-radius: 5px;
|
|||
|
border-bottom-left-radius: 5px;
|
|||
|
}
|
|||
|
div#learn .output pre {
|
|||
|
padding: 0;
|
|||
|
|
|||
|
-webkit-border-radius: 0;
|
|||
|
-moz-border-radius: 0;
|
|||
|
border-radius: 0;
|
|||
|
}
|
|||
|
div#learn .input,
|
|||
|
div#learn .input textarea,
|
|||
|
div#learn .output,
|
|||
|
div#learn .output pre {
|
|||
|
background: #FFFFD8;
|
|||
|
}
|
|||
|
div#learn .input,
|
|||
|
div#learn .output {
|
|||
|
border: 1px solid #375EAB;
|
|||
|
}
|
|||
|
div#learn .buttons {
|
|||
|
float: right;
|
|||
|
padding: 20px 0 10px 0;
|
|||
|
text-align: right;
|
|||
|
}
|
|||
|
div#learn .buttons a {
|
|||
|
height: 16px;
|
|||
|
margin-left: 5px;
|
|||
|
padding: 10px;
|
|||
|
}
|
|||
|
div#learn .toys {
|
|||
|
margin-top: 8px;
|
|||
|
}
|
|||
|
div#learn .toys select {
|
|||
|
border: 1px solid #375EAB;
|
|||
|
margin: 0;
|
|||
|
}
|
|||
|
div#learn .output .exit {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
|
|||
|
div#video {
|
|||
|
max-width: 100%;
|
|||
|
}
|
|||
|
div#blog,
|
|||
|
div#video {
|
|||
|
margin-top: 40px;
|
|||
|
}
|
|||
|
div#blog > a,
|
|||
|
div#blog > div,
|
|||
|
div#blog > h2,
|
|||
|
div#video > a,
|
|||
|
div#video > div,
|
|||
|
div#video > h2 {
|
|||
|
margin-bottom: 10px;
|
|||
|
}
|
|||
|
div#blog .title,
|
|||
|
div#video .title {
|
|||
|
display: block;
|
|||
|
font-size: 20px;
|
|||
|
}
|
|||
|
div#blog .when {
|
|||
|
color: #666;
|
|||
|
font-size: 14px;
|
|||
|
}
|
|||
|
div#blog .read {
|
|||
|
text-align: right;
|
|||
|
}
|
|||
|
|
|||
|
.toggleButton { cursor: pointer; }
|
|||
|
.toggle > .collapsed { display: block; }
|
|||
|
.toggle > .expanded { display: none; }
|
|||
|
.toggleVisible > .collapsed { display: none; }
|
|||
|
.toggleVisible > .expanded { display: block; }
|
|||
|
|
|||
|
table.codetable { margin-left: auto; margin-right: auto; border-style: none; }
|
|||
|
table.codetable td { padding-right: 10px; }
|
|||
|
hr { border-style: none; border-top: 1px solid black; }
|
|||
|
|
|||
|
img.gopher {
|
|||
|
float: right;
|
|||
|
margin-left: 10px;
|
|||
|
margin-bottom: 10px;
|
|||
|
z-index: -1;
|
|||
|
}
|
|||
|
h2 { clear: right; }
|
|||
|
|
|||
|
/* example and drop-down playground */
|
|||
|
div.play {
|
|||
|
padding: 0 20px 40px 20px;
|
|||
|
}
|
|||
|
div.play pre,
|
|||
|
div.play textarea,
|
|||
|
div.play .lines {
|
|||
|
padding: 0;
|
|||
|
margin: 0;
|
|||
|
font-family: Menlo, monospace;
|
|||
|
font-size: 14px;
|
|||
|
}
|
|||
|
div.play .input {
|
|||
|
padding: 10px;
|
|||
|
margin-top: 10px;
|
|||
|
|
|||
|
-webkit-border-top-left-radius: 5px;
|
|||
|
-webkit-border-top-right-radius: 5px;
|
|||
|
-moz-border-radius-topleft: 5px;
|
|||
|
-moz-border-radius-topright: 5px;
|
|||
|
border-top-left-radius: 5px;
|
|||
|
border-top-right-radius: 5px;
|
|||
|
|
|||
|
overflow: hidden;
|
|||
|
}
|
|||
|
div.play .input textarea {
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
border: none;
|
|||
|
outline: none;
|
|||
|
resize: none;
|
|||
|
|
|||
|
overflow: hidden;
|
|||
|
}
|
|||
|
div#playground .input textarea {
|
|||
|
overflow: auto;
|
|||
|
resize: auto;
|
|||
|
}
|
|||
|
div.play .output {
|
|||
|
border-top: none !important;
|
|||
|
|
|||
|
padding: 10px;
|
|||
|
max-height: 200px;
|
|||
|
overflow: auto;
|
|||
|
|
|||
|
-webkit-border-bottom-right-radius: 5px;
|
|||
|
-webkit-border-bottom-left-radius: 5px;
|
|||
|
-moz-border-radius-bottomright: 5px;
|
|||
|
-moz-border-radius-bottomleft: 5px;
|
|||
|
border-bottom-right-radius: 5px;
|
|||
|
border-bottom-left-radius: 5px;
|
|||
|
}
|
|||
|
div.play .output pre {
|
|||
|
padding: 0;
|
|||
|
|
|||
|
-webkit-border-radius: 0;
|
|||
|
-moz-border-radius: 0;
|
|||
|
border-radius: 0;
|
|||
|
}
|
|||
|
div.play .input,
|
|||
|
div.play .input textarea,
|
|||
|
div.play .output,
|
|||
|
div.play .output pre {
|
|||
|
background: #FFFFD8;
|
|||
|
}
|
|||
|
div.play .input,
|
|||
|
div.play .output {
|
|||
|
border: 1px solid #375EAB;
|
|||
|
}
|
|||
|
div.play .buttons {
|
|||
|
float: right;
|
|||
|
padding: 20px 0 10px 0;
|
|||
|
text-align: right;
|
|||
|
}
|
|||
|
div.play .buttons a {
|
|||
|
height: 16px;
|
|||
|
margin-left: 5px;
|
|||
|
padding: 10px;
|
|||
|
cursor: pointer;
|
|||
|
}
|
|||
|
.output .stderr {
|
|||
|
color: #933;
|
|||
|
}
|
|||
|
.output .system {
|
|||
|
color: #999;
|
|||
|
}
|
|||
|
|
|||
|
/* drop-down playground */
|
|||
|
#playgroundButton,
|
|||
|
div#playground {
|
|||
|
/* start hidden; revealed by javascript */
|
|||
|
display: none;
|
|||
|
}
|
|||
|
div#playground {
|
|||
|
position: absolute;
|
|||
|
top: 63px;
|
|||
|
right: 20px;
|
|||
|
padding: 0 10px 10px 10px;
|
|||
|
z-index: 1;
|
|||
|
text-align: left;
|
|||
|
background: #E0EBF5;
|
|||
|
|
|||
|
border: 1px solid #B0BBC5;
|
|||
|
border-top: none;
|
|||
|
|
|||
|
-webkit-border-bottom-left-radius: 5px;
|
|||
|
-webkit-border-bottom-right-radius: 5px;
|
|||
|
-moz-border-radius-bottomleft: 5px;
|
|||
|
-moz-border-radius-bottomright: 5px;
|
|||
|
border-bottom-left-radius: 5px;
|
|||
|
border-bottom-right-radius: 5px;
|
|||
|
}
|
|||
|
div#playground .code {
|
|||
|
width: 520px;
|
|||
|
height: 200px;
|
|||
|
}
|
|||
|
div#playground .output {
|
|||
|
height: 100px;
|
|||
|
}
|
|||
|
|
|||
|
/* Inline runnable snippets (play.js/initPlayground) */
|
|||
|
#content .code pre, #content .playground pre, #content .output pre {
|
|||
|
margin: 0;
|
|||
|
padding: 0;
|
|||
|
background: none;
|
|||
|
border: none;
|
|||
|
outline: 0px solid transparent;
|
|||
|
overflow: auto;
|
|||
|
}
|
|||
|
#content .playground .number, #content .code .number {
|
|||
|
color: #999;
|
|||
|
}
|
|||
|
#content .code, #content .playground, #content .output {
|
|||
|
width: auto;
|
|||
|
margin: 20px;
|
|||
|
padding: 10px;
|
|||
|
-webkit-border-radius: 5px;
|
|||
|
-moz-border-radius: 5px;
|
|||
|
border-radius: 5px;
|
|||
|
}
|
|||
|
#content .code, #content .playground {
|
|||
|
background: #e9e9e9;
|
|||
|
}
|
|||
|
#content .output {
|
|||
|
background: #202020;
|
|||
|
}
|
|||
|
#content .output .stdout, #content .output pre {
|
|||
|
color: #e6e6e6;
|
|||
|
}
|
|||
|
#content .output .stderr, #content .output .error {
|
|||
|
color: rgb(244, 74, 63);
|
|||
|
}
|
|||
|
#content .output .system, #content .output .exit {
|
|||
|
color: rgb(255, 209, 77)
|
|||
|
}
|
|||
|
#content .buttons {
|
|||
|
position: relative;
|
|||
|
float: right;
|
|||
|
top: -50px;
|
|||
|
right: 30px;
|
|||
|
}
|
|||
|
#content .output .buttons {
|
|||
|
top: -60px;
|
|||
|
right: 0;
|
|||
|
height: 0;
|
|||
|
}
|
|||
|
#content .buttons .kill {
|
|||
|
display: none;
|
|||
|
visibility: hidden;
|
|||
|
}
|
|||
|
a.error {
|
|||
|
font-weight: bold;
|
|||
|
color: white;
|
|||
|
background-color: darkred;
|
|||
|
border-bottom-left-radius: 4px;
|
|||
|
border-bottom-right-radius: 4px;
|
|||
|
border-top-left-radius: 4px;
|
|||
|
border-top-right-radius: 4px;
|
|||
|
padding: 2px 4px 2px 4px; /* TRBL */
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#heading-narrow {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
|
|||
|
.downloading {
|
|||
|
background: #F9F9BE;
|
|||
|
padding: 10px;
|
|||
|
text-align: center;
|
|||
|
border-radius: 5px;
|
|||
|
}
|
|||
|
|
|||
|
@media (max-width: 930px) {
|
|||
|
#heading-wide {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
#heading-narrow {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
@media (max-width: 760px) {
|
|||
|
.container .left,
|
|||
|
.container .right {
|
|||
|
width: auto;
|
|||
|
float: none;
|
|||
|
}
|
|||
|
|
|||
|
div#about {
|
|||
|
max-width: 500px;
|
|||
|
text-align: center;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
@media (min-width: 700px) and (max-width: 1000px) {
|
|||
|
div#menu > a {
|
|||
|
margin: 5px 0;
|
|||
|
font-size: 14px;
|
|||
|
}
|
|||
|
|
|||
|
input#search {
|
|||
|
font-size: 14px;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
@media (max-width: 700px) {
|
|||
|
body {
|
|||
|
font-size: 15px;
|
|||
|
}
|
|||
|
|
|||
|
pre,
|
|||
|
code {
|
|||
|
font-size: 13px;
|
|||
|
}
|
|||
|
|
|||
|
div#page > .container {
|
|||
|
padding: 0 10px;
|
|||
|
}
|
|||
|
|
|||
|
div#topbar {
|
|||
|
height: auto;
|
|||
|
padding: 10px;
|
|||
|
}
|
|||
|
|
|||
|
div#topbar > .container {
|
|||
|
padding: 0;
|
|||
|
}
|
|||
|
|
|||
|
#heading-wide {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
#heading-narrow {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
|
|||
|
.top-heading {
|
|||
|
float: none;
|
|||
|
display: inline-block;
|
|||
|
padding: 12px;
|
|||
|
}
|
|||
|
|
|||
|
div#menu {
|
|||
|
padding: 0;
|
|||
|
min-width: 0;
|
|||
|
text-align: left;
|
|||
|
float: left;
|
|||
|
}
|
|||
|
|
|||
|
div#menu > a {
|
|||
|
display: block;
|
|||
|
margin-left: 0;
|
|||
|
margin-right: 0;
|
|||
|
}
|
|||
|
|
|||
|
#menu .search-box {
|
|||
|
display: flex;
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
|
|||
|
#menu-button {
|
|||
|
display: inline-block;
|
|||
|
}
|
|||
|
|
|||
|
p,
|
|||
|
pre,
|
|||
|
ul,
|
|||
|
ol {
|
|||
|
margin: 10px;
|
|||
|
}
|
|||
|
|
|||
|
.pkg-synopsis {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
|
|||
|
img.gopher {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
@media (max-width: 480px) {
|
|||
|
#heading-wide {
|
|||
|
display: none;
|
|||
|
}
|
|||
|
#heading-narrow {
|
|||
|
display: block;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
@media print {
|
|||
|
pre {
|
|||
|
background: #FFF;
|
|||
|
border: 1px solid #BBB;
|
|||
|
white-space: pre-wrap;
|
|||
|
}
|
|||
|
}
|
|||
|
`,
|
|||
|
}
|