ofs | hex dump | ascii |
---|
0000 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 10 04 00 00 10 b3 08 02 00 00 00 e8 74 72 | .PNG........IHDR..............tr |
0020 | e1 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00 00 04 67 41 4d 41 00 00 b1 8f 0b fc 61 05 00 00 | .....sRGB.........gAMA......a... |
0040 | 00 09 70 48 59 73 00 00 5c 46 00 00 5c 46 01 14 94 43 41 00 00 ff a5 49 44 41 54 78 5e ec fd 4f | ..pHYs..\F..\F...CA....IDATx^..O |
0060 | ac 1d 57 82 1f 68 72 c9 65 2d d9 3b 6e 06 d0 2c 06 28 2f 1a f6 6c 0a 02 a6 16 02 0a 6a a8 d0 18 | ..W..hr.e-.;n..,.(/..l......j... |
0080 | 80 9b a9 4a 60 26 81 07 b8 31 24 0c 2f b4 20 a0 4d 13 6a 03 32 84 32 4a 70 82 55 9d 69 0b c2 30 | ...J`&...1$./...M.j.2.2Jp.U.i..0 |
00a0 | a1 9c 66 21 e9 84 48 22 9b 49 a9 e4 c4 4b 59 95 43 4a 06 cd 7c 6a 4e 91 9c a2 f2 f1 d9 4f e6 2b | ..f!..H".I...KY.CJ..|jN......O.+ |
00c0 | 51 45 8a 4e 55 d5 9c 66 9c 7b 7d 15 71 23 5e c4 89 b8 f7 c5 89 fb 7d 38 10 c4 f8 7b 4e 44 bc f7 | QE.NU..f.{}.q#^.......}8...{ND.. |
00e0 | e2 c6 39 bf b8 c7 fe 1e 00 00 00 00 00 00 00 00 00 00 00 c8 8a 30 00 00 00 00 00 00 00 00 00 00 | ..9..................0.......... |
0100 | 00 00 64 e6 bf 86 01 ee de bd 7b e6 cc 99 17 01 48 f5 83 1f fc e0 e9 d3 a7 f1 b7 2a 00 e4 e9 c6 | ..d.......{.....H..........*.... |
0120 | 8d 1b df f9 ce 77 e2 df 36 00 3a 7a e5 95 57 fe ec cf fe 2c fe 4a 05 00 00 00 00 e0 a8 5d b8 70 | .....w..6.:z..W....,.J.......].p |
0140 | e1 95 57 5e 89 cf 70 01 e8 e8 3b df f9 ce ed db b7 e3 af 54 60 94 fe 6b 18 20 dc f4 1c 03 a0 9f | ..W^..p...;........T`..k........ |
0160 | 1f fc e0 07 f1 b7 2a 00 64 e8 e9 d3 a7 27 4e 9c 88 7f d5 00 48 75 e3 c6 8d f8 8b 15 00 00 00 00 | ......*.d....'N.....Hu.......... |
0180 | 80 a3 73 e3 c6 8d f8 dc 16 80 54 27 4f 9e 8c bf 55 81 51 8a 61 80 dd dd dd f8 53 0b 40 0f df f9 | ..s.......T'O...U.Q.a.....S.@... |
01a0 | ce 77 8a df ab 00 90 a3 eb d7 af c7 3f 69 00 f4 f0 da 6b af c5 5f ac 00 00 00 00 00 1c 9d d7 5e | .w..........?i....k.._.........^ |
01c0 | 7b 2d 3e b7 05 a0 87 bb 77 ef c6 5f ac c0 f8 c4 30 40 f8 41 8d 3f b2 00 f4 20 0c 00 40 d6 84 01 | {->.....w.._....0@.A.?......@... |
01e0 | 00 06 21 0c 00 00 00 00 00 30 06 c2 00 00 83 10 06 80 31 5b 12 06 38 71 e2 c4 75 00 5a 7b f5 d5 | ..!......0........1[..8q..u.Z{.. |
0200 | 57 e3 2f 50 61 00 00 32 17 fe ae c5 3f 69 c7 8e fd f6 6f ff 76 f1 97 0e 80 36 c2 67 81 f8 0b 54 | W./Pa..2....?i....o.v....6.g...T |
0220 | 18 00 00 00 00 00 60 1c 16 c3 00 df f9 ce 77 e2 f3 5c 00 5a 38 71 e2 44 fc 05 2a 0c 00 e3 b6 24 | ......`.......w..\.Z8q.D..*....$ |
0240 | 0c 70 f2 e4 c9 62 22 00 6d fc e0 07 3f 88 bf 40 85 01 00 c8 5c f8 3c 1f ff a4 1d 3b f6 e2 8b 2f | .p...b".m...?..@....\.<....;.../ |
0260 | c6 a9 00 b4 b0 d8 a5 24 0c 00 00 00 00 00 30 06 9e dc 02 24 3b 79 f2 64 fc 05 2a 0c 00 e3 26 0c | .......$......0....$;y.d..*...&. |
0280 | 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 | ...0...!...L........xr..L..r!... |
02a0 | 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 | .0...!...L........xr..L..r!....0 |
02c0 | 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 | ...!...L........xr..L..r!....0.. |
02e0 | 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 | .!...L........xr..L..r!....0...! |
0300 | 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 | ...L........xr..L..r!....0...!.. |
0320 | 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c | .L........xr..L..r!....0...!...L |
0340 | 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 | ........xr..L..r!....0...!...L.. |
0360 | 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 | ......xr..L..r!....0...!...L.... |
0380 | 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 | ....xr..L..r!....0...!...L...... |
03a0 | c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 | ..xr..L..r!....0...!...L........ |
03c0 | 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 | xr..L..r!....0...!...L........xr |
03e0 | 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 | ..L..r!....0...!...L........xr.. |
0400 | 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 | L..r!....0...!...L........xr..L. |
0420 | 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 | .r!....0...!...L........xr..L..r |
0440 | 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c | !....0...!...L........xr..L..r!. |
0460 | 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 | ...0...!...L........xr..L..r!... |
0480 | 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 | .0...!...L........xr..L..r!....0 |
04a0 | 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 | ...!...L........xr..L..r!....0.. |
04c0 | 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 | .!...L........xr..L..r!....0...! |
04e0 | 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 | ...L........xr..L..r!....0...!.. |
0500 | 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c | .L........xr..L..r!....0...!...L |
0520 | 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 | ........xr..L..r!....0...!...L.. |
0540 | 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 | ......xr..L..r!....0...!...L.... |
0560 | 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 | ....xr..L..r!....0...!...L...... |
0580 | c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 | ..xr..L..r!....0...!...L........ |
05a0 | 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 | xr..L..r!....0...!...L........xr |
05c0 | 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 | ..L..r!....0...!...L........xr.. |
05e0 | 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 | L..r!....0...!...L........xr..L. |
0600 | 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 | .r!....0...!...L........xr..L..r |
0620 | 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c | !....0...!...L........xr..L..r!. |
0640 | 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 | ...0...!...L........xr..L..r!... |
0660 | 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 | .0...!...L........xr..L..r!....0 |
0680 | 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 | ...!...L........xr..L..r!....0.. |
06a0 | 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 | .!...L........xr..L..r!....0...! |
06c0 | 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 | ...L........xr..L..r!....0...!.. |
06e0 | 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c | .L........xr..L..r!....0...!...L |
0700 | 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 | ........xr..L..r!....0...!...L.. |
0720 | 00 00 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 | ......xr..L..r!....0...!...L.... |
0740 | 00 00 c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 | ....xr..L..r!....0...!...L...... |
0760 | c0 d8 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 | ..xr..L..r!....0...!...L........ |
0780 | 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 | xr..L..r!....0...!...L........xr |
07a0 | 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 | ..L..r!....0...!...L........xr.. |
07c0 | 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 c0 d8 78 72 0b 90 4c 18 | L..r!....0...!...L........xr..L. |
07e0 | 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 00 00 ab f0 c1 67 f7 df fe c5 a7 f3 | .r!....0...!...L.........g...... |
0800 | f2 d1 dd cf 1f 7f fd 2c ce 03 0e e3 c9 2d 40 32 61 00 c8 85 30 00 40 5f c2 00 00 4c 86 30 00 40 | .......,.....-@2a...0.@_...L.0.@ |
0820 | 32 5d 4a 00 00 00 00 0c ee ad f7 3f fe 07 e7 fe a4 54 ce bd f7 61 9c 0d 1c c6 93 5b 80 64 c2 00 | 2]J........?.....T...a.....[.d.. |
0840 | 90 0b 61 00 80 be 84 01 00 98 0c 61 00 80 64 ba 94 00 00 00 00 18 d6 17 5f 3d 29 c5 00 8a f2 d6 | ..a........a..d........._=)..... |
0860 | fb 1f c7 25 80 c3 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 | ...%..xr..L..r!....0...!...L.... |
0880 | 00 00 c3 ba 72 eb 4e 29 06 50 94 4f 1e ec c5 25 80 c3 78 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 | ....r.N).P.O...%..xr..L..r!....0 |
08a0 | 00 00 93 21 0c 00 90 4c 97 12 00 00 c0 54 3d fe fa d9 c5 1b b7 4f bf 7b 75 3e 0c 37 fc 7f 98 12 | ...!...L.....T=......O.{u>.7.... |
08c0 | a6 c7 25 8e ce 98 eb 06 5d ed 1e 3c fe e0 b3 fb 6f ff e2 d3 79 b9 72 eb 4e 98 18 67 6f a4 c5 9f | ..%.....]..<....o...y.r.N..go... |
08e0 | ee c5 e2 67 1c da f3 e4 16 20 99 30 00 e4 42 18 00 a0 2f 61 00 00 26 43 18 00 20 99 2e 25 00 00 | ...g.......0..B.../a..&C.....%.. |
0900 | 80 a9 fa e8 ee e7 a5 61 b8 45 09 d3 e3 12 47 67 cc 75 83 ae ea 06 be c7 d9 9b e7 de fe 41 e9 50 | .......a.E....Gg.u...........A.P |
0920 | 14 e5 ed 5f 7c 1a 97 00 5a f0 e4 16 20 99 30 00 e4 42 18 00 a0 2f 61 00 00 26 43 18 00 20 99 2e | ..._|...Z.....0..B.../a..&C..... |
0940 | 25 00 00 80 a9 12 06 80 f5 28 5d c6 f3 b2 b1 5f 0e 70 f1 c6 ed d2 a1 28 ca ce c3 fd b8 04 d0 82 | %........(]...._.p.....(........ |
0960 | 27 b7 00 c9 84 01 20 17 c2 00 00 7d 09 03 00 30 19 c2 00 00 c9 74 29 01 00 00 4c 95 30 00 ac 47 | '..........}...0.....t)...L.0..G |
0980 | e9 32 9e 97 8d 0d 03 94 8e c3 bc c4 d9 40 3b 9e dc 02 24 13 06 80 5c 08 03 00 f4 25 0c 00 c0 64 | .2...........@;...$...\....%...d |
09a0 | 08 03 00 24 d3 a5 04 00 00 f9 fa e2 ab 27 bb 07 8f 17 4b 9c b1 4a 8b bb 0b 15 88 53 19 25 61 00 | ...$.........'....K..J.....S.%a. |
09c0 | 58 8f d2 65 3c 2f eb f9 b5 5c f5 f8 eb 67 f7 f6 0f c2 4f 53 51 76 1e ee af f3 d7 75 d8 5d e9 38 | X..e</...\...g....OSQv.....u.].8 |
09e0 | 14 e5 ca ad 3b 71 89 16 16 ff d6 0c 58 e2 d6 21 13 9e dc 02 24 13 06 80 5c 08 03 00 f4 25 0c 00 | ....;q......X..!....$...\....%.. |
0a00 | c0 64 08 03 00 24 d3 a5 04 00 00 39 da 79 b8 7f fa dd ab a5 71 96 45 39 f7 de 87 61 6e 5c 6e 50 | .d...$.....9.y......q.E9...an\nP |
0a20 | 4b 47 6f bf f5 fe c7 71 36 e3 b3 f4 94 85 12 a6 c7 25 8e ce 98 eb 06 5d 95 2e e3 79 39 92 d1 e7 | KGo....q6........%.....]...y9... |
0a40 | f7 f6 0f 4a d5 28 ca 07 9f dd 8f 4b ac 58 f8 bb 50 da 75 51 42 c5 e2 12 8d c2 2f 81 ba 3f 70 fd | ...J.(.....K.X..P.uQB...../..?p. |
0a60 | 4b d8 f2 e3 af 9f c5 3d c1 e8 79 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c | K......=..yr..L..r!....0...!...L |
0a80 | 97 12 00 00 64 e7 8b af 9e 94 46 37 56 4b a7 17 30 b7 f4 f6 2f 3e 2d ed a5 28 de b5 3c 5a c2 00 | ....d.....F7VK..0.../>-..(..<Z.. |
0aa0 | b0 1e a5 cb 78 5e 8e e4 d7 63 dd 0f 57 f8 1d 1e 97 58 a5 c7 5f 3f 2b ed b7 28 a7 df bd 1a 97 68 | ....x^...c..W....X.._?+..(.....h |
0ac0 | 14 8e 58 69 c5 c1 cb 27 0f f6 e2 ce 60 f4 3c b9 05 48 26 0c 00 b9 10 06 00 e8 4b 18 00 80 c9 10 | ..Xi...'....`.<..H&.......K..... |
0ae0 | 06 00 48 a6 4b 09 00 00 b2 53 37 d0 b3 54 06 1f ef 28 0c 90 9d 31 0f b8 1f 73 dd a0 ab d2 65 3c | ..H.K....S7..T...(...1...s....e< |
0b00 | 2f 1b 18 06 a8 db 7b cb ef 25 a8 5b 7d c0 e2 97 0c 19 f1 e4 16 20 99 30 00 e4 42 18 00 a0 2f 61 | /.....{..%.[}..........0..B.../a |
0b20 | 00 00 26 43 18 00 20 99 2e 25 00 00 c8 4e cb b1 92 a7 df bd fa f8 eb 67 71 9d 21 08 03 64 a7 ee | ..&C.....%...N.........gq.!..d.. |
0b40 | 52 19 c3 58 d8 31 d7 0d ba 2a 5d c6 f3 b2 81 61 80 73 ef 7d 58 da 6f 51 be f8 ea 49 5c a2 51 5d | R..X.1...*]....a.s.}X.oQ...I\.Q] |
0b60 | e5 07 2c 7e c9 90 11 4f 6e 01 92 09 03 40 2e 84 01 00 fa 12 06 00 60 32 84 01 00 92 e9 52 02 00 | ..,~...On....@........`2.....R.. |
0b80 | 80 ec b4 1f 2b 79 e5 d6 9d b8 ce 10 84 01 56 e1 f1 d7 cf 76 1e ee 87 73 5a 94 7b fb 07 03 46 38 | ....+y........V....v...sZ.{...F8 |
0ba0 | ea 2e 95 30 3d 2e 71 74 c6 5c 37 e8 aa 74 19 cf cb a6 85 01 42 7b 4b 3b 2d ca b9 f7 3e 8c 4b 1c | ...0=.qt.\7..t......B{K;-...>.K. |
0bc0 | a6 ae f2 03 16 bf 64 c8 88 27 b7 00 c9 84 01 20 17 c2 00 00 7d 09 03 00 30 19 c2 00 00 c9 74 29 | ......d..'..........}...0.....t) |
0be0 | 01 00 40 76 3a 8d 95 1c 70 28 aa 30 c0 e0 76 1e ee 97 0e 66 28 a7 df bd 3a d4 21 ad bb 54 c6 30 | ..@v:...p(.0..v....f(...:.!..T.0 |
0c00 | 16 76 cc 75 83 ae 4a 97 f1 bc 6c 5a 18 e0 ca ad 3b a5 9d 16 e5 93 07 7b 71 89 c3 d4 55 7e c0 d2 | .v.u..J...lZ....;......{q...U~.. |
0c20 | be 32 70 e4 3c b9 05 48 26 0c 00 b9 10 06 00 e8 4b 18 00 80 c9 10 06 00 48 a6 4b 09 00 00 b2 d3 | .2p.<..H&.......K.......H.K..... |
0c40 | 69 ac e4 80 a3 3f 85 01 06 57 77 48 87 1a 10 5f 77 a9 0c b5 fd 3e c6 5c 37 e8 aa 74 19 cf cb a6 | i....?...WwH..._w....>.\7..t.... |
0c60 | 85 01 4e bf 7b b5 b4 d3 a2 b4 ff c2 93 ba ca 0f 55 d6 70 10 60 40 9e dc 02 24 13 06 80 5c 08 03 | ..N.{...........U.p.`@...$...\.. |
0c80 | 00 f4 25 0c 00 c0 64 08 03 00 24 d3 a5 04 00 00 d9 e9 3a 56 f2 de fe 41 5c b3 1f 61 80 c1 09 03 | ..%...d...$.......:V...A\..a.... |
0ca0 | 54 cb 18 ea 06 5d 95 2e e3 79 d9 a8 30 c0 d2 af 3a 09 a5 d3 7e 8f aa f2 30 4e 9e dc 02 24 13 06 | T....]...y..0...:...~...0N...$.. |
0cc0 | 80 5c 08 03 00 f4 25 0c 00 c0 64 08 03 00 24 d3 a5 04 00 00 d9 a9 1b 2b 59 57 ce bd f7 61 5c b3 | .\....%...d...$........+YW...a\. |
0ce0 | 1f 61 80 c1 09 03 54 cb 18 ea 06 5d 95 2e e3 79 d9 a8 30 c0 c5 1b b7 4b 7b 2c ca ce c3 fd b8 44 | .a....T....]...y..0....K{,.....D |
0d00 | 0b 47 55 79 18 27 4f 6e 01 92 09 03 40 2e 84 01 00 fa 12 06 00 60 32 84 01 00 92 e9 52 02 00 80 | .GUy.'On....@........`2.....R... |
0d20 | ec d4 8d 95 7c eb fd 8f 4b 53 e6 e5 93 07 7b 71 e5 1e 84 01 06 27 0c 50 2d 63 a8 1b 74 55 ba 8c | ....|...KS....{q.....'.P-c..tU.. |
0d40 | e7 65 a3 c2 00 a5 dd 15 e5 f4 bb 57 e3 ec 76 8e aa f2 30 4e 9e dc 02 24 13 06 80 5c 08 03 00 f4 | .e.........W..v...0N...$...\.... |
0d60 | 25 0c 00 c0 64 08 03 00 24 d3 a5 04 00 00 d9 a9 1b 2b b9 f3 70 bf 34 65 5e ba 0e c7 5c 4a 18 60 | %...d...$........+..p.4e^...\J.` |
0d80 | 70 c2 00 d5 32 86 ba 41 57 a5 cb 78 5e 36 27 0c f0 c9 83 bd d2 ee 8a 72 e5 d6 9d b8 44 3b 47 52 | p...2..AW..x^6'........r....D;GR |
0da0 | 79 18 2d 4f 6e 01 92 09 03 40 2e 84 01 00 fa 12 06 00 60 32 84 01 00 92 e9 52 02 00 80 ec d4 8d | y.-On....@........`2.....R...... |
0dc0 | 95 dc 3d 78 7c e5 d6 9d d2 c4 79 e9 3f c6 5a 18 60 70 c2 00 d5 32 86 ba 41 57 a5 cb 78 5e 36 27 | ..=x|.....y.?.Z.`p...2..AW..x^6' |
0de0 | 0c 50 f7 d5 34 f7 f6 0f e2 12 ed 1c 49 e5 61 b4 3c b9 05 48 26 0c 00 b9 10 06 00 e8 4b 18 00 80 | .P..4.......I.a.<..H&.......K... |
0e00 | c9 10 06 00 48 a6 4b 09 00 00 b2 53 37 56 72 f7 e0 f1 e3 af 9f 95 26 2e 96 30 37 6e 22 89 30 c0 | ....H.K....S7Vr.......&..07n".0. |
0e20 | e0 84 01 aa 65 0c 75 83 ae 4a 97 f1 bc 6c 48 18 a0 ee 4f cf b9 f7 3e 8c 4b b4 b6 fe ca c3 98 79 | ....e.u..J...lH...O...>.K......y |
0e40 | 72 0b 90 4c 18 00 72 21 0c 00 d0 97 30 00 00 93 21 0c 00 90 4c 97 12 00 00 64 a7 6e ac 64 31 ea | r..L..r!....0...!...L....d.n.d1. |
0e60 | b4 e1 cb 01 c2 ac 62 0b 69 84 01 06 27 0c 50 2d 63 a8 1b 74 55 ba 8c e7 65 43 c2 00 1f 7c 76 bf | ......b.i...'.P-c..tU...eC...|v. |
0e80 | b4 af a2 84 e9 71 89 d6 d6 5f 79 18 33 4f 6e 01 92 09 03 40 2e 84 01 00 fa 12 06 00 60 32 84 01 | .....q..._y.3On....@........`2.. |
0ea0 | 00 92 e9 52 02 00 80 ec d4 8d 95 2c 46 9d 36 7f 39 c0 17 5f 3d 29 36 92 40 18 60 70 c2 00 d5 32 | ...R.......,F.6.9.._=)6.@.`p...2 |
0ec0 | 86 ba 41 57 a5 cb 78 5e 36 24 0c 70 ee bd 0f 4b fb 2a 4a c2 5f 9c f5 57 1e c6 cc 93 5b 80 64 c2 | ..AW..x^6$.p...K.*J._..W....[.d. |
0ee0 | 00 90 0b 61 00 80 be 84 01 00 98 0c 61 00 80 64 ba 94 00 00 20 3b 75 63 25 e7 a3 4e eb 5e d2 1c | ...a........a..d.....;uc%..N.^.. |
0f00 | 4a 9f f1 94 47 15 06 08 db af 96 3e a9 86 61 3d fe fa d9 62 c5 c2 3f e3 8c 16 c6 1c 06 58 6c 54 | J...G......>..a=...b..?......XlT |
0f20 | 28 83 1f f0 3e 75 0b 95 29 55 2f ce 38 3a a5 fa 14 65 3c 57 69 2e 46 72 00 4b 3f d4 a1 1c fa 73 | (...>u..)U/.8:...e<Wi.Fr.K?....s |
0f40 | 5d ba 8c e7 25 ac 1b 97 58 a3 ba 1f ae 15 8d a7 0f 6d 2c ed a8 28 6f bd ff 71 5c a2 8b 35 57 1e | ]...%...X........m,..(o..q\..5W. |
0f60 | 46 ce 93 5b 80 64 c2 00 90 0b 61 00 80 be 84 01 00 98 0c 61 00 80 64 ba 94 00 00 20 3b 75 63 25 | F..[.d....a........a..d.....;uc% |
0f80 | 17 47 9d 9e 7e f7 6a 69 ee bc 24 0f 4e 5d 5b 18 e0 f1 d7 cf 3e 79 b0 77 f1 c6 ed ba b7 4d cf cb | .G..~.ji..$.N][.....>y.w.....M.. |
0fa0 | 5b ef 7f 7c e5 d6 9d 9d 87 fb 71 cd 21 84 5d 87 6d 86 c6 86 12 ea d0 30 36 3d 2c b9 b4 86 61 e2 | [..|......q.!.].m......06=,...a. |
0fc0 | 07 9f dd 2f 8d 1e 0e 47 29 6c aa 54 ea 1a 18 76 5d 5a b2 5a da 8c 93 0e 8b 95 b6 5c 94 30 3d 2e | .../...G)l.T...v]Z.Z.......\.0=. |
0fe0 | 51 11 1a 55 77 a2 43 09 07 3c 2c d0 29 f0 50 27 a1 6e e1 44 87 33 52 5a 7e 5e c2 c1 0c 27 ee de | Q..Uw.C..<,.).P'.n.D.3RZ~^...'.. |
1000 | fe 41 5c 7a c5 c6 73 95 16 57 cb 20 3f 86 a1 51 61 53 a1 51 c5 66 8b eb 3f e1 74 2f 56 af f9 87 |
@media only all and (prefers-color-scheme: dark) {
.highlight .hll { background-color: #49483e }
.highlight .c { color: #75715e } /* Comment */
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
.highlight .k { color: #66d9ef } /* Keyword */
.highlight .l { color: #ae81ff } /* Literal */
.highlight .n { color: #f8f8f2 } /* Name */
.highlight .o { color: #f92672 } /* Operator */
.highlight .p { color: #f8f8f2 } /* Punctuation */
.highlight .ch { color: #75715e } /* Comment.Hashbang */
.highlight .cm { color: #75715e } /* Comment.Multiline */
.highlight .cp { color: #75715e } /* Comment.Preproc */
.highlight .cpf { color: #75715e } /* Comment.PreprocFile */
.highlight .c1 { color: #75715e } /* Comment.Single */
.highlight .cs { color: #75715e } /* Comment.Special */
.highlight .gd { color: #f92672 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #75715e } /* Generic.Subheading */
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
.highlight .kt { color: #66d9ef } /* Keyword.Type */
.highlight .ld { color: #e6db74 } /* Literal.Date */
.highlight .m { color: #ae81ff } /* Literal.Number */
.highlight .s { color: #e6db74 } /* Literal.String */
.highlight .na { color: #a6e22e } /* Name.Attribute */
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
.highlight .nc { color: #a6e22e } /* Name.Class */
.highlight .no { color: #66d9ef } /* Name.Constant */
.highlight .nd { color: #a6e22e } /* Name.Decorator */
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
.highlight .ne { color: #a6e22e } /* Name.Exception */
.highlight .nf { color: #a6e22e } /* Name.Function */
.highlight .nl { color: #f8f8f2 } /* Name.Label */
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
.highlight .nx { color: #a6e22e } /* Name.Other */
.highlight .py { color: #f8f8f2 } /* Name.Property */
.highlight .nt { color: #f92672 } /* Name.Tag */
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
.highlight .ow { color: #f92672 } /* Operator.Word */
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
.highlight .sa { color: #e6db74 } /* Literal.String.Affix */
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #a6e22e } /* Name.Function.Magic */
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
}
@media (prefers-color-scheme: light) {
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
}
{% set memcached_servers = [] %}
{% for host in haproxy_hosts.values() %}
{% set _ = memcached_servers.append('%s:11211'% host) %}
{% endfor %}
{% set memcached_servers = memcached_servers|join(',') %}
[DEFAULT]
bind_ip = {{ internal_ip }}
bind_port = 8080
# bind_timeout = 30
# backlog = 4096
swift_dir = /etc/swift
user = swift
# Enables exposing configuration settings via HTTP GET /info.
# expose_info = true
# Key to use for admin calls that are HMAC signed. Default is empty,
# which will disable admin calls to /info.
# admin_key = secret_admin_key
#
# Allows the ability to withhold sections from showing up in the public calls
# to /info. You can withhold subsections by separating the dict level with a
# ".". The following would cause the sections 'container_quotas' and 'tempurl'
# to not be listed, and the key max_failed_deletes would be removed from
# bulk_delete. Default value is 'swift.valid_api_versions' which allows all
# registered features to be listed via HTTP GET /info except
# swift.valid_api_versions information
# disallowed_sections = swift.valid_api_versions, container_quotas, tempurl
# Use an integer to override the number of pre-forked processes that will
# accept connections. Should default to the number of effective cpu
# cores in the system. It's worth noting that individual workers will
# use many eventlet co-routines to service multiple concurrent requests.
# workers = auto
#
# Maximum concurrent requests per worker
# max_clients = 1024
#
# Set the following two lines to enable SSL. This is for testing only.
# cert_file = /etc/swift/proxy.crt
# key_file = /etc/swift/proxy.key
#
# expiring_objects_container_divisor = 86400
# expiring_objects_account_name = expiring_objects
#
# You can specify default log routing here if you want:
# log_name = swift
# log_facility = LOG_LOCAL0
# log_level = INFO
# log_headers = false
# log_address = /dev/log
# The following caps the length of log lines to the value given; no limit if
# set to 0, the default.
# log_max_line_length = 0
#
# This optional suffix (default is empty) that would be appended to the swift transaction
# id allows one to easily figure out from which cluster that X-Trans-Id belongs to.
# This is very useful when one is managing more than one swift cluster.
# trans_id_suffix =
#
# comma separated list of functions to call to setup custom log handlers.
# functions get passed: conf, name, log_to_console, log_route, fmt, logger,
# adapted_logger
# log_custom_handlers =
#
# If set, log_udp_host will override log_address
# log_udp_host =
# log_udp_port = 514
#
# You can enable StatsD logging here:
# log_statsd_host =
# log_statsd_port = 8125
# log_statsd_default_sample_rate = 1.0
# log_statsd_sample_rate_factor = 1.0
# log_statsd_metric_prefix =
#
# Use a comma separated list of full url (http://foo.bar:1234,https://foo.bar)
# cors_allow_origin =
# strict_cors_mode = True
#
# client_timeout = 60
# eventlet_debug = false
[pipeline:main]
# This sample pipeline uses tempauth and is used for SAIO dev work and
# testing. See below for a pipeline using keystone.
#pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk tempurl ratelimit tempauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging moon proxy-server
# The following pipeline shows keystone integration. Comment out the one
# above and uncomment this one. Additional steps for integrating keystone are
# covered further below in the filter sections for authtoken and keystoneauth.
#pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk tempurl ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server
[app:proxy-server]
use = egg:swift#proxy
account_autocreate = True
# You can override the default log routing for this app here:
# set log_name = proxy-server
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_address = /dev/log
#
# log_handoffs = true
# recheck_account_existence = 60
# recheck_container_existence = 60
# object_chunk_size = 65536
# client_chunk_size = 65536
#
# How long the proxy server will wait on responses from the a/c/o servers.
# node_timeout = 10
#
# How long the proxy server will wait for an initial response and to read a
# chunk of data from the object servers while serving GET / HEAD requests.
# Timeouts from these requests can be recovered from so setting this to
# something lower than node_timeout would provide quicker error recovery
# while allowing for a longer timeout for non-recoverable requests (PUTs).
# Defaults to node_timeout, should be overriden if node_timeout is set to a
# high number to prevent client timeouts from firing before the proxy server
# has a chance to retry.
# recoverable_node_timeout = node_timeout
#
# conn_timeout = 0.5
#
# How long to wait for requests to finish after a quorum has been established.
# post_quorum_timeout = 0.5
#
# How long without an error before a node's error count is reset. This will
# also be how long before a node is reenabled after suppression is triggered.
# error_suppression_interval = 60
#
# How many errors can accumulate before a node is temporarily ignored.
# error_suppression_limit = 10
#
# If set to 'true' any authorized user may create and delete accounts; if
# 'false' no one, even authorized, can.
# allow_account_management = false
#
# Set object_post_as_copy = false to turn on fast posts where only the metadata
# changes are stored anew and the original data file is kept in place. This
# makes for quicker posts.
# object_post_as_copy = true
#
# If set to 'true' authorized accounts that do not yet exist within the Swift
# cluster will be automatically created.
# account_autocreate = false
#
# If set to a positive value, trying to create a container when the account
# already has at least this maximum containers will result in a 403 Forbidden.
# Note: This is a soft limit, meaning a user might exceed the cap for
# recheck_account_existence before the 403s kick in.
# max_containers_per_account = 0
#
# This is a comma separated list of account hashes that ignore the
# max_containers_per_account cap.
# max_containers_whitelist =
#
# Comma separated list of Host headers to which the proxy will deny requests.
# deny_host_headers =
#
# Prefix used when automatically creating accounts.
# auto_create_account_prefix = .
#
# Depth of the proxy put queue.
# put_queue_depth = 10
#
# Storage nodes can be chosen at random (shuffle), by using timing
# measurements (timing), or by using an explicit match (affinity).
# Using timing measurements may allow for lower overall latency, while
# using affinity allows for finer control. In both the timing and
# affinity cases, equally-sorting nodes are still randomly chosen to
# spread load.
# The valid values for sorting_method are "affinity", "shuffle", or "timing".
# sorting_method = shuffle
#
# If the "timing" sorting_method is used, the timings will only be valid for
# the number of seconds configured by timing_expiry.
# timing_expiry = 300
#
# By default on a GET/HEAD swift will connect to a storage node one at a time
# in a single thread. There is smarts in the order they are hit however. If you
# turn on concurrent_gets below, then replica count threads will be used.
# With addition of the concurrency_timeout option this will allow swift to send
# out GET/HEAD requests to the storage nodes concurrently and answer with the
# first to respond. With an EC policy the parameter only affects HEAD requests.
# concurrent_gets = off
#
# This parameter controls how long to wait before firing off the next
# concurrent_get thread. A value of 0 would be fully concurrent, any other
# number will stagger the firing of the threads. This number should be
# between 0 and node_timeout. The default is what ever you set for the
# conn_timeout parameter.
# concurrency_timeout = 0.5
#
# Set to the number of nodes to contact for a normal request. You can use
# '* replicas' at the end to have it use the number given times the number of
# replicas for the ring being used for the request.
# request_node_count = 2 * replicas
#
# Which backend servers to prefer on reads. Format is r<N> for region
# N or r<N>z<M> for region N, zone M. The value after the equals is
# the priority; lower numbers are higher priority.
#
# Example: first read from region 1 zone 1, then region 1 zone 2, then
# anything in region 2, then everything else:
# read_affinity = r1z1=100, r1z2=200, r2=300
# Default is empty, meaning no preference.
# read_affinity =
#
# Which backend servers to prefer on writes. Format is r<N> for region
# N or r<N>z<M> for region N, zone M. If this is set, then when
# handling an object PUT request, some number (see setting
# write_affinity_node_count) of local backend servers will be tried
# before any nonlocal ones.
#
# Example: try to write to regions 1 and 2 before writing to any other
# nodes:
# write_affinity = r1, r2
# Default is empty, meaning no preference.
# write_affinity =
#
# The number of local (as governed by the write_affinity setting)
# nodes to attempt to contact first, before any non-local ones. You
# can use '* replicas' at the end to have it use the number given
# times the number of replicas for the ring being used for the
# request.
# write_affinity_node_count = 2 * replicas
#
# These are the headers whose values will only be shown to swift_owners. The
# exact definition of a swift_owner is up to the auth system in use, but
# usually indicates administrative responsibilities.
# swift_owner_headers = x-container-read, x-container-write, x-container-sync-key, x-container-sync-to, x-account-meta-temp-url-key, x-account-meta-temp-url-key-2, x-container-meta-temp-url-key, x-container-meta-temp-url-key-2, x-account-access-control
[filter:tempauth]
use = egg:swift#tempauth
# You can override the default log routing for this filter here:
# set log_name = tempauth
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
#
# The reseller prefix will verify a token begins with this prefix before even
# attempting to validate it. Also, with authorization, only Swift storage
# accounts with this prefix will be authorized by this middleware. Useful if
# multiple auth systems are in use for one Swift cluster.
# The reseller_prefix may contain a comma separated list of items. The first
# item is used for the token as mentioned above. If second and subsequent
# items exist, the middleware will handle authorization for an account with
# that prefix. For example, for prefixes "AUTH, SERVICE", a path of
# /v1/SERVICE_account is handled the same as /v1/AUTH_account. If an empty
# (blank) reseller prefix is required, it must be first in the list. Two
# single quote characters indicates an empty (blank) reseller prefix.
# reseller_prefix = AUTH
#
# The require_group parameter names a group that must be presented by
# either X-Auth-Token or X-Service-Token. Usually this parameter is
# used only with multiple reseller prefixes (e.g., SERVICE_require_group=blah).
# By default, no group is needed. Do not use .admin.
# require_group =
# The auth prefix will cause requests beginning with this prefix to be routed
# to the auth subsystem, for granting tokens, etc.
# auth_prefix = /auth/
# token_life = 86400
#
# This allows middleware higher in the WSGI pipeline to override auth
# processing, useful for middleware such as tempurl and formpost. If you know
# you're not going to use such middleware and you want a bit of extra security,
# you can set this to false.
# allow_overrides = true
#
# This specifies what scheme to return with storage urls:
# http, https, or default (chooses based on what the server is running as)
# This can be useful with an SSL load balancer in front of a non-SSL server.
# storage_url_scheme = default
#
# Lastly, you need to list all the accounts/users you want here. The format is:
# user_<account>_<user> = <key> [group] [group] [...] [storage_url]
# or if you want underscores in <account> or <user>, you can base64 encode them
# (with no equal signs) and use this format:
# user64_<account_b64>_<user_b64> = <key> [group] [group] [...] [storage_url]
# There are special groups of:
# .reseller_admin = can do anything to any account for this auth
# .admin = can do anything within the account
# If neither of these groups are specified, the user can only access containers
# that have been explicitly allowed for them by a .admin or .reseller_admin.
# The trailing optional storage_url allows you to specify an alternate url to
# hand back to the user upon authentication. If not specified, this defaults to
# $HOST/v1/<reseller_prefix>_<account> where $HOST will do its best to resolve
# to what the requester would need to use to reach this host.
# Here are example entries, required for running the tests:
user_admin_admin = admin .admin .reseller_admin
user_test_tester = testing .admin
user_test2_tester2 = testing2 .admin
user_test_tester3 = testing3
user_test5_tester5 = testing5 service
# To enable Keystone authentication you need to have the auth token
# middleware first to be configured. Here is an example below, please
# refer to the keystone's documentation for details about the
# different settings.
#
# You'll also need to have the keystoneauth middleware enabled and have it in
# your main pipeline, as show in the sample pipeline at the top of this file.
#
# Following parameters are known to work with keystonemiddleware v2.3.0
# (above v2.0.0), but checking the latest information in the wiki page[1]
# is recommended.
# 1. http://docs.openstack.org/developer/keystonemiddleware/middlewarearchitecture.html#configuration
#
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
auth_uri = http://{{ internal_vip.ip }}:5000
auth_url = http://{{ internal_vip.ip }}:35357
identity_uri = http://{{ internal_vip.ip }}:35357
memcached_servers = {{ memcached_servers }}
#auth_plugin = password
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = {{ CINDER_PASS }}
delay_auth_decision = True
admin_user=admin
admin_password={{ ADMIN_PASS }}
admin_token={{ ADMIN_TOKEN }}
#
# delay_auth_decision defaults to False, but leaving it as false will
# prevent other auth systems, staticweb, tempurl, formpost, and ACLs from
# working. This value must be explicitly set to True.
# delay_auth_decision = False
#
# cache = swift.cache
# include_service_catalog = False
#
[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin,user
# The reseller_prefix option lists account namespaces that this middleware is
# responsible for. The prefix is placed before the Keystone project id.
# For example, for project 12345678, and prefix AUTH, the account is
# named AUTH_12345678 (i.e., path is /v1/AUTH_12345678/...).
# Several prefixes are allowed by specifying a comma-separated list
# as in: "reseller_prefix = AUTH, SERVICE". The empty string indicates a
# single blank/empty prefix. If an empty prefix is required in a list of
# prefixes, a value of '' (two single quote characters) indicates a
# blank/empty prefix. Except for the blank/empty prefix, an underscore ('_')
# character is appended to the value unless already present.
# reseller_prefix = AUTH
#
# The user must have at least one role named by operator_roles on a
# project in order to create, delete and modify containers and objects
# and to set and read privileged headers such as ACLs.
# If there are several reseller prefix items, you can prefix the
# parameter so it applies only to those accounts (for example
# the parameter SERVICE_operator_roles applies to the /v1/SERVICE_<project>
# path). If you omit the prefix, the option applies to all reseller
# prefix items. For the blank/empty prefix, prefix with '' (do not put
# underscore after the two single quote characters).
# operator_roles = admin, swiftoperator
#
# The reseller admin role has the ability to create and delete accounts
# reseller_admin_role = ResellerAdmin
#
# This allows middleware higher in the WSGI pipeline to override auth
# processing, useful for middleware such as tempurl and formpost. If you know
# you're not going to use such middleware and you want a bit of extra security,
# you can set this to false.
# allow_overrides = true
#
# If the service_roles parameter is present, an X-Service-Token must be
# present in the request that when validated, grants at least one role listed
# in the parameter. The X-Service-Token may be scoped to any project.
# If there are several reseller prefix items, you can prefix the
# parameter so it applies only to those accounts (for example
# the parameter SERVICE_service_roles applies to the /v1/SERVICE_<project>
# path). If you omit the prefix, the option applies to all reseller
# prefix items. For the blank/empty prefix, prefix with '' (do not put
# underscore after the two single quote characters).
# By default, no service_roles are required.
# service_roles =
#
# For backwards compatibility, keystoneauth will match names in cross-tenant
# access control lists (ACLs) when both the requesting user and the tenant
# are in the default domain i.e the domain to which existing tenants are
# migrated. The default_domain_id value configured here should be the same as
# the value used during migration of tenants to keystone domains.
# default_domain_id = default
#
# For a new installation, or an installation in which keystone projects may
# move between domains, you should disable backwards compatible name matching
# in ACLs by setting allow_names_in_acls to false:
# allow_names_in_acls = true
[filter:healthcheck]
use = egg:swift#healthcheck
# An optional filesystem path, which if present, will cause the healthcheck
# URL to return "503 Service Unavailable" with a body of "DISABLED BY FILE".
# This facility may be used to temporarily remove a Swift node from a load
# balancer pool during maintenance or upgrade (remove the file to allow the
# node back into the load balancer pool).
# disable_path =
[filter:cache]
use = egg:swift#memcache
memcache_servers = {{ memcached_servers }}
# You can override the default log routing for this filter here:
# set log_name = cache
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
#
# If not set here, the value for memcache_servers will be read from
# memcache.conf (see memcache.conf-sample) or lacking that file, it will
# default to the value below. You can specify multiple servers separated with
# commas, as in: 10.1.2.3:11211,10.1.2.4:11211 (IPv6 addresses must
# follow rfc3986 section-3.2.2, i.e. [::1]:11211)
# memcache_servers = 127.0.0.1:11211
#
# Sets how memcache values are serialized and deserialized:
# 0 = older, insecure pickle serialization
# 1 = json serialization but pickles can still be read (still insecure)
# 2 = json serialization only (secure and the default)
# If not set here, the value for memcache_serialization_support will be read
# from /etc/swift/memcache.conf (see memcache.conf-sample).
# To avoid an instant full cache flush, existing installations should
# upgrade with 0, then set to 1 and reload, then after some time (24 hours)
# set to 2 and reload.
# In the future, the ability to use pickle serialization will be removed.
# memcache_serialization_support = 2
#
# Sets the maximum number of connections to each memcached server per worker
# memcache_max_connections = 2
#
# More options documented in memcache.conf-sample
[filter:ratelimit]
use = egg:swift#ratelimit
# You can override the default log routing for this filter here:
# set log_name = ratelimit
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
#
# clock_accuracy should represent how accurate the proxy servers' system clocks
# are with each other. 1000 means that all the proxies' clock are accurate to
# each other within 1 millisecond. No ratelimit should be higher than the
# clock accuracy.
# clock_accuracy = 1000
#
# max_sleep_time_seconds = 60
#
# log_sleep_time_seconds of 0 means disabled
# log_sleep_time_seconds = 0
#
# allows for slow rates (e.g. running up to 5 sec's behind) to catch up.
# rate_buffer_seconds = 5
#
# account_ratelimit of 0 means disabled
# account_ratelimit = 0
# DEPRECATED- these will continue to work but will be replaced
# by the X-Account-Sysmeta-Global-Write-Ratelimit flag.
# Please see ratelimiting docs for details.
# these are comma separated lists of account names
# account_whitelist = a,b
# account_blacklist = c,d
# with container_limit_x = r
# for containers of size x limit write requests per second to r. The container
# rate will be linearly interpolated from the values given. With the values
# below, a container of size 5 will get a rate of 75.
# container_ratelimit_0 = 100
# container_ratelimit_10 = 50
# container_ratelimit_50 = 20
# Similarly to the above container-level write limits, the following will limit
# container GET (listing) requests.
# container_listing_ratelimit_0 = 100
# container_listing_ratelimit_10 = 50
# container_listing_ratelimit_50 = 20
[filter:domain_remap]
use = egg:swift#domain_remap
# You can override the default log routing for this filter here:
# set log_name = domain_remap
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
#
# storage_domain = example.com
# path_root = v1
# Browsers can convert a host header to lowercase, so check that reseller
# prefix on the account is the correct case. This is done by comparing the
# items in the reseller_prefixes config option to the found prefix. If they
# match except for case, the item from reseller_prefixes will be used
# instead of the found reseller prefix. When none match, the default reseller
# prefix is used. When no default reseller prefix is configured, any request
# with an account prefix not in that list will be ignored by this middleware.
# reseller_prefixes = AUTH
# default_reseller_prefix =
[filter:catch_errors]
use = egg:swift#catch_errors
# You can override the default log routing for this filter here:
# set log_name = catch_errors
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
[filter:cname_lookup]
# Note: this middleware requires python-dnspython
use = egg:swift#cname_lookup
# You can override the default log routing for this filter here:
# set log_name = cname_lookup
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
#
# Specify the storage_domain that match your cloud, multiple domains
# can be specified separated by a comma
# storage_domain = example.com
#
# lookup_depth = 1
# Note: Put staticweb just after your auth filter(s) in the pipeline
[filter:staticweb]
use = egg:swift#staticweb
# You can override the default log routing for this filter here:
# set log_name = staticweb
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
# Note: Put tempurl before dlo, slo and your auth filter(s) in the pipeline
[filter:tempurl]
use = egg:swift#tempurl
# The methods allowed with Temp URLs.
# methods = GET HEAD PUT POST DELETE
#
# The headers to remove from incoming requests. Simply a whitespace delimited
# list of header names and names can optionally end with '*' to indicate a
# prefix match. incoming_allow_headers is a list of exceptions to these
# removals.
# incoming_remove_headers = x-timestamp
#
# The headers allowed as exceptions to incoming_remove_headers. Simply a
# whitespace delimited list of header names and names can optionally end with
# '*' to indicate a prefix match.
# incoming_allow_headers =
#
# The headers to remove from outgoing responses. Simply a whitespace delimited
# list of header names and names can optionally end with '*' to indicate a
# prefix match. outgoing_allow_headers is a list of exceptions to these
# removals.
# outgoing_remove_headers = x-object-meta-*
#
# The headers allowed as exceptions to outgoing_remove_headers. Simply a
# whitespace delimited list of header names and names can optionally end with
# '*' to indicate a prefix match.
# outgoing_allow_headers = x-object-meta-public-*
# Note: Put formpost just before your auth filter(s) in the pipeline
[filter:formpost]
use = egg:swift#formpost
# Note: Just needs to be placed before the proxy-server in the pipeline.
[filter:name_check]
use = egg:swift#name_check
# forbidden_chars = '"`<>
# maximum_length = 255
# forbidden_regexp = /\./|/\.\./|/\.$|/\.\.$
[filter:list-endpoints]
use = egg:swift#list_endpoints
# list_endpoints_path = /endpoints/
[filter:proxy-logging]
use = egg:swift#proxy_logging
# If not set, logging directives from [DEFAULT] without "access_" will be used
# access_log_name = swift
# access_log_facility = LOG_LOCAL0
# access_log_level = INFO
# access_log_address = /dev/log
#
# If set, access_log_udp_host will override access_log_address
# access_log_udp_host =
# access_log_udp_port = 514
#
# You can use log_statsd_* from [DEFAULT] or override them here:
# access_log_statsd_host =
# access_log_statsd_port = 8125
# access_log_statsd_default_sample_rate = 1.0
# access_log_statsd_sample_rate_factor = 1.0
# access_log_statsd_metric_prefix =
# access_log_headers = false
#
# If access_log_headers is True and access_log_headers_only is set only
# these headers are logged. Multiple headers can be defined as comma separated
# list like this: access_log_headers_only = Host, X-Object-Meta-Mtime
# access_log_headers_only =
#
# By default, the X-Auth-Token is logged. To obscure the value,
# set reveal_sensitive_prefix to the number of characters to log.
# For example, if set to 12, only the first 12 characters of the
# token appear in the log. An unauthorized access of the log file
# won't allow unauthorized usage of the token. However, the first
# 12 or so characters is unique enough that you can trace/debug
# token usage. Set to 0 to suppress the token completely (replaced
# by '...' in the log).
# Note: reveal_sensitive_prefix will not affect the value
# logged with access_log_headers=True.
# reveal_sensitive_prefix = 16
#
# What HTTP methods are allowed for StatsD logging (comma-sep); request methods
# not in this list will have "BAD_METHOD" for the <verb> portion of the metric.
# log_statsd_valid_http_methods = GET,HEAD,POST,PUT,DELETE,COPY,OPTIONS
#
# Note: The double proxy-logging in the pipeline is not a mistake. The
# left-most proxy-logging is there to log requests that were handled in
# middleware and never made it through to the right-most middleware (and
# proxy server). Double logging is prevented for normal requests. See
# proxy-logging docs.
# Note: Put before both ratelimit and auth in the pipeline.
[filter:bulk]
use = egg:swift#bulk
# max_containers_per_extraction = 10000
# max_failed_extractions = 1000
# max_deletes_per_request = 10000
# max_failed_deletes = 1000
# In order to keep a connection active during a potentially long bulk request,
# Swift may return whitespace prepended to the actual response body. This
# whitespace will be yielded no more than every yield_frequency seconds.
# yield_frequency = 10
# Note: The following parameter is used during a bulk delete of objects and
# their container. This would frequently fail because it is very likely
# that all replicated objects have not been deleted by the time the middleware got a
# successful response. It can be configured the number of retries. And the
# number of seconds to wait between each retry will be 1.5**retry
# delete_container_retry_count = 0
# Note: Put after auth and staticweb in the pipeline.
[filter:slo]
use = egg:swift#slo
# max_manifest_segments = 1000
# max_manifest_size = 2097152
#
# Rate limiting applies only to segments smaller than this size (bytes).
# rate_limit_under_size = 1048576
#
# Start rate-limiting SLO segment serving after the Nth small segment of a
# segmented object.
# rate_limit_after_segment = 10
#
# Once segment rate-limiting kicks in for an object, limit segments served
# to N per second. 0 means no rate-limiting.
# rate_limit_segments_per_sec = 1
#
# Time limit on GET requests (seconds)
# max_get_time = 86400
# Note: Put after auth and staticweb in the pipeline.
# If you don't put it in the pipeline, it will be inserted for you.
[filter:dlo]
use = egg:swift#dlo
# Start rate-limiting DLO segment serving after the Nth segment of a
# segmented object.
# rate_limit_after_segment = 10
#
# Once segment rate-limiting kicks in for an object, limit segments served
# to N per second. 0 means no rate-limiting.
# rate_limit_segments_per_sec = 1
#
# Time limit on GET requests (seconds)
# max_get_time = 86400
# Note: Put after auth in the pipeline.
[filter:container-quotas]
use = egg:swift#container_quotas
# Note: Put after auth in the pipeline.
[filter:account-quotas]
use = egg:swift#account_quotas
[filter:gatekeeper]
use = egg:swift#gatekeeper
# Set this to false if you want to allow clients to set arbitrary X-Timestamps
# on uploaded objects. This may be used to preserve timestamps when migrating
# from a previous storage system, but risks allowing users to upload
# difficult-to-delete data.
# shunt_inbound_x_timestamp = true
#
# You can override the default log routing for this filter here:
# set log_name = gatekeeper
# set log_facility = LOG_LOCAL0
# set log_level = INFO
# set log_headers = false
# set log_address = /dev/log
[filter:container_sync]
use = egg:swift#container_sync
# Set this to false if you want to disallow any full url values to be set for
# any new X-Container-Sync-To headers. This will keep any new full urls from
# coming in, but won't change any existing values already in the cluster.
# Updating those will have to be done manually, as knowing what the true realm
# endpoint should be cannot always be guessed.
# allow_full_urls = true
# Set this to specify this clusters //realm/cluster as "current" in /info
# current = //REALM/CLUSTER
# Note: Put it at the beginning of the pipeline to profile all middleware. But
# it is safer to put this after catch_errors, gatekeeper and healthcheck.
[filter:xprofile]
use = egg:swift#xprofile
# This option enable you to switch profilers which should inherit from python
# standard profiler. Currently the supported value can be 'cProfile',
# 'eventlet.green.profile' etc.
# profile_module = eventlet.green.profile
#
# This prefix will be used to combine process ID and timestamp to name the
# profile data file. Make sure the executing user has permission to write
# into this path (missing path segments will be created, if necessary).
# If you enable profiling in more than one type of daemon, you must override
# it with an unique value like: /var/log/swift/profile/proxy.profile
# log_filename_prefix = /tmp/log/swift/profile/default.profile
#
# the profile data will be dumped to local disk based on above naming rule
# in this interval.
# dump_interval = 5.0
#
# Be careful, this option will enable profiler to dump data into the file with
# time stamp which means there will be lots of files piled up in the directory.
# dump_timestamp = false
#
# This is the path of the URL to access the mini web UI.
# path = /__profile__
#
# Clear the data when the wsgi server shutdown.
# flush_at_shutdown = false
#
# unwind the iterator of applications
# unwind = false
# Note: Put after slo, dlo in the pipeline.
# If you don't put it in the pipeline, it will be inserted automatically.
[filter:versioned_writes]
use = egg:swift#versioned_writes
# Enables using versioned writes middleware and exposing configuration
# settings via HTTP GET /info.
# WARNING: Setting this option bypasses the "allow_versions" option
# in the container configuration file, which will be eventually
# deprecated. See documentation for more details.
# allow_versioned_writes = false
[filter:moon]
paste.filter_factory = keystonemiddleware.moon_agent:filter_factory
authz_login=admin
authz_password={{ ADMIN_PASS }}
auth_host = {{ internal_vip.ip }}
logfile=/var/log/moon/keystonemiddleware.log