mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-30 21:58:19 +01:00
Compare commits
11410 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
952be24365 | ||
|
|
b57a47475d | ||
|
|
4f05cf55a5 | ||
|
|
5dcf8502af | ||
|
|
7a21541ed6 | ||
|
|
ae4ea3443e | ||
|
|
f5dd7d853a | ||
|
|
a1e42dad10 | ||
|
|
6e4b4a553b | ||
|
|
7a410dfd00 | ||
|
|
6fb980349f | ||
|
|
8e251ac33c | ||
|
|
35bcc2ce9d | ||
|
|
69215c411b | ||
|
|
a08b5793f6 | ||
|
|
252bf03525 | ||
|
|
b9b9bb134f | ||
|
|
68966db23d | ||
|
|
9aa7444bf9 | ||
|
|
b0541be107 | ||
|
|
3d1f668235 | ||
|
|
940c947d3f | ||
|
|
c7dd4206c8 | ||
|
|
79bf12a8fe | ||
|
|
2dfbd72f10 | ||
|
|
487827c776 | ||
|
|
6939bf8aed | ||
|
|
e4cb0c3cc2 | ||
|
|
cf2f39a0a8 | ||
|
|
b7cfb2f7d9 | ||
|
|
39cb9c32d6 | ||
|
|
75b71890a4 | ||
|
|
2ffa6d0188 | ||
|
|
026386db50 | ||
|
|
b5125e512f | ||
|
|
a8a36c0a8f | ||
|
|
99ab054ea0 | ||
|
|
90ab4b3c86 | ||
|
|
bb6b4d01c1 | ||
|
|
2d1457b94b | ||
|
|
9d851924c8 | ||
|
|
9be5918c83 | ||
|
|
6db6616892 | ||
|
|
004daca862 | ||
|
|
559f65f6b2 | ||
|
|
c38884fa11 | ||
|
|
7848beedce | ||
|
|
296166da95 | ||
|
|
679cc8fdda | ||
|
|
0cdc26e013 | ||
|
|
2503568875 | ||
|
|
78966e12a9 | ||
|
|
f962fb3b53 | ||
|
|
2544e2bf18 | ||
|
|
06f2c6f867 | ||
|
|
272d2c54d4 | ||
|
|
cb93abb0f4 | ||
|
|
316d991b33 | ||
|
|
46f734eba2 | ||
|
|
671a56100a | ||
|
|
dfcfbe240d | ||
|
|
b040fdcf2c | ||
|
|
8525f994c0 | ||
|
|
eb9a804914 | ||
|
|
210d7bb573 | ||
|
|
dc85476b9e | ||
|
|
1854a6b76b | ||
|
|
aebf3288d1 | ||
|
|
065a40dfb3 | ||
|
|
83536fbb23 | ||
|
|
420090dc6c | ||
|
|
4ab0eb570c | ||
|
|
2a4e3dd09f | ||
|
|
0dbfbf6941 | ||
|
|
d515530277 | ||
|
|
4343e0566b | ||
|
|
8555269f7e | ||
|
|
f42a2ac10c | ||
|
|
4ea3a29c0e | ||
|
|
29877c9abe | ||
|
|
480f83c42d | ||
|
|
faf89350ac | ||
|
|
d9c3ce935f | ||
|
|
8d8f57e8b8 | ||
|
|
0a3be0b7ea | ||
|
|
00ebdfe0df | ||
|
|
d79fa131bb | ||
|
|
be2b24a155 | ||
|
|
03b341dbfd | ||
|
|
ca5e69897d | ||
|
|
3090dd4934 | ||
|
|
1f1d1ee502 | ||
|
|
1c2cf11f47 | ||
|
|
08961e751d | ||
|
|
88bf82be05 | ||
|
|
506884bc4d | ||
|
|
646fa341ab | ||
|
|
d73f7b1943 | ||
|
|
a75e8416a4 | ||
|
|
f743f2cfb8 | ||
|
|
7d7e8127f5 | ||
|
|
3c0a3ca703 | ||
|
|
45062697c5 | ||
|
|
66e4e31209 | ||
|
|
c86cfe3cbf | ||
|
|
28e112743f | ||
|
|
229007082b | ||
|
|
4004966b16 | ||
|
|
fe95cb434a | ||
|
|
5709bc3b2b | ||
|
|
af06510921 | ||
|
|
b4acbb5e16 | ||
|
|
b96e437e2b | ||
|
|
16e2283d19 | ||
|
|
c46536f469 | ||
|
|
0457520f51 | ||
|
|
44f8a777df | ||
|
|
9450ce4c3a | ||
|
|
1c9a8ec6bd | ||
|
|
8f5005efd5 | ||
|
|
e61795d5c6 | ||
|
|
892c10b1f0 | ||
|
|
752e26c7de | ||
|
|
ea107b6b86 | ||
|
|
b9b9c065cc | ||
|
|
b583770765 | ||
|
|
37d6f6abca | ||
|
|
be3f48c677 | ||
|
|
5de9d3f15f | ||
|
|
8593715149 | ||
|
|
40afe6cf36 | ||
|
|
9fd07b594c | ||
|
|
dc7411e4c5 | ||
|
|
315c4bb1ac | ||
|
|
1ff1b4dc89 | ||
|
|
a332adf962 | ||
|
|
856cc0f885 | ||
|
|
89d8f7aa70 | ||
|
|
4d2ef0a8b5 | ||
|
|
23b3f72dee | ||
|
|
ff59845821 | ||
|
|
914588f55d | ||
|
|
72e1e8fab1 | ||
|
|
8b01c30c51 | ||
|
|
dcdb4d27ec | ||
|
|
9b1406a1a7 | ||
|
|
545769ad88 | ||
|
|
16bcb1dbb0 | ||
|
|
5dce5563ab | ||
|
|
4e8a3e0a6f | ||
|
|
646d52d498 | ||
|
|
cd5012bd59 | ||
|
|
4bb0388118 | ||
|
|
f255fe507d | ||
|
|
f5a1f83f9f | ||
|
|
36072f17a9 | ||
|
|
f9648d8544 | ||
|
|
2236b86c35 | ||
|
|
0dd319d0c8 | ||
|
|
53615944c5 | ||
|
|
88562d7dcf | ||
|
|
01bb09db67 | ||
|
|
f1c182bb65 | ||
|
|
43ce453938 | ||
|
|
2afce6c94b | ||
|
|
14e23c3d00 | ||
|
|
7f22c6bf12 | ||
|
|
93a862cded | ||
|
|
9cc295827b | ||
|
|
14988fc91c | ||
|
|
31f41855f4 | ||
|
|
caedc8dbe3 | ||
|
|
24ffaf09d4 | ||
|
|
d9f3637e25 | ||
|
|
a807cca29e | ||
|
|
57860f26b7 | ||
|
|
ab916a1819 | ||
|
|
a68831d3a1 | ||
|
|
04a2543e68 | ||
|
|
82c959570d | ||
|
|
354dc4398a | ||
|
|
a698a93938 | ||
|
|
04c5e62d2b | ||
|
|
aa747c3954 | ||
|
|
1937c1fad6 | ||
|
|
bf20611668 | ||
|
|
8f271151a7 | ||
|
|
0bb86f1e7d | ||
|
|
a4c9cbc6dd | ||
|
|
79030ecab2 | ||
|
|
ccb7568462 | ||
|
|
6208e0f7f6 | ||
|
|
e64289e791 | ||
|
|
699b4dfade | ||
|
|
a89cec72a1 | ||
|
|
1cc78be6ca | ||
|
|
7b998cfeb4 | ||
|
|
cbf4b43b35 | ||
|
|
c1ca8d5d8d | ||
|
|
43e6308d90 | ||
|
|
e625a5667c | ||
|
|
e284cd7e54 | ||
|
|
34a960505d | ||
|
|
b7a9649269 | ||
|
|
83bebc1bd2 | ||
|
|
80376abedf | ||
|
|
9c6c3d3dd4 | ||
|
|
ab0442bd5c | ||
|
|
36f95f7842 | ||
|
|
07f68ae579 | ||
|
|
ca634be7ad | ||
|
|
2a0d76d564 | ||
|
|
0b10131564 | ||
|
|
7c17d2e932 | ||
|
|
cf1b1a83eb | ||
|
|
9d3bb585a2 | ||
|
|
d52c18ce38 | ||
|
|
006c353d46 | ||
|
|
6c53ca8909 | ||
|
|
4f984c0831 | ||
|
|
d9dc6cec3a | ||
|
|
90146941b5 | ||
|
|
9d0457fe1a | ||
|
|
2aa51d0d94 | ||
|
|
7158360dfa | ||
|
|
c89193d331 | ||
|
|
eeb069048f | ||
|
|
3e12fbe367 | ||
|
|
4b2922312a | ||
|
|
0276f29067 | ||
|
|
1d52627f71 | ||
|
|
bba4fe437c | ||
|
|
0ab3f979e0 | ||
|
|
5a3d46ac8d | ||
|
|
d075e7a66a | ||
|
|
8b8adfbbbb | ||
|
|
0c2e3ff898 | ||
|
|
83c092f685 | ||
|
|
0f9fe96192 | ||
|
|
1bcfcad9db | ||
|
|
5b5444f414 | ||
|
|
daa8f71bb6 | ||
|
|
9b6e32896d | ||
|
|
154b8236a2 | ||
|
|
7600d7b344 | ||
|
|
149a496011 | ||
|
|
a4acb50edd | ||
|
|
96ea0ac9c7 | ||
|
|
837be4d45f | ||
|
|
0f0cf683c4 | ||
|
|
ec0dbe33d3 | ||
|
|
1c30a44b4e | ||
|
|
252cc37f97 | ||
|
|
f6fcf776a4 | ||
|
|
73348ee435 | ||
|
|
cab7b76220 | ||
|
|
bc7678c716 | ||
|
|
63c33ff4be | ||
|
|
da239aea13 | ||
|
|
53a75a3dd7 | ||
|
|
74fb707ad3 | ||
|
|
ecb4a084cc | ||
|
|
7419a8e112 | ||
|
|
62bdb90f61 | ||
|
|
8143c6e03b | ||
|
|
ffe4558ec5 | ||
|
|
16ee42ac38 | ||
|
|
860be780ad | ||
|
|
5f0922713f | ||
|
|
4355ee6407 | ||
|
|
07ae7c8a6e | ||
|
|
63ba9fb38c | ||
|
|
3307bd200c | ||
|
|
f69d99ea67 | ||
|
|
3754e00ee0 | ||
|
|
dd6d9bf6e3 | ||
|
|
183c7deb81 | ||
|
|
0a60a3fd2a | ||
|
|
6e222f8dce | ||
|
|
b13f9d27d9 | ||
|
|
6b01b1df40 | ||
|
|
34d32374a8 | ||
|
|
c99e565426 | ||
|
|
16d5107b71 | ||
|
|
f1858a7c23 | ||
|
|
290ffd408a | ||
|
|
74d9fe1ea2 | ||
|
|
d131d9b310 | ||
|
|
32fe9fe8ec | ||
|
|
882f29192c | ||
|
|
27e850a68d | ||
|
|
c83b2499f0 | ||
|
|
79c8219202 | ||
|
|
49af70a77d | ||
|
|
7f96c7fee7 | ||
|
|
13315f36d4 | ||
|
|
1056e513b1 | ||
|
|
69b818ed33 | ||
|
|
148278a74a | ||
|
|
48b2ab3587 | ||
|
|
9fa1411d74 | ||
|
|
eff4a3741c | ||
|
|
518fd8cca6 | ||
|
|
bace24b68e | ||
|
|
e7edccd9ba | ||
|
|
70c2b358ad | ||
|
|
9dab3a0d79 | ||
|
|
54622b5f92 | ||
|
|
cdce500d90 | ||
|
|
e11991c7a4 | ||
|
|
6ef333ea68 | ||
|
|
7fc69f3945 | ||
|
|
8aeb31751a | ||
|
|
0b2162569f | ||
|
|
93175888f0 | ||
|
|
e635f0defd | ||
|
|
b4a3156046 | ||
|
|
4f76dcd2ea | ||
|
|
4d686e8162 | ||
|
|
0e873a01b8 | ||
|
|
f7b0e48a09 | ||
|
|
c5f71c0c19 | ||
|
|
36e0bf0490 | ||
|
|
28b939c001 | ||
|
|
55e31ef984 | ||
|
|
85e351146d | ||
|
|
d03bfe89c0 | ||
|
|
c8cbced55e | ||
|
|
928a34674e | ||
|
|
96cf95d176 | ||
|
|
2e9586523f | ||
|
|
a81924ac0f | ||
|
|
74c1f7a176 | ||
|
|
22a0ce3f76 | ||
|
|
43235f143d | ||
|
|
e7851399c6 | ||
|
|
82cd6c5f4c | ||
|
|
210879d380 | ||
|
|
01d9e0afb6 | ||
|
|
2e2ff09822 | ||
|
|
4a88d5e3d9 | ||
|
|
9fb52be85c | ||
|
|
46d1d5a44a | ||
|
|
dee4aec62d | ||
|
|
9f70407c7d | ||
|
|
852026bf7b | ||
|
|
e7f689bc52 | ||
|
|
1349a25e34 | ||
|
|
dbd3c6de24 | ||
|
|
3e77daff01 | ||
|
|
bd88ee7063 | ||
|
|
a9b0b49ef9 | ||
|
|
8b051ea2f3 | ||
|
|
bca9d0fa8a | ||
|
|
9b8ab1c1f7 | ||
|
|
b3bd03a1e9 | ||
|
|
18c863e393 | ||
|
|
d7ca453f26 | ||
|
|
9b9a559e0c | ||
|
|
1f71d3570a | ||
|
|
5a5fcf7d37 | ||
|
|
5869894a48 | ||
|
|
e2f9a3c07a | ||
|
|
b64b19a3f4 | ||
|
|
24a51dd86e | ||
|
|
bf1c191b2e | ||
|
|
b31b086a4d | ||
|
|
6160e03426 | ||
|
|
c9b79ca579 | ||
|
|
fbc7811f56 | ||
|
|
005e3fd692 | ||
|
|
078893e034 | ||
|
|
80fc8db514 | ||
|
|
fa3bedb947 | ||
|
|
c8d9a3b4eb | ||
|
|
311dce0b5f | ||
|
|
23b21246f0 | ||
|
|
92c49669f9 | ||
|
|
2204735e9f | ||
|
|
0df6a5793a | ||
|
|
eeb15ab5d1 | ||
|
|
4208b79514 | ||
|
|
d5be59ef67 | ||
|
|
0ad88e2431 | ||
|
|
c65b2a080f | ||
|
|
0f44f7eb20 | ||
|
|
02db0bcc2e | ||
|
|
e40e9cb406 | ||
|
|
21f4761335 | ||
|
|
39fd64b2ef | ||
|
|
567285d36a | ||
|
|
ff874a24dd | ||
|
|
9b80ec22ba | ||
|
|
cc0c985fec | ||
|
|
4eb5e90ccc | ||
|
|
e71a98499f | ||
|
|
011a936a56 | ||
|
|
556beeee6c | ||
|
|
b7f028fba3 | ||
|
|
2d0ac213c7 | ||
|
|
6b19f15a7b | ||
|
|
57156f0e94 | ||
|
|
4e49f4a434 | ||
|
|
c55c14ea4c | ||
|
|
e1b7a3aeb6 | ||
|
|
2b2c559a37 | ||
|
|
1af3ba9496 | ||
|
|
cb6852bf7a | ||
|
|
259d0e96f2 | ||
|
|
9eeca06115 | ||
|
|
da781b8d28 | ||
|
|
896b19eaa3 | ||
|
|
12bef7623c | ||
|
|
e96cfadd22 | ||
|
|
5f184f2435 | ||
|
|
56a4d0333e | ||
|
|
6794742213 | ||
|
|
a29a07ed26 | ||
|
|
42c80f69e6 | ||
|
|
ca0e7be637 | ||
|
|
42346702a1 | ||
|
|
9909213c0d | ||
|
|
7a38f601de | ||
|
|
abdcfdecf5 | ||
|
|
9d62174e1e | ||
|
|
a96b76a8d1 | ||
|
|
ab69faab87 | ||
|
|
f3826e6235 | ||
|
|
3eba65b5c2 | ||
|
|
683ef30af4 | ||
|
|
46914d9479 | ||
|
|
ea8a0135ad | ||
|
|
25142e037a | ||
|
|
93b912c2da | ||
|
|
4df517e4da | ||
|
|
2c756873aa | ||
|
|
01fa6e28cd | ||
|
|
5036020dc0 | ||
|
|
78ec3a6411 | ||
|
|
24650d9118 | ||
|
|
b14a514b47 | ||
|
|
7aa8434575 | ||
|
|
fbcf4c268b | ||
|
|
a566a56a64 | ||
|
|
cc3b95bdb0 | ||
|
|
2099cd0fdc | ||
|
|
3bdbf67b8f | ||
|
|
20f0464824 | ||
|
|
1952707702 | ||
|
|
9319cffb1c | ||
|
|
261f5e4995 | ||
|
|
8cede0daf8 | ||
|
|
139ef7ef4c | ||
|
|
47f3023401 | ||
|
|
a0f0b29432 | ||
|
|
f86f4f9257 | ||
|
|
3fc7c0edc7 | ||
|
|
528fb21a7e | ||
|
|
6206d226ae | ||
|
|
aabaeec1d7 | ||
|
|
25dc7e234d | ||
|
|
eac7d01977 | ||
|
|
a5bc9d4a2d | ||
|
|
b3efb14176 | ||
|
|
a2f4fce5b3 | ||
|
|
6109bef700 | ||
|
|
72767fb5b7 | ||
|
|
84089ab8c5 | ||
|
|
9a788349a9 | ||
|
|
b7140a0e4a | ||
|
|
d39c796828 | ||
|
|
4a92f6867a | ||
|
|
4355085124 | ||
|
|
5d4ef5e9e5 | ||
|
|
f49e4ee512 | ||
|
|
f867cb3ae0 | ||
|
|
a49fdad5e1 | ||
|
|
1ad029712e | ||
|
|
d87235af2f | ||
|
|
99af126fac | ||
|
|
83cea218b5 | ||
|
|
9eb38ab7b2 | ||
|
|
d3206d9bf9 | ||
|
|
adb9673f09 | ||
|
|
b693123f6e | ||
|
|
e7663b7e39 | ||
|
|
053be952ba | ||
|
|
390619ca99 | ||
|
|
b1130ff9b6 | ||
|
|
89fa546a14 | ||
|
|
c8988bac8a | ||
|
|
55385dd0db | ||
|
|
38a0ed5e24 | ||
|
|
15d80f4e1b | ||
|
|
2fe5592c3c | ||
|
|
8cf0a79dee | ||
|
|
183c5ca667 | ||
|
|
d5c4b1e27c | ||
|
|
2fcdc0ae6a | ||
|
|
12bb0ec1fe | ||
|
|
8b7ee0a0db | ||
|
|
274cd5d56c | ||
|
|
ab3531558a | ||
|
|
dda56f21f3 | ||
|
|
31c909c368 | ||
|
|
164b2a5016 | ||
|
|
7b374e4cf6 | ||
|
|
13625325f5 | ||
|
|
b84ac184c2 | ||
|
|
d5d2431cbd | ||
|
|
c08c7dda50 | ||
|
|
b807198e6d | ||
|
|
9caa7f6b7c | ||
|
|
4452f57f90 | ||
|
|
b167153186 | ||
|
|
197c6a1cbf | ||
|
|
014a5d10d1 | ||
|
|
86d185fe05 | ||
|
|
9ef1fb1e3a | ||
|
|
7ecf3be33c | ||
|
|
a0893c2e8b | ||
|
|
8b040ff930 | ||
|
|
d470848b29 | ||
|
|
59a6b3e71b | ||
|
|
c1c98f9883 | ||
|
|
dd8112c30e | ||
|
|
3c91331e16 | ||
|
|
eef38257b9 | ||
|
|
bb9a125934 | ||
|
|
8de252e34e | ||
|
|
9e305c6181 | ||
|
|
97ed6439ce | ||
|
|
15a615d3a3 | ||
|
|
3528aaee2c | ||
|
|
46d7bf02ac | ||
|
|
6820796c10 | ||
|
|
4a331b560f | ||
|
|
4c9cf9032c | ||
|
|
ada01b39cc | ||
|
|
b41f8755df | ||
|
|
2c07762b7a | ||
|
|
f68a63255b | ||
|
|
278f2b173a | ||
|
|
00714b23a2 | ||
|
|
768d6f624e | ||
|
|
1146aaff89 | ||
|
|
5a4feb7099 | ||
|
|
589d51e028 | ||
|
|
a6fd0ab09a | ||
|
|
08017c51f6 | ||
|
|
9f71cf79e6 | ||
|
|
c26fe266cc | ||
|
|
085cfc58f4 | ||
|
|
63a0ec7a79 | ||
|
|
ccfdc216a5 | ||
|
|
2bf9acfb19 | ||
|
|
74d8baea30 | ||
|
|
f8d40ae824 | ||
|
|
41c92483a0 | ||
|
|
6d6299f0cb | ||
|
|
f44a2ba0ee | ||
|
|
29fbe6e4ee | ||
|
|
94c2a2e56c | ||
|
|
0a2ae90411 | ||
|
|
1b5f926e17 | ||
|
|
13cbb33c98 | ||
|
|
b032742418 | ||
|
|
8a684adf66 | ||
|
|
bca00cd97a | ||
|
|
2883fa14de | ||
|
|
56d2a9aa11 | ||
|
|
53abcc0f5c | ||
|
|
0676ed45c7 | ||
|
|
872b70c2b5 | ||
|
|
2805633b16 | ||
|
|
f245f07fd9 | ||
|
|
e966d1df47 | ||
|
|
e4b2d87ce6 | ||
|
|
b3a347e6fb | ||
|
|
e7d1a43541 | ||
|
|
5ff9483d13 | ||
|
|
ac07b33602 | ||
|
|
8d6c591535 | ||
|
|
6a85c5b3ce | ||
|
|
bd38b50e5e | ||
|
|
eb77c0e920 | ||
|
|
198c004c1d | ||
|
|
730eb2e83b | ||
|
|
cdad50e051 | ||
|
|
3264636b7a | ||
|
|
fbc23424a6 | ||
|
|
6f08c4a4be | ||
|
|
0ac8419005 | ||
|
|
f18f6e2856 | ||
|
|
99b914689a | ||
|
|
b0f6cea4f3 | ||
|
|
bfd8e012dc | ||
|
|
ecd0c56554 | ||
|
|
1be626e5ee | ||
|
|
f36dfe3a11 | ||
|
|
90527b799d | ||
|
|
6e6e8fa2d9 | ||
|
|
e467589730 | ||
|
|
424b336536 | ||
|
|
06dec6a2d9 | ||
|
|
f965608791 | ||
|
|
c4891fe105 | ||
|
|
715592547c | ||
|
|
177668dca5 | ||
|
|
9d709c84e7 | ||
|
|
d2a694a878 | ||
|
|
15590f1f48 | ||
|
|
0330c652bd | ||
|
|
5a6005cdfa | ||
|
|
4eaba7993f | ||
|
|
2840f9d71d | ||
|
|
9946ae2981 | ||
|
|
420ec6791f | ||
|
|
47234f1607 | ||
|
|
b058bd9cea | ||
|
|
5b03636c88 | ||
|
|
be55bb43ad | ||
|
|
293afab730 | ||
|
|
6b622fd9bf | ||
|
|
7280dfacab | ||
|
|
4428a446d0 | ||
|
|
2eedcac383 | ||
|
|
35af1d7b61 | ||
|
|
1b92958870 | ||
|
|
795669113f | ||
|
|
de57446f36 | ||
|
|
3b13cef0c8 | ||
|
|
497f3145fa | ||
|
|
f597b76ddc | ||
|
|
ebaac82560 | ||
|
|
371764fecd | ||
|
|
f67deb0dea | ||
|
|
d3c5f1e744 | ||
|
|
b12551c64b | ||
|
|
9995fad513 | ||
|
|
1d2335d578 | ||
|
|
ad03061edf | ||
|
|
87eabdbffb | ||
|
|
19787dd21d | ||
|
|
7d64e5bc62 | ||
|
|
a2c7452f90 | ||
|
|
654e32cbbe | ||
|
|
879aabe2f9 | ||
|
|
835af32213 | ||
|
|
571d33e660 | ||
|
|
61e2073775 | ||
|
|
82080ef491 | ||
|
|
b3d2020045 | ||
|
|
34236ff468 | ||
|
|
7b258dc11f | ||
|
|
40572b543f | ||
|
|
669cfe8952 | ||
|
|
37aa07eea1 | ||
|
|
ea1801bad3 | ||
|
|
5c0ce96b6f | ||
|
|
f7a2eb8aef | ||
|
|
96eb89a469 | ||
|
|
9c5f4163af | ||
|
|
c57d71a9db | ||
|
|
e176c7d906 | ||
|
|
a098c3b0c1 | ||
|
|
2fc79af4c7 | ||
|
|
00088cba6d | ||
|
|
d6afc125e5 | ||
|
|
c35e7b8ee5 | ||
|
|
1e493f6f28 | ||
|
|
402d5d955f | ||
|
|
64f6eea579 | ||
|
|
9ce29f9edc | ||
|
|
ecb8f1599d | ||
|
|
2b3b9517d2 | ||
|
|
08bdb54cb4 | ||
|
|
13d604d44e | ||
|
|
9219397208 | ||
|
|
6e93c3574c | ||
|
|
0455654f71 | ||
|
|
3b9fda0169 | ||
|
|
8d25d7812c | ||
|
|
0ddd7b0e45 | ||
|
|
206d578bc3 | ||
|
|
a864e8127b | ||
|
|
fc482ed096 | ||
|
|
6e4c4c4342 | ||
|
|
5b81986bb3 | ||
|
|
85f40bcbe0 | ||
|
|
e7ed280790 | ||
|
|
3d14a79428 | ||
|
|
d93a24d0bb | ||
|
|
43bba935c3 | ||
|
|
da7293524e | ||
|
|
cacc418cd5 | ||
|
|
4286d74d44 | ||
|
|
5cd3ad0b12 | ||
|
|
f7150645a1 | ||
|
|
ef7c66de34 | ||
|
|
1446b07f8c | ||
|
|
8bd0a2ef9d | ||
|
|
af63ac693e | ||
|
|
6a696d9ed7 | ||
|
|
d1f76bec37 | ||
|
|
016eff52c0 | ||
|
|
2a9178af12 | ||
|
|
6b6ea36b4c | ||
|
|
520493c714 | ||
|
|
e459c46dad | ||
|
|
a71a59c088 | ||
|
|
267a14264b | ||
|
|
065738473e | ||
|
|
f698c42c41 | ||
|
|
ab303db3dd | ||
|
|
07b0b93256 | ||
|
|
a717ddf5e6 | ||
|
|
d880875e67 | ||
|
|
fa60f9d2a8 | ||
|
|
e015da9e4c | ||
|
|
4de64d783e | ||
|
|
a8c331f88a | ||
|
|
697feed257 | ||
|
|
3260ae76f1 | ||
|
|
a74ae46f86 | ||
|
|
33286aad39 | ||
|
|
d48a8770de | ||
|
|
ee5b707e68 | ||
|
|
d29a4a60f9 | ||
|
|
07b39fe44a | ||
|
|
e270cb20ba | ||
|
|
c44eb65993 | ||
|
|
6640fc9eb7 | ||
|
|
189668fbfb | ||
|
|
536b46158a | ||
|
|
8a08d3621b | ||
|
|
5517963b24 | ||
|
|
7994073687 | ||
|
|
c9e5a4c996 | ||
|
|
ed5fd140eb | ||
|
|
4f12eccde6 | ||
|
|
1f0db6d2fa | ||
|
|
eed6990b39 | ||
|
|
a554164d1d | ||
|
|
6ea30798bf | ||
|
|
3418b7adf6 | ||
|
|
88d5119c59 | ||
|
|
6e7d2f53aa | ||
|
|
559a318584 | ||
|
|
67499cbf06 | ||
|
|
0744ff2fa0 | ||
|
|
cfa6b28ceb | ||
|
|
ed77c03830 | ||
|
|
e4e4d0c0ec | ||
|
|
64291f731b | ||
|
|
084a2cc52c | ||
|
|
36771e821c | ||
|
|
927371b908 | ||
|
|
561f1eadfc | ||
|
|
6638fd88b4 | ||
|
|
c280ca35d6 | ||
|
|
3586cf79d4 | ||
|
|
972ba7bfdc | ||
|
|
5a4d8a7107 | ||
|
|
3e946c78d0 | ||
|
|
0855ff8b42 | ||
|
|
574b5551a0 | ||
|
|
c109daf1d8 | ||
|
|
c84f0de8f8 | ||
|
|
368e774ceb | ||
|
|
73a7a2d27a | ||
|
|
db4e00d394 | ||
|
|
b9bd96f0c7 | ||
|
|
c73829fe92 | ||
|
|
81b8046d1d | ||
|
|
a1c9f7a2c6 | ||
|
|
62509c20da | ||
|
|
96a79c2126 | ||
|
|
8d68b6a2e6 | ||
|
|
c8faca01f1 | ||
|
|
b267cbae36 | ||
|
|
ac87ce733d | ||
|
|
678a7d17df | ||
|
|
664132281e | ||
|
|
0be633d624 | ||
|
|
d8784d4155 | ||
|
|
e65b2a9fb3 | ||
|
|
7accdd52d8 | ||
|
|
2669068429 | ||
|
|
157bf89e89 | ||
|
|
6e264562ee | ||
|
|
2525eefefd | ||
|
|
0f6995e92a | ||
|
|
8f7c100e22 | ||
|
|
48e5b395b2 | ||
|
|
94797bb956 | ||
|
|
91b81d51da | ||
|
|
0c9e7aa074 | ||
|
|
48d6d7279d | ||
|
|
8e94eb67d2 | ||
|
|
1a2dae3471 | ||
|
|
f74a2536f1 | ||
|
|
ef3ac25406 | ||
|
|
0b4ea14e9a | ||
|
|
2381317eb3 | ||
|
|
e19ce69238 | ||
|
|
cd09501d4d | ||
|
|
e635e3e959 | ||
|
|
9efc4689cc | ||
|
|
25278becef | ||
|
|
fc7cb106c1 | ||
|
|
18ea7d1e13 | ||
|
|
eed1b8f412 | ||
|
|
a61e7e7c04 | ||
|
|
ce166b12ce | ||
|
|
315371bf7c | ||
|
|
afc752b4ce | ||
|
|
126f9ba05f | ||
|
|
c031951f4b | ||
|
|
c36e7a1d0b | ||
|
|
3a4fee4e6e | ||
|
|
2db181ea49 | ||
|
|
eee1a0e10a | ||
|
|
9594049804 | ||
|
|
c78022a74c | ||
|
|
3150c1f8b3 | ||
|
|
9f91b89467 | ||
|
|
d748851027 | ||
|
|
df499ea8ac | ||
|
|
b5da383a17 | ||
|
|
f9237285fd | ||
|
|
3c970c331c | ||
|
|
91705aa9fd | ||
|
|
56c7a238a4 | ||
|
|
3f28d6aef3 | ||
|
|
edbd597bf2 | ||
|
|
5e1bb20f32 | ||
|
|
7ebfa4c1d1 | ||
|
|
65417dbf9e | ||
|
|
37d0135cab | ||
|
|
699edd049c | ||
|
|
95b2acb603 | ||
|
|
98a2f3e497 | ||
|
|
fb2771370c | ||
|
|
a137cd6cbe | ||
|
|
10e27cfa00 | ||
|
|
46ede62f3f | ||
|
|
e7ad6eeb74 | ||
|
|
892fd95b5f | ||
|
|
0da518e83d | ||
|
|
fbc9fea0a5 | ||
|
|
ccc108a217 | ||
|
|
22a9df82e6 | ||
|
|
9cb75e9834 | ||
|
|
55b1549895 | ||
|
|
6f74c5ec03 | ||
|
|
b8de9c0875 | ||
|
|
d5ccda355f | ||
|
|
b79a2976f7 | ||
|
|
39087d10eb | ||
|
|
6a793087b4 | ||
|
|
0f9a303963 | ||
|
|
eca624b13d | ||
|
|
a4d8169df8 | ||
|
|
5f7e310305 | ||
|
|
d5e6829eff | ||
|
|
504800a7db | ||
|
|
97723b1f96 | ||
|
|
5911041777 | ||
|
|
fcd0481b09 | ||
|
|
cc350165dd | ||
|
|
db7e1b8a97 | ||
|
|
188f773081 | ||
|
|
6271f81cff | ||
|
|
4bfc3bf412 | ||
|
|
d5a92104d1 | ||
|
|
ddd4f805a5 | ||
|
|
a1c1b19482 | ||
|
|
426bc15065 | ||
|
|
df5febf6e7 | ||
|
|
9e09e46700 | ||
|
|
ba0e9bb1d2 | ||
|
|
19da92b510 | ||
|
|
beb1f4e172 | ||
|
|
fb3d1ef399 | ||
|
|
d7c37d9dd6 | ||
|
|
24de404fbc | ||
|
|
8565d175f9 | ||
|
|
8d9e151030 | ||
|
|
758c5347fb | ||
|
|
1e54eee631 | ||
|
|
448760a2fe | ||
|
|
e44b22f7d1 | ||
|
|
30379c3f52 | ||
|
|
8729d60c1c | ||
|
|
effcdb8723 | ||
|
|
1354947434 | ||
|
|
864ce0088e | ||
|
|
93ac0b77c9 | ||
|
|
ea327e6b37 | ||
|
|
f7b85ab941 | ||
|
|
ce9933da85 | ||
|
|
0662f0dab4 | ||
|
|
0669fda1fd | ||
|
|
b88fcb6625 | ||
|
|
69be24cd5f | ||
|
|
35273cc87f | ||
|
|
5af73e9bf7 | ||
|
|
128ccb4330 | ||
|
|
07df622b59 | ||
|
|
5d22260589 | ||
|
|
39985ebdd1 | ||
|
|
92ec06c694 | ||
|
|
04137e887e | ||
|
|
e940f00c01 | ||
|
|
1c72a80d9a | ||
|
|
b9f8370097 | ||
|
|
1c636ea127 | ||
|
|
e1169e7ea6 | ||
|
|
5975dbcb07 | ||
|
|
08a419ec7a | ||
|
|
d417168805 | ||
|
|
ccb2966c4c | ||
|
|
b7cdbd3d41 | ||
|
|
ae440c9edf | ||
|
|
b6cd099117 | ||
|
|
98f57f2dba | ||
|
|
735fa4aa31 | ||
|
|
c7108bb3f7 | ||
|
|
98b3fc03b8 | ||
|
|
92da2fe082 | ||
|
|
bfab3a26bc | ||
|
|
b35b33e798 | ||
|
|
db5c2a379e | ||
|
|
3675ad2539 | ||
|
|
27c71b8ec0 | ||
|
|
0058c7749c | ||
|
|
f882dcabf7 | ||
|
|
c8f4a7c742 | ||
|
|
ed366c5ab2 | ||
|
|
2738da2d39 | ||
|
|
9f15ca2d90 | ||
|
|
e4f5407c70 | ||
|
|
951f82b428 | ||
|
|
f8685ad7aa | ||
|
|
c59d527664 | ||
|
|
77423e7bb1 | ||
|
|
ba12675267 | ||
|
|
def3ccfaee | ||
|
|
bbc68f9484 | ||
|
|
93685d92a4 | ||
|
|
b2bf613895 | ||
|
|
80ced6b782 | ||
|
|
47dfb89c52 | ||
|
|
064e3ff605 | ||
|
|
fb27803ab0 | ||
|
|
5e32b39f25 | ||
|
|
b9888d6f86 | ||
|
|
96a796ebde | ||
|
|
996e73d5d8 | ||
|
|
5c969a8caf | ||
|
|
68faab8196 | ||
|
|
b3693099dc | ||
|
|
9bb9ac3dec | ||
|
|
a57378e780 | ||
|
|
41f631b65b | ||
|
|
2db668f5cc | ||
|
|
aacf606999 | ||
|
|
e338f7cfe3 | ||
|
|
758030733c | ||
|
|
ad78f9e075 | ||
|
|
3468e8c8ae | ||
|
|
13d39a28ce | ||
|
|
8809fc949b | ||
|
|
860805ba82 | ||
|
|
1e0b024609 | ||
|
|
8486d47d17 | ||
|
|
407365888a | ||
|
|
2ad1db0c64 | ||
|
|
83a0576ca4 | ||
|
|
0b100b8fc8 | ||
|
|
2b12138c41 | ||
|
|
97aa40f7a8 | ||
|
|
b2f34cec19 | ||
|
|
3bc9586b0c | ||
|
|
4297c65f87 | ||
|
|
62b0f034e7 | ||
|
|
6ffd8aa320 | ||
|
|
d53ddd611b | ||
|
|
080a001118 | ||
|
|
5a77791f9d | ||
|
|
ab9c253310 | ||
|
|
35596ddcbc | ||
|
|
0cacac82ee | ||
|
|
780997a568 | ||
|
|
d2d60c0607 | ||
|
|
d4d8d00d01 | ||
|
|
cb52d9c84e | ||
|
|
db61e57893 | ||
|
|
52cf9086a5 | ||
|
|
db7590df1a | ||
|
|
ee03f3d584 | ||
|
|
2577f3a786 | ||
|
|
826a1714c3 | ||
|
|
d0e0c2ff8b | ||
|
|
fb407e9076 | ||
|
|
85c60670dc | ||
|
|
f2f36c67f6 | ||
|
|
281934cf34 | ||
|
|
00d72f18cf | ||
|
|
b36afdc924 | ||
|
|
4ed45e4031 | ||
|
|
cf0258204f | ||
|
|
3bd560add8 | ||
|
|
9e51a8d9d2 | ||
|
|
f59c6699f6 | ||
|
|
39732fa861 | ||
|
|
80f5eeacdd | ||
|
|
f56e3eb784 | ||
|
|
c3dcd8937f | ||
|
|
b1da374df2 | ||
|
|
dc1da0a738 | ||
|
|
1946e8f053 | ||
|
|
4623858849 | ||
|
|
9c5891f1b6 | ||
|
|
d5538c1ca3 | ||
|
|
90f15b8d55 | ||
|
|
4e27e8d3dd | ||
|
|
150cb772fe | ||
|
|
e494d7bb22 | ||
|
|
9774bb46ce | ||
|
|
84c0c45da9 | ||
|
|
46e3883f19 | ||
|
|
3a89a676cd | ||
|
|
0885333b11 | ||
|
|
c287641363 | ||
|
|
de9646d096 | ||
|
|
dd2520d675 | ||
|
|
3a5914827b | ||
|
|
cf55e96241 | ||
|
|
bd29d15814 | ||
|
|
d3911e2a4c | ||
|
|
eb591731ef | ||
|
|
ae11419045 | ||
|
|
43bbd42d3c | ||
|
|
d4a231585a | ||
|
|
977b79ecee | ||
|
|
5202d0add9 | ||
|
|
ebf555e1fb | ||
|
|
f411c4f439 | ||
|
|
216d8d24b8 | ||
|
|
cb2b256934 | ||
|
|
2f96fdd135 | ||
|
|
e40e2550a6 | ||
|
|
bfda5d9011 | ||
|
|
62a80c46a8 | ||
|
|
ceec1055e0 | ||
|
|
540bba4544 | ||
|
|
44c248e6c2 | ||
|
|
3a62fd49e6 | ||
|
|
a2007a4728 | ||
|
|
316c3808f7 | ||
|
|
928d880f0e | ||
|
|
c6930e3ea8 | ||
|
|
db77e9428f | ||
|
|
80f5c96af3 | ||
|
|
de1b346da0 | ||
|
|
96818cacf0 | ||
|
|
0c0c848597 | ||
|
|
23077821f6 | ||
|
|
87fd09ca8b | ||
|
|
0bcc59a1e9 | ||
|
|
87727c71f7 | ||
|
|
23c0ca456f | ||
|
|
d9d25ff4e7 | ||
|
|
6f8a7fdbe3 | ||
|
|
640fd8045d | ||
|
|
4230162294 | ||
|
|
355678274d | ||
|
|
ecf5304a14 | ||
|
|
94dd07e1e6 | ||
|
|
1b707e07f2 | ||
|
|
564884a774 | ||
|
|
7401fd7050 | ||
|
|
42e9dc0da7 | ||
|
|
a5308ea28e | ||
|
|
27bf7b4a9a | ||
|
|
a57c937aaa | ||
|
|
4a95cfd1c4 | ||
|
|
cd8943144b | ||
|
|
8400509358 | ||
|
|
d971131198 | ||
|
|
5729a06348 | ||
|
|
6eba5d4d96 | ||
|
|
2cc2d2cc37 | ||
|
|
b374351154 | ||
|
|
d59d23e308 | ||
|
|
3d1501e8fd | ||
|
|
c854c29016 | ||
|
|
33d8f8e5e7 | ||
|
|
653acbf62c | ||
|
|
93e7457e0d | ||
|
|
93e241e8f3 | ||
|
|
43da786016 | ||
|
|
ea6d86e6c4 | ||
|
|
fe73e90b7b | ||
|
|
f68c7fb188 | ||
|
|
ad40d42dc4 | ||
|
|
cdeb65e2fb | ||
|
|
271d524687 | ||
|
|
bc6b5bc4be | ||
|
|
e2f5ee661a | ||
|
|
6b2deaeced | ||
|
|
13afc52617 | ||
|
|
e7f54c5867 | ||
|
|
4ebcdd2b8f | ||
|
|
07730ccd33 | ||
|
|
0ad7ae2837 | ||
|
|
8fb91a1f8c | ||
|
|
3b0a84969b | ||
|
|
81c0dce5a3 | ||
|
|
816fedb78d | ||
|
|
484efdaf75 | ||
|
|
ea61a540cd | ||
|
|
0b24d3d892 | ||
|
|
2af8891f70 | ||
|
|
4e39021b6f | ||
|
|
2cd5fce62d | ||
|
|
ade307bc03 | ||
|
|
c8be4ef8e2 | ||
|
|
816214361d | ||
|
|
d1970ca85b | ||
|
|
8001694a4c | ||
|
|
10e258739f | ||
|
|
f3fdf03661 | ||
|
|
44814f759c | ||
|
|
4f5caa5ed2 | ||
|
|
aa7f04bf1b | ||
|
|
aaf1ea52b7 | ||
|
|
7990cfb078 | ||
|
|
675a5f8687 | ||
|
|
a25ee66150 | ||
|
|
13c27b00d3 | ||
|
|
867af61875 | ||
|
|
8f4fa065f9 | ||
|
|
7b5f5ca6bb | ||
|
|
a176e9452f | ||
|
|
cb815ede60 | ||
|
|
d773f4e62a | ||
|
|
dbe66596f9 | ||
|
|
ec4e2a8e16 | ||
|
|
7e7f68923d | ||
|
|
edb5220228 | ||
|
|
ac373d2376 | ||
|
|
16919cc1d9 | ||
|
|
7a155407f6 | ||
|
|
9e8234bb45 | ||
|
|
c4dcd34ce9 | ||
|
|
18332bdbf1 | ||
|
|
f1a7bceef2 | ||
|
|
eac2ace80b | ||
|
|
174ba6cf0f | ||
|
|
658c9347f3 | ||
|
|
7b3ef2ade5 | ||
|
|
2a62b628cf | ||
|
|
d8c07abd68 | ||
|
|
8d486c5838 | ||
|
|
eb91934d70 | ||
|
|
01654765e8 | ||
|
|
91c6bbcd78 | ||
|
|
b2e2e3be35 | ||
|
|
9628dead07 | ||
|
|
4c504870e0 | ||
|
|
3d687a6c2d | ||
|
|
5d56d95fda | ||
|
|
5e5228ff12 | ||
|
|
72ba57052a | ||
|
|
ed2f7f1236 | ||
|
|
893925436d | ||
|
|
96c4696417 | ||
|
|
e7659a5f99 | ||
|
|
53c9c3cf8d | ||
|
|
f60312febf | ||
|
|
bd79a27e4d | ||
|
|
7505baf3a1 | ||
|
|
4f95c5a72c | ||
|
|
85a4b1f881 | ||
|
|
33c6142365 | ||
|
|
10e874039f | ||
|
|
060ee2dd96 | ||
|
|
43d1182b4b | ||
|
|
d53da57f63 | ||
|
|
028b4b7ea7 | ||
|
|
4cb0230878 | ||
|
|
2fe8df3cbb | ||
|
|
64d67e3b00 | ||
|
|
83ff99a130 | ||
|
|
52faeb6f60 | ||
|
|
f797b5ed97 | ||
|
|
e143038df8 | ||
|
|
074082d1f1 | ||
|
|
d647983003 | ||
|
|
1d9808a92a | ||
|
|
a44eed5001 | ||
|
|
f2407afc9f | ||
|
|
99cf1b1671 | ||
|
|
aaf829898b | ||
|
|
8481cf66e3 | ||
|
|
bb150379a2 | ||
|
|
cc811e5a56 | ||
|
|
e8c5a4724a | ||
|
|
9ca4c7315b | ||
|
|
ffce5d968d | ||
|
|
656f0b7d82 | ||
|
|
ef0b455b05 | ||
|
|
679a9e839b | ||
|
|
53c8a48244 | ||
|
|
3f37914b3c | ||
|
|
b0ba9bd83d | ||
|
|
a3dbf4023c | ||
|
|
053c97b7a8 | ||
|
|
1fc8de85a3 | ||
|
|
5e1a0733e4 | ||
|
|
bfe26b46a6 | ||
|
|
4c999daacd | ||
|
|
663652f45e | ||
|
|
10bb8fa10a | ||
|
|
a0bae06ff7 | ||
|
|
0d7851ed9d | ||
|
|
664d5db5eb | ||
|
|
a1cc15a604 | ||
|
|
24ba840be7 | ||
|
|
a9e583a693 | ||
|
|
3a3ff474cb | ||
|
|
cc00789d35 | ||
|
|
689f11a573 | ||
|
|
c481a1b6a2 | ||
|
|
ae90ad1fb7 | ||
|
|
56d9725c39 | ||
|
|
1c69bfaf2c | ||
|
|
5e37f82b2f | ||
|
|
bdefd8ea8c | ||
|
|
eabd405845 | ||
|
|
03946f2ca8 | ||
|
|
fec8d1bc2f | ||
|
|
53f5f46037 | ||
|
|
81d99a0061 | ||
|
|
b227757b9a | ||
|
|
eef5cefb5d | ||
|
|
7712b81ab9 | ||
|
|
7feb86fe55 | ||
|
|
d1efbf6620 | ||
|
|
aabee05a6a | ||
|
|
cf062b5b6a | ||
|
|
0b6a3898fe | ||
|
|
517ebcfbcd | ||
|
|
9ef24d3f43 | ||
|
|
568e0c7ff6 | ||
|
|
a454a3f74e | ||
|
|
f7860138c7 | ||
|
|
0607295081 | ||
|
|
d4a7af8a89 | ||
|
|
5c1417c4c7 | ||
|
|
dc522a0135 | ||
|
|
ac7db3cc88 | ||
|
|
5cc55d1e99 | ||
|
|
10352ff5ad | ||
|
|
97d561ac33 | ||
|
|
204c10c053 | ||
|
|
af8bb0c4b9 | ||
|
|
ada5c58acf | ||
|
|
02ffc2ddee | ||
|
|
62820ea2b8 | ||
|
|
04738587e8 | ||
|
|
cbbfcd0e7b | ||
|
|
309a70df89 | ||
|
|
4cb6984a65 | ||
|
|
d486fa8452 | ||
|
|
c95ad5b208 | ||
|
|
5382ac20b6 | ||
|
|
3fbd514417 | ||
|
|
d0465242a3 | ||
|
|
db90b084cf | ||
|
|
00d2dcda68 | ||
|
|
20e3fdc782 | ||
|
|
3c32c09a5a | ||
|
|
ad6a7086c4 | ||
|
|
e977333177 | ||
|
|
1d4f828b93 | ||
|
|
c349e06346 | ||
|
|
7ff2cb75a8 | ||
|
|
f51415cf2c | ||
|
|
ec6457bcd3 | ||
|
|
2d9852d6f1 | ||
|
|
05542324fc | ||
|
|
669e86f96e | ||
|
|
cbf928f363 | ||
|
|
6016e1b15d | ||
|
|
d08d5620da | ||
|
|
43b18c13e3 | ||
|
|
7deb9fde9e | ||
|
|
b134d2a7b0 | ||
|
|
36f31228ff | ||
|
|
8103ad3b9e | ||
|
|
10cb3c2c3d | ||
|
|
dda193247a | ||
|
|
2463e4efd3 | ||
|
|
5ce805db2e | ||
|
|
a0b17887fd | ||
|
|
3eeb31d577 | ||
|
|
e11d594122 | ||
|
|
600c437af5 | ||
|
|
0280ddcbe9 | ||
|
|
96784640e3 | ||
|
|
b75d12fe05 | ||
|
|
5e389c32ed | ||
|
|
fd89ef04b6 | ||
|
|
abcc10e938 | ||
|
|
3ad337dd15 | ||
|
|
a527767caa | ||
|
|
39129ecedf | ||
|
|
c97d2d4fe9 | ||
|
|
5a018afbc4 | ||
|
|
06dea8ef3f | ||
|
|
cbb3378d10 | ||
|
|
7735634649 | ||
|
|
e074570b8f | ||
|
|
148c6a6c23 | ||
|
|
360172cad0 | ||
|
|
a5421ae170 | ||
|
|
5d07f2c837 | ||
|
|
e95708fe08 | ||
|
|
75c91232b4 | ||
|
|
0190c0225e | ||
|
|
86d366be4d | ||
|
|
71d71a6b1b | ||
|
|
c8671ce8e8 | ||
|
|
ed3d04c7ba | ||
|
|
695ad47fe9 | ||
|
|
25ac1edb48 | ||
|
|
824b4e0923 | ||
|
|
1b62c11db5 | ||
|
|
83a66a672d | ||
|
|
30b9ddc251 | ||
|
|
4a9831bd23 | ||
|
|
59388d89a0 | ||
|
|
1d033bd286 | ||
|
|
1eb0e5d307 | ||
|
|
935f008c16 | ||
|
|
b5d57f3418 | ||
|
|
05b17a0082 | ||
|
|
91fd25a548 | ||
|
|
e05696dfcc | ||
|
|
157a45b627 | ||
|
|
e9a91455e8 | ||
|
|
f97eb99950 | ||
|
|
c4b7ab067a | ||
|
|
7477f6584e | ||
|
|
7b4f5252f1 | ||
|
|
4e03419e85 | ||
|
|
4d97043e26 | ||
|
|
4208dbd514 | ||
|
|
c335b76ec6 | ||
|
|
356ff457be | ||
|
|
833c3fbd39 | ||
|
|
ace66eab61 | ||
|
|
6a9274a95f | ||
|
|
87af94a7d2 | ||
|
|
ea9d2e3f88 | ||
|
|
cd5581aada | ||
|
|
211a1394d3 | ||
|
|
44032ffc11 | ||
|
|
f10460d774 | ||
|
|
57365ef7b9 | ||
|
|
d24f10ce6e | ||
|
|
1daa2ff98d | ||
|
|
0e6a6b784d | ||
|
|
ce6bf9e5c1 | ||
|
|
e3576e2614 | ||
|
|
0899d7aefd | ||
|
|
d078befd33 | ||
|
|
f67cb71dbc | ||
|
|
721cd578bb | ||
|
|
3aac62caa7 | ||
|
|
6b9eb57de7 | ||
|
|
2b2a41edd2 | ||
|
|
cd1ad452da | ||
|
|
77868a9b17 | ||
|
|
59a2a43473 | ||
|
|
385a0f979e | ||
|
|
770cc5a700 | ||
|
|
a03155432e | ||
|
|
27d72746ca | ||
|
|
d51e833bf3 | ||
|
|
c6644ec1ae | ||
|
|
a7562a6aa1 | ||
|
|
6b70436e2b | ||
|
|
3dbc7bdd2c | ||
|
|
b4877e7fac | ||
|
|
f489ffa043 | ||
|
|
211c7641c1 | ||
|
|
51d066a1bc | ||
|
|
b702822857 | ||
|
|
1cbb2320c1 | ||
|
|
1c4ad3f817 | ||
|
|
ef5ec06141 | ||
|
|
0c37236d60 | ||
|
|
def853e8c4 | ||
|
|
7826cfb01f | ||
|
|
ac8f0a7ef2 | ||
|
|
48a907ae45 | ||
|
|
2fe620df70 | ||
|
|
536bd37d05 | ||
|
|
d29d265b0a | ||
|
|
41d653738a | ||
|
|
1955497dbe | ||
|
|
572803d7ac | ||
|
|
25a474f9f7 | ||
|
|
c42f7ab6d3 | ||
|
|
a7717b432e | ||
|
|
2acfda3dc5 | ||
|
|
569525fb68 | ||
|
|
15353b7513 | ||
|
|
4737336b85 | ||
|
|
d85b1c775f | ||
|
|
2ce1a96468 | ||
|
|
239b8d2e7c | ||
|
|
43b3ce9ed1 | ||
|
|
80d5a966db | ||
|
|
b11fa53519 | ||
|
|
ce4d00dc21 | ||
|
|
bb269affe2 | ||
|
|
d818c250b0 | ||
|
|
3d4d880110 | ||
|
|
899b61264f | ||
|
|
4dc059fba3 | ||
|
|
f94792fad8 | ||
|
|
6df2ff7ebf | ||
|
|
dc4ddedca3 | ||
|
|
73b85f9b29 | ||
|
|
ce054dd37d | ||
|
|
3a0e91a688 | ||
|
|
60ca4f29d7 | ||
|
|
301ebe0da3 | ||
|
|
ada745324f | ||
|
|
a69eec5fb9 | ||
|
|
8c35ebbb7e | ||
|
|
5ef2d1d7ad | ||
|
|
815b2d8a2b | ||
|
|
0cfe2d882d | ||
|
|
6019b738a4 | ||
|
|
de17a651e6 | ||
|
|
91dc9f0c9d | ||
|
|
0770aa237a | ||
|
|
d3f2d77961 | ||
|
|
da03b22fe4 | ||
|
|
456647838c | ||
|
|
e192ac34d0 | ||
|
|
6a3ccda12e | ||
|
|
14f79ef85a | ||
|
|
924471ee76 | ||
|
|
cd5844b050 | ||
|
|
0f6a12b595 | ||
|
|
d19c6a6afc | ||
|
|
3257ea00b5 | ||
|
|
f073087379 | ||
|
|
1ba47ae67c | ||
|
|
8ca3dfd8c9 | ||
|
|
cdea30253b | ||
|
|
c8ee01ba0f | ||
|
|
3ad08c75c0 | ||
|
|
c12e545ccd | ||
|
|
6571faad6c | ||
|
|
f98f1647da | ||
|
|
249b8b0363 | ||
|
|
777af35030 | ||
|
|
23fafe1996 | ||
|
|
e0741cc9af | ||
|
|
0e4911a575 | ||
|
|
28bc76695a | ||
|
|
4f7287fec5 | ||
|
|
0b5478ad2d | ||
|
|
cd6911f83c | ||
|
|
173f27cb64 | ||
|
|
152dcbe522 | ||
|
|
2a7bad326d | ||
|
|
cb6d8bf063 | ||
|
|
83db8d2072 | ||
|
|
3da8e4c1bb | ||
|
|
ee111a28d4 | ||
|
|
d00d9cb00f | ||
|
|
74ba5a61bf | ||
|
|
fd81f57e61 | ||
|
|
e75e189933 | ||
|
|
88d2fca2c6 | ||
|
|
bd615ebf65 | ||
|
|
44b9e822d9 | ||
|
|
ed4fe6bd36 | ||
|
|
a416ff6314 | ||
|
|
61ba5817c9 | ||
|
|
7bdbdda7f9 | ||
|
|
a9ddd41729 | ||
|
|
1379b9c9fb | ||
|
|
32615befd5 | ||
|
|
7697779abf | ||
|
|
bb37ebf4ba | ||
|
|
5f37699736 | ||
|
|
9da9a209a5 | ||
|
|
482b4b6e95 | ||
|
|
ec2e8ad184 | ||
|
|
6c686af1b7 | ||
|
|
4132027ada | ||
|
|
f70ef7a585 | ||
|
|
eb2bf3469e | ||
|
|
bfbf97aec9 | ||
|
|
2baf06e012 | ||
|
|
c2c8bd0a76 | ||
|
|
36729fb6ae | ||
|
|
18d5576997 | ||
|
|
6a7c56d919 | ||
|
|
3110765d12 | ||
|
|
deee36651d | ||
|
|
1c46102c4a | ||
|
|
439cf1a308 | ||
|
|
219f2eee29 | ||
|
|
374abe5214 | ||
|
|
8b1a462a60 | ||
|
|
c11ca543e2 | ||
|
|
bf92e3a9dd | ||
|
|
7ba0b420f1 | ||
|
|
f3906dd7c4 | ||
|
|
984d8b8ee6 | ||
|
|
7b4189271c | ||
|
|
63e8faeed9 | ||
|
|
f48aaf1c46 | ||
|
|
41499b189c | ||
|
|
9fddd193b9 | ||
|
|
0c7c61b685 | ||
|
|
6179686c81 | ||
|
|
2bb79e1346 | ||
|
|
71bf5f4697 | ||
|
|
069c2d2fd2 | ||
|
|
f35ff105ab | ||
|
|
25ec624e4e | ||
|
|
a972174706 | ||
|
|
646272f9b3 | ||
|
|
743106e94f | ||
|
|
f5d81f51c4 | ||
|
|
e8f62eb1f9 | ||
|
|
ea1467add7 | ||
|
|
917439725a | ||
|
|
2ef9e2d6fc | ||
|
|
c14a5973c7 | ||
|
|
3a7ea62874 | ||
|
|
0a38c16cc2 | ||
|
|
c65a291698 | ||
|
|
38a8ddcd77 | ||
|
|
43ad8e80b9 | ||
|
|
928dff6b68 | ||
|
|
0bdee1d6d8 | ||
|
|
3f40e15ed5 | ||
|
|
a687aa1de6 | ||
|
|
c811eb069d | ||
|
|
eb3d3dcbc4 | ||
|
|
804c064a7e | ||
|
|
9059c09627 | ||
|
|
279253c486 | ||
|
|
c7d6fe2d62 | ||
|
|
5327857f81 | ||
|
|
3b4dd051f2 | ||
|
|
306e98a81e | ||
|
|
f9a6e368a7 | ||
|
|
9e22946bb8 | ||
|
|
21b9732f06 | ||
|
|
bfa3c957d7 | ||
|
|
107f19a0e9 | ||
|
|
5671a37f43 | ||
|
|
93b36ed580 | ||
|
|
e523006ec3 | ||
|
|
a8576e54c7 | ||
|
|
47d6abdcd1 | ||
|
|
bbc6f1d778 | ||
|
|
e6c69127e4 | ||
|
|
0ba45caabf | ||
|
|
d43c98d546 | ||
|
|
a36294e209 | ||
|
|
7a44a4e305 | ||
|
|
63c6687a87 | ||
|
|
e01b7951f2 | ||
|
|
8c220cc04f | ||
|
|
9e9e90f88b | ||
|
|
6d328a82e9 | ||
|
|
dedee0f9d9 | ||
|
|
0ef1bc8490 | ||
|
|
30ab1e5a5e | ||
|
|
14821eed44 | ||
|
|
c8ecee9682 | ||
|
|
a8dd809f8e | ||
|
|
4307f078ed | ||
|
|
f76ce172e0 | ||
|
|
15f4b1fd5d | ||
|
|
36491b13d8 | ||
|
|
ac540b6183 | ||
|
|
6f09d94e2a | ||
|
|
f942216f3f | ||
|
|
d4f976ac8d | ||
|
|
040feddcf1 | ||
|
|
cff6b81f1f | ||
|
|
fafc464d93 | ||
|
|
9c667bb3af | ||
|
|
8c5779c864 | ||
|
|
642fe422c4 | ||
|
|
ca0b21bef5 | ||
|
|
e4fa8af47f | ||
|
|
6cf898fa13 | ||
|
|
150c3d3a97 | ||
|
|
e4bbebf87a | ||
|
|
41ad9b242c | ||
|
|
c635f09e05 | ||
|
|
693ad700e8 | ||
|
|
7e3050cf83 | ||
|
|
0750e27351 | ||
|
|
f9fb2cc698 | ||
|
|
5873ad95dc | ||
|
|
6a687a9ed1 | ||
|
|
e2d5313940 | ||
|
|
a59169fa96 | ||
|
|
a7b78565a1 | ||
|
|
5f15f550c9 | ||
|
|
8cd5a24409 | ||
|
|
f74b7aa7ac | ||
|
|
9a80a491c9 | ||
|
|
aabe8f7c5b | ||
|
|
10af44c12a | ||
|
|
a9aaa8939c | ||
|
|
8f1e70f01d | ||
|
|
9733cee3d2 | ||
|
|
e69be8f9a6 | ||
|
|
1c7ef73d1f | ||
|
|
c24f1f14ec | ||
|
|
1a0b6d6cb0 | ||
|
|
b318b79027 | ||
|
|
c1d9cace11 | ||
|
|
7dc2e02e22 | ||
|
|
602cf8c5fa | ||
|
|
c7faca9480 | ||
|
|
1b88b36820 | ||
|
|
064d7f3bd0 | ||
|
|
f1877c0c5f | ||
|
|
ce7fb8ab17 | ||
|
|
caca074161 | ||
|
|
8721ad987c | ||
|
|
876251c1cf | ||
|
|
36ac83a319 | ||
|
|
90317adae7 | ||
|
|
135543683d | ||
|
|
38350a1023 | ||
|
|
0e1947bc4b | ||
|
|
7141fc8eb0 | ||
|
|
db38ed4f19 | ||
|
|
8c0ef1a0a2 | ||
|
|
4c899f151c | ||
|
|
5da3cab4de | ||
|
|
a7bf7bf7a5 | ||
|
|
f874e9932d | ||
|
|
56433cf855 | ||
|
|
a2e84dd279 | ||
|
|
a397ce234a | ||
|
|
3694e5e846 | ||
|
|
f11a6f0135 | ||
|
|
44850feaf8 | ||
|
|
367bf25618 | ||
|
|
b9678c7c0e | ||
|
|
c6e25f068d | ||
|
|
37c4f1a7d3 | ||
|
|
d3a567a2f5 | ||
|
|
5b3ef04550 | ||
|
|
e96620260a | ||
|
|
29a611c729 | ||
|
|
562769fb89 | ||
|
|
4591237bfd | ||
|
|
262a0cf397 | ||
|
|
ff3fcb8134 | ||
|
|
d4d73674fc | ||
|
|
984d15d7fb | ||
|
|
efa449faff | ||
|
|
3af989763e | ||
|
|
9646f88384 | ||
|
|
1bbf5d214b | ||
|
|
8a075bcff9 | ||
|
|
9fe5f09742 | ||
|
|
84f2225f42 | ||
|
|
728ad51624 | ||
|
|
5ab03b7e92 | ||
|
|
6904666e2a | ||
|
|
1cd4075488 | ||
|
|
a6c431f3ba | ||
|
|
b1ce8bd222 | ||
|
|
890efa5400 | ||
|
|
18acac18e0 | ||
|
|
c582d7459f | ||
|
|
04fb0bd51c | ||
|
|
2c43c8d077 | ||
|
|
c5fb7b72f0 | ||
|
|
07620db027 | ||
|
|
f8a3ffae4e | ||
|
|
62d1510c55 | ||
|
|
498b655cb7 | ||
|
|
fa94d9c82c | ||
|
|
6cee12b153 | ||
|
|
bbf4b906e4 | ||
|
|
a6be8dccf5 | ||
|
|
466931d2fb | ||
|
|
d442f8fd60 | ||
|
|
7631722f97 | ||
|
|
6d30c07dd0 | ||
|
|
6f7289f932 | ||
|
|
2583abc39d | ||
|
|
12476036cd | ||
|
|
91070f823a | ||
|
|
8df4966a2b | ||
|
|
7d6882bec2 | ||
|
|
451a0067c7 | ||
|
|
e2580ea469 | ||
|
|
abf11fbcb8 | ||
|
|
383918d83b | ||
|
|
f8cbd322ba | ||
|
|
9835d6b2df | ||
|
|
17e00ac040 | ||
|
|
e92b7f8bb9 | ||
|
|
1c9db2d9f8 | ||
|
|
44586743ea | ||
|
|
802d9d2b6e | ||
|
|
a7a20ad2ea | ||
|
|
124ff23e3d | ||
|
|
abfa6a325a | ||
|
|
0e18292e41 | ||
|
|
6d53788ea2 | ||
|
|
fae9874dde | ||
|
|
b8da66bb55 | ||
|
|
8a2276e791 | ||
|
|
4bdef80554 | ||
|
|
1a028f77d4 | ||
|
|
7603468abc | ||
|
|
b854cefb57 | ||
|
|
58b191b439 | ||
|
|
3d475e5afa | ||
|
|
f385a5fd5e | ||
|
|
250265c3d9 | ||
|
|
e07dd3ddcb | ||
|
|
68f53aaa87 | ||
|
|
5fda5cc08c | ||
|
|
68b87dd668 | ||
|
|
587a34442a | ||
|
|
6da171a699 | ||
|
|
024e7d8651 | ||
|
|
e8dd952aa5 | ||
|
|
fe2fae5b86 | ||
|
|
5b5160ca6f | ||
|
|
b9dd654e7a | ||
|
|
b0df24e6d1 | ||
|
|
868e94fb73 | ||
|
|
15395a56e7 | ||
|
|
29c81a788f | ||
|
|
0615252e15 | ||
|
|
be00d1f3c6 | ||
|
|
3eb6b6c07f | ||
|
|
0b86326435 | ||
|
|
fb2bfe2337 | ||
|
|
e135f8e74d | ||
|
|
43a4a9c86d | ||
|
|
43b27cc052 | ||
|
|
53372a7471 | ||
|
|
1ddb219a0c | ||
|
|
2264937f81 | ||
|
|
8a8ada8529 | ||
|
|
123e758c6d | ||
|
|
531d961d30 | ||
|
|
c380fd00bf | ||
|
|
57397570c0 | ||
|
|
e106d7ac3a | ||
|
|
b72793a85a | ||
|
|
68f24755aa | ||
|
|
5a4467a4a8 | ||
|
|
7c109ffd8c | ||
|
|
6415661b61 | ||
|
|
ed7f42a803 | ||
|
|
e2af716a81 | ||
|
|
d3f91ce0a6 | ||
|
|
dde005366a | ||
|
|
85cab8d9b0 | ||
|
|
a49d3d2ddc | ||
|
|
93c30c94b3 | ||
|
|
1539769c08 | ||
|
|
c7ece43a18 | ||
|
|
69a22ffe5e | ||
|
|
e6bfde1397 | ||
|
|
bd60d46b82 | ||
|
|
3c2a55a521 | ||
|
|
29eb37857c | ||
|
|
6c9f2734a2 | ||
|
|
a40ab9ffb1 | ||
|
|
55b3e4eeb3 | ||
|
|
f386ec82ae | ||
|
|
ac4a87de13 | ||
|
|
42e5282283 | ||
|
|
11707cb3b1 | ||
|
|
d444aa1110 | ||
|
|
a858e041e4 | ||
|
|
13ef5dc0b3 | ||
|
|
9a7f3f8c1a | ||
|
|
1beb8522b9 | ||
|
|
af14bfdd84 | ||
|
|
ba079b9ee5 | ||
|
|
78a3dfc5d9 | ||
|
|
4d3278cb52 | ||
|
|
5fd3eb82cd | ||
|
|
1e1ce550c0 | ||
|
|
4bb4bbce14 | ||
|
|
29a46d2c18 | ||
|
|
878c465c56 | ||
|
|
f1c8926252 | ||
|
|
5bcc3a3fb9 | ||
|
|
30350e3b40 | ||
|
|
0004b834fb | ||
|
|
dbb1773e15 | ||
|
|
8e39e7f830 | ||
|
|
aa856e75e8 | ||
|
|
b1729f2127 | ||
|
|
13f854c91f | ||
|
|
277c2ff869 | ||
|
|
23f391c5b5 | ||
|
|
a5124ab9c8 | ||
|
|
a57398b0d6 | ||
|
|
c11af40a06 | ||
|
|
12c138b341 | ||
|
|
c6dfdf10e5 | ||
|
|
ad5fd01ea4 | ||
|
|
29f629156a | ||
|
|
be778353b7 | ||
|
|
76e634330f | ||
|
|
3a6f46bf38 | ||
|
|
65f4895dd6 | ||
|
|
ef03a2f383 | ||
|
|
5b397a9827 | ||
|
|
5dff7433e8 | ||
|
|
fa014fcbf0 | ||
|
|
dd6bfed565 | ||
|
|
6e983d1542 | ||
|
|
3be9f6c4f3 | ||
|
|
779969f150 | ||
|
|
2245f1bf41 | ||
|
|
a0f9b5e47b | ||
|
|
4649bc632c | ||
|
|
cdcb77dea8 | ||
|
|
c5770392e3 | ||
|
|
cd3111ca8d | ||
|
|
8e200a9cb4 | ||
|
|
ccb7e96d8a | ||
|
|
f75ddeb721 | ||
|
|
221ddc6d0f | ||
|
|
31c752bf3a | ||
|
|
03f1584d3a | ||
|
|
03d6e25dea | ||
|
|
8bbc592261 | ||
|
|
9d35a9d912 | ||
|
|
7622d90c1d | ||
|
|
fcd1daaf79 | ||
|
|
25ed3390cb | ||
|
|
7dd5f9e720 | ||
|
|
2077378ae1 | ||
|
|
f6c52e0616 | ||
|
|
fc02e15fb1 | ||
|
|
9b91c2a886 | ||
|
|
d8b40056b5 | ||
|
|
4315c4697c | ||
|
|
b77013c859 | ||
|
|
f7de2611c1 | ||
|
|
f9d81fd362 | ||
|
|
c330282919 | ||
|
|
db807ab4a6 | ||
|
|
d55e3c352a | ||
|
|
afec53cea3 | ||
|
|
6cb8b9110e | ||
|
|
12bd3840f9 | ||
|
|
dc05e62ce0 | ||
|
|
4f33685ca7 | ||
|
|
cfb9605e9b | ||
|
|
f563ba7a9e | ||
|
|
7e4b34560f | ||
|
|
d4db656940 | ||
|
|
3c15419bd0 | ||
|
|
e3b7bba84f | ||
|
|
a38a880e67 | ||
|
|
7043c6faf9 | ||
|
|
379880cd84 | ||
|
|
341615668b | ||
|
|
e4aa933d57 | ||
|
|
4587b83d85 | ||
|
|
9c214622a1 | ||
|
|
52178f78d1 | ||
|
|
440dfabefe | ||
|
|
64080e808e | ||
|
|
7decad1ff3 | ||
|
|
103729c085 | ||
|
|
4ced0bed13 | ||
|
|
0d6d68c62f | ||
|
|
278891c262 | ||
|
|
ae12948558 | ||
|
|
0c915f7de9 | ||
|
|
84f0561712 | ||
|
|
ba12db3019 | ||
|
|
575e2c443b | ||
|
|
7c09259b7d | ||
|
|
7ba268946a | ||
|
|
8074ca95bd | ||
|
|
d691ea92d0 | ||
|
|
903a3e1a9c | ||
|
|
4109113319 | ||
|
|
872c11502f | ||
|
|
10cb4f359a | ||
|
|
45babf162e | ||
|
|
3434428357 | ||
|
|
25128bd06f | ||
|
|
e7620b0dd0 | ||
|
|
65683d0df1 | ||
|
|
ff2ccfd670 | ||
|
|
81cea9b9d9 | ||
|
|
ae342a0506 | ||
|
|
f8221340af | ||
|
|
b1ec703ba9 | ||
|
|
3d785d836d | ||
|
|
7c79c90cd2 | ||
|
|
a6e285316a | ||
|
|
e6018cd38f | ||
|
|
92a6523bf3 | ||
|
|
2815eca260 | ||
|
|
896ebf01b1 | ||
|
|
a71b2e231b | ||
|
|
56f3aaf7c8 | ||
|
|
87a9cc0b9e | ||
|
|
972a1fdd14 | ||
|
|
723954f0d9 | ||
|
|
536239d272 | ||
|
|
d32bbd06cf | ||
|
|
5d868168a5 | ||
|
|
5d4575ed25 | ||
|
|
c04b4bbbfa | ||
|
|
cf76d5c46a | ||
|
|
e8b970608e | ||
|
|
83fdfaa0eb | ||
|
|
86c35a403a | ||
|
|
e96c382138 | ||
|
|
6876c9878e | ||
|
|
29a5fb041f | ||
|
|
8ef74192ec | ||
|
|
135ce93d03 | ||
|
|
f13b090b5c | ||
|
|
d1aa820856 | ||
|
|
9b51c2a0b2 | ||
|
|
87b3be26a0 | ||
|
|
a74dba865c | ||
|
|
c81c3d11ed | ||
|
|
180adb42a3 | ||
|
|
8d92ec2007 | ||
|
|
ecba9699ed | ||
|
|
36c65b7b22 | ||
|
|
8a4c808be5 | ||
|
|
6ed2dbf172 | ||
|
|
1b8350fe48 | ||
|
|
15080aad66 | ||
|
|
7a7f7c5dec | ||
|
|
c958208c47 | ||
|
|
9f4e565b8e | ||
|
|
bb2d21abdd | ||
|
|
0b0a646f87 | ||
|
|
e2eb7fdfb5 | ||
|
|
537383e071 | ||
|
|
bab6fb0de2 | ||
|
|
cf7a091319 | ||
|
|
3362bc3106 | ||
|
|
6befd2155a | ||
|
|
7b02070007 | ||
|
|
32322e95b6 | ||
|
|
3fbf1f7e71 | ||
|
|
9d308e6246 | ||
|
|
6c035eb13d | ||
|
|
b0a56a71bb | ||
|
|
201b9f635e | ||
|
|
f1d0d8e57a | ||
|
|
5838a9f3a0 | ||
|
|
998a392bd3 | ||
|
|
a0a87fc4c0 | ||
|
|
6c0b4c66c0 | ||
|
|
2c8a1ed69c | ||
|
|
fe899d9d7c | ||
|
|
6d3cded579 | ||
|
|
6280398bc1 | ||
|
|
1bd39e6568 | ||
|
|
bd950e9ca6 | ||
|
|
db42589cca | ||
|
|
b331f047af | ||
|
|
31024ce672 | ||
|
|
aea023357b | ||
|
|
2e5a5f71ba | ||
|
|
72516c00fb | ||
|
|
d34d5869be | ||
|
|
72726c784a | ||
|
|
662b02e2d8 | ||
|
|
a9ec1a7b4e | ||
|
|
f03c5037c4 | ||
|
|
a52c68f4c2 | ||
|
|
a73dda35e8 | ||
|
|
6e7c5dcaed | ||
|
|
c14a2a0a39 | ||
|
|
20eaa7d069 | ||
|
|
50c872c47c | ||
|
|
4ec26aa6aa | ||
|
|
a7d3e5e7f5 | ||
|
|
0570203891 | ||
|
|
7b5ff4c1a5 | ||
|
|
64146b8cb1 | ||
|
|
d155c39f59 | ||
|
|
a909ceda84 | ||
|
|
922916ae99 | ||
|
|
3b3247592e | ||
|
|
17292324a3 | ||
|
|
e5aa9d47f7 | ||
|
|
75eea50d71 | ||
|
|
9ef9443969 | ||
|
|
1505369133 | ||
|
|
9e1d8beaf0 | ||
|
|
17fb562740 | ||
|
|
2910aaeec0 | ||
|
|
aeef12cdc0 | ||
|
|
8ad203f97a | ||
|
|
aba4e03d3b | ||
|
|
6a99b36cce | ||
|
|
399afffddf | ||
|
|
906c3dca8b | ||
|
|
1b593384e5 | ||
|
|
951627093c | ||
|
|
6ff2e55ce4 | ||
|
|
3082c76ec6 | ||
|
|
4c51dbba80 | ||
|
|
f415d81049 | ||
|
|
24ff360ee0 | ||
|
|
2a4c728375 | ||
|
|
752a497218 | ||
|
|
1d4409c703 | ||
|
|
3a461d0279 | ||
|
|
594964aebe | ||
|
|
bb9eb119a4 | ||
|
|
4d5bcb65c8 | ||
|
|
c88f7b8408 | ||
|
|
8bc6d8cb23 | ||
|
|
eb4984afe6 | ||
|
|
d89f067c00 | ||
|
|
5667a9c456 | ||
|
|
b44bfa1aa6 | ||
|
|
304282bd4f | ||
|
|
93daa6406b | ||
|
|
ecee7421ea | ||
|
|
83fdab5feb | ||
|
|
e129ae50f0 | ||
|
|
f0b722b0a5 | ||
|
|
82706eb3a6 | ||
|
|
c22007939b | ||
|
|
f0fc8bf2cf | ||
|
|
c3742f63fd | ||
|
|
5d37f9f975 | ||
|
|
1f4ad444ae | ||
|
|
907323d46f | ||
|
|
e0fc1b4f41 | ||
|
|
4bb9b6ee26 | ||
|
|
6c290353c1 | ||
|
|
c48c8cc353 | ||
|
|
e208404e3a | ||
|
|
3c7c8c8776 | ||
|
|
bb2235b05e | ||
|
|
a6aec9ebac | ||
|
|
5f3695d2d0 | ||
|
|
ad12ad4a77 | ||
|
|
37903776fd | ||
|
|
c4c93ee346 | ||
|
|
72b2ab03cc | ||
|
|
4cefe26f80 | ||
|
|
991950650b | ||
|
|
8cc94689d8 | ||
|
|
01d2ede097 | ||
|
|
e2a02de6e9 | ||
|
|
ca10a7834a | ||
|
|
312d6c890e | ||
|
|
c146596564 | ||
|
|
6f5c2f1e29 | ||
|
|
1726593fb0 | ||
|
|
e8575495db | ||
|
|
cffc064a33 | ||
|
|
3dda7e2da2 | ||
|
|
22f1863475 | ||
|
|
bdb21da26e | ||
|
|
e759e123ac | ||
|
|
d858eceb38 | ||
|
|
af126fe7e3 | ||
|
|
124e93f737 | ||
|
|
fbd933b56a | ||
|
|
9c5355a300 | ||
|
|
491a4e7d78 | ||
|
|
39a9ebaeee | ||
|
|
9b4e016fe4 | ||
|
|
422ec7ecec | ||
|
|
a06a280534 | ||
|
|
1358469375 | ||
|
|
90d8395a2c | ||
|
|
11f7e3099d | ||
|
|
ef29bffb72 | ||
|
|
3effa37fa7 | ||
|
|
1493c920fd | ||
|
|
ea9258d36c | ||
|
|
db142061ff | ||
|
|
c536944a10 | ||
|
|
ae7ddecaa6 | ||
|
|
2e38e62101 | ||
|
|
2979a64ce3 | ||
|
|
bddca8e232 | ||
|
|
e9bf6a7bc5 | ||
|
|
9c3dfdfd14 | ||
|
|
c52aa2196d | ||
|
|
81c7fe2084 | ||
|
|
0301aec409 | ||
|
|
015bc48345 | ||
|
|
da1aabdfc1 | ||
|
|
c2fe2ba56f | ||
|
|
52b18393eb | ||
|
|
b172ae65d2 | ||
|
|
eab187fb6b | ||
|
|
502a14e820 | ||
|
|
7de27c69c0 | ||
|
|
f455f91ea3 | ||
|
|
bdaefc0e4d | ||
|
|
8040804c75 | ||
|
|
7cd840610b | ||
|
|
15e91908e8 | ||
|
|
0a9ba3b2e6 | ||
|
|
535606a185 | ||
|
|
25c266e4de | ||
|
|
977ccb01f2 | ||
|
|
c2a6a1c125 | ||
|
|
f6402a8b62 | ||
|
|
30d4097fd8 | ||
|
|
3fb967b482 | ||
|
|
61d756c7c4 | ||
|
|
9ae25e9449 | ||
|
|
9f3846ec5f | ||
|
|
7b5625a722 | ||
|
|
152d5a3b9a | ||
|
|
50b6ded6f0 | ||
|
|
5ee3ee6181 | ||
|
|
cd3e901a60 | ||
|
|
314c41f47f | ||
|
|
a1c1532614 | ||
|
|
ffef78d426 | ||
|
|
8153406dd0 | ||
|
|
b5613a2cc6 | ||
|
|
6a225e53f5 | ||
|
|
e2b32757d8 | ||
|
|
6b73d22da1 | ||
|
|
8b81c10f84 | ||
|
|
a6a1bec437 | ||
|
|
562d1bfcd0 | ||
|
|
4f86d6a690 | ||
|
|
e63a191373 | ||
|
|
74b5e55643 | ||
|
|
405d0ab972 | ||
|
|
84e4156259 | ||
|
|
50428c3f01 | ||
|
|
a91c46b4c0 | ||
|
|
8315883db9 | ||
|
|
fa4807be8c | ||
|
|
086e34f728 | ||
|
|
d22f9000d6 | ||
|
|
2587720298 | ||
|
|
bb99cee48a | ||
|
|
a3805fe04d | ||
|
|
d4f1cb5d6a | ||
|
|
118bf5152c | ||
|
|
41244dc677 | ||
|
|
671e1aed9f | ||
|
|
1636508a6a | ||
|
|
bc2491e6b7 | ||
|
|
69a1cc8759 | ||
|
|
c21db0ff6a | ||
|
|
a889b3a4be | ||
|
|
098ef91583 | ||
|
|
17df8a5c43 | ||
|
|
4fac10ac4a | ||
|
|
10c7fdb618 | ||
|
|
7be0a1a55f | ||
|
|
a98b2fabe0 | ||
|
|
7779b66972 | ||
|
|
7463c40c40 | ||
|
|
996221147e | ||
|
|
7cd9bcd3f5 | ||
|
|
fdc018d809 | ||
|
|
fa5cf665ce | ||
|
|
d6df6b444f | ||
|
|
78836389f0 | ||
|
|
fa4b88a504 | ||
|
|
1a374a1669 | ||
|
|
01ba1b8c03 | ||
|
|
f09a5aacae | ||
|
|
95d084d36d | ||
|
|
d35cd18745 | ||
|
|
4e493d7836 | ||
|
|
68b8cca540 | ||
|
|
c216405a81 | ||
|
|
aa2ec3b9c9 | ||
|
|
f13a00b2dd | ||
|
|
8781d03aa7 | ||
|
|
1266a2f753 | ||
|
|
23d2cf1718 | ||
|
|
d11031c694 | ||
|
|
916e976297 | ||
|
|
27a9313396 | ||
|
|
517d0158b6 | ||
|
|
a9e05aec7c | ||
|
|
9b3e43cb21 | ||
|
|
23fddf74b6 | ||
|
|
03535ce50b | ||
|
|
9b8de19fe6 | ||
|
|
1d8b8aad3b | ||
|
|
84c30580aa | ||
|
|
a5f25726cd | ||
|
|
7a6e047519 | ||
|
|
1e65ef0c1a | ||
|
|
2269bf0167 | ||
|
|
5526f8e3dc | ||
|
|
2781b8535c | ||
|
|
c3d9910e08 | ||
|
|
b9f6a5625f | ||
|
|
f4e78b0ea6 | ||
|
|
d93e944c07 | ||
|
|
6760533a10 | ||
|
|
85e65edb7d | ||
|
|
523390cd8e | ||
|
|
ea197eff5f | ||
|
|
d4938b7699 | ||
|
|
6ee6227b67 | ||
|
|
6f0ae8a5b8 | ||
|
|
c1b7f09530 | ||
|
|
9addde00e3 | ||
|
|
10f8a94399 | ||
|
|
631de20a8d | ||
|
|
66464fd807 | ||
|
|
0f5fe746e0 | ||
|
|
a7fc8621a8 | ||
|
|
8b92bc6c4a | ||
|
|
830b56ac9e | ||
|
|
fcfdbfc2b5 | ||
|
|
e575279738 | ||
|
|
796f7258cc | ||
|
|
ea88b040ec | ||
|
|
69b4d0d44b | ||
|
|
36d6ae33d1 | ||
|
|
8126087b3e | ||
|
|
780459d2bf | ||
|
|
e2b6d69596 | ||
|
|
7fff1e6fe5 | ||
|
|
b576ce72a1 | ||
|
|
99a01207bc | ||
|
|
6d6457ad18 | ||
|
|
35f3a42e7f | ||
|
|
a84ae88214 | ||
|
|
4fae42de51 | ||
|
|
1d55c04c21 | ||
|
|
7a54658710 | ||
|
|
bddc35bbc7 | ||
|
|
cdacd2a951 | ||
|
|
58e4d08bb0 | ||
|
|
3ff4fd814e | ||
|
|
91e8f57afb | ||
|
|
e3d0628a06 | ||
|
|
9fca9ca7ec | ||
|
|
2d09a40663 | ||
|
|
1eaf55c555 | ||
|
|
db535e6453 | ||
|
|
dadec9d3cb | ||
|
|
ff780177d0 | ||
|
|
b7e2ea1ca5 | ||
|
|
bf50134d94 | ||
|
|
227bac7c60 | ||
|
|
340ff82487 | ||
|
|
894665b067 | ||
|
|
48b7294ff1 | ||
|
|
cde8ff282d | ||
|
|
0b44a595e2 | ||
|
|
37781bd208 | ||
|
|
e0344e9251 | ||
|
|
a1808a54a4 | ||
|
|
1cef513f6c | ||
|
|
22908a12e9 | ||
|
|
57759aa4a3 | ||
|
|
d50148fab7 | ||
|
|
271c2ea3e3 | ||
|
|
20a6f6ac79 | ||
|
|
8924d5fa05 | ||
|
|
26637d934b | ||
|
|
dde4495e20 | ||
|
|
1278429518 | ||
|
|
421f5a03aa | ||
|
|
a433d5d59d | ||
|
|
934493bf5f | ||
|
|
58f97bc0e7 | ||
|
|
a5820e27a6 | ||
|
|
d312fe7c2b | ||
|
|
124fc73386 | ||
|
|
c78e7c14d3 | ||
|
|
30a6dc2f64 | ||
|
|
6ceb78fd4c | ||
|
|
e09ab79a1a | ||
|
|
b6587c00ce | ||
|
|
df2f6d4a7d | ||
|
|
3b69f07b86 | ||
|
|
fdc0036872 | ||
|
|
fab90ecbe5 | ||
|
|
f72d160249 | ||
|
|
b65404a8a9 | ||
|
|
42446cb87b | ||
|
|
f45e64c756 | ||
|
|
ae46cd33b6 | ||
|
|
61eb22f4f7 | ||
|
|
7c14b8d97b | ||
|
|
8d682041a4 | ||
|
|
75dae5fbe8 | ||
|
|
dc92e19f76 | ||
|
|
ce87e0dfa4 | ||
|
|
41efad4056 | ||
|
|
5f89226cd7 | ||
|
|
197dfca5b2 | ||
|
|
e6980626d8 | ||
|
|
ca44a654a5 | ||
|
|
48dc76a694 | ||
|
|
0c5eab680b | ||
|
|
3dc671395e | ||
|
|
ba1e6e91b9 | ||
|
|
22980cea7b | ||
|
|
ed0c19807a | ||
|
|
15005209d1 | ||
|
|
f64987d0c4 | ||
|
|
0da04232f3 | ||
|
|
8d53b46e82 | ||
|
|
9a0bb14e76 | ||
|
|
900825a2af | ||
|
|
52de50aa64 | ||
|
|
1541060091 | ||
|
|
50bc0caccf | ||
|
|
8f5b14ec84 | ||
|
|
da37db1ea9 | ||
|
|
5abde866f1 | ||
|
|
32eed72d2b | ||
|
|
585b5a221d | ||
|
|
db52fe475a | ||
|
|
57ad730f74 | ||
|
|
c5db99f383 | ||
|
|
fd6d3205d0 | ||
|
|
9548cf32ff | ||
|
|
bdbfff911b | ||
|
|
a143eca57d | ||
|
|
2101f714cc | ||
|
|
3edff89a4d | ||
|
|
f2079de2cb | ||
|
|
93527d892b | ||
|
|
b91218308b | ||
|
|
6170138124 | ||
|
|
1add5accf2 | ||
|
|
faba6c9bdc | ||
|
|
4eb7cd06b4 | ||
|
|
245cff887c | ||
|
|
59aba52b03 | ||
|
|
6d05a4117a | ||
|
|
49e5268d48 | ||
|
|
76445bd19c | ||
|
|
5a3e99626d | ||
|
|
ffc29d14a8 | ||
|
|
7cffa6ebcc | ||
|
|
342f1d31be | ||
|
|
b779bbfc9d | ||
|
|
ef6576bdd6 | ||
|
|
27dab262de | ||
|
|
f559ceeb7f | ||
|
|
e36ae4f0f7 | ||
|
|
412c1df15a | ||
|
|
73af3ba095 | ||
|
|
bbdeae0ed9 | ||
|
|
21b7564976 | ||
|
|
bf22b820bf | ||
|
|
efd5a73a18 | ||
|
|
a11abf87ec | ||
|
|
8cd24b1a67 | ||
|
|
28f7b411ed | ||
|
|
655bc49fad | ||
|
|
18c9ee2f9d | ||
|
|
07f2cdac58 | ||
|
|
06781beb81 | ||
|
|
cd29293dd6 | ||
|
|
1fdc7a9163 | ||
|
|
6807db4967 | ||
|
|
b0ea416d6d | ||
|
|
c515218760 | ||
|
|
8053ea0a22 | ||
|
|
a5603c9953 | ||
|
|
bffe63a233 | ||
|
|
2cfbfe473e | ||
|
|
3c78c100b5 | ||
|
|
2451b0a5b1 | ||
|
|
85e9438ff7 | ||
|
|
81610ba86e | ||
|
|
6423b386d2 | ||
|
|
5c48d116eb | ||
|
|
90257e9dee | ||
|
|
a740203444 | ||
|
|
25dc9cc14a | ||
|
|
d4d2af46ac | ||
|
|
64acfc3187 | ||
|
|
62a1d4b3e0 | ||
|
|
e6072a51f8 | ||
|
|
21e3159711 | ||
|
|
dadd8cb93a | ||
|
|
5f8af6ad66 | ||
|
|
3436905744 | ||
|
|
e3258bcf5a | ||
|
|
2b6e0405a5 | ||
|
|
7f752d9102 | ||
|
|
df430394b0 | ||
|
|
638d89e73b | ||
|
|
1ab51ca04e | ||
|
|
cb0386779c | ||
|
|
4dc428d75b | ||
|
|
e7496c8840 | ||
|
|
d6c272cfd6 | ||
|
|
da6ed8ea11 | ||
|
|
28de330b50 | ||
|
|
7823fa05ef | ||
|
|
fab4d95156 | ||
|
|
06cb7f35f1 | ||
|
|
796c5d785e | ||
|
|
c88db77814 | ||
|
|
6fe0f4cd7d | ||
|
|
3bf90c3c38 | ||
|
|
992f3535b7 | ||
|
|
06eacb5a5c | ||
|
|
c0152ce52f | ||
|
|
5a60224d77 | ||
|
|
c137fa2022 | ||
|
|
879d01a750 | ||
|
|
6db878743c | ||
|
|
08b90090f5 | ||
|
|
42466d5fc4 | ||
|
|
a3f172fc77 | ||
|
|
0953bba0a3 | ||
|
|
36d6dd1ca9 | ||
|
|
4863591bc8 | ||
|
|
c489501441 | ||
|
|
6638f560f8 | ||
|
|
a2fe23549b | ||
|
|
1a7438acfd | ||
|
|
b1de85a44f | ||
|
|
6604ebfd01 | ||
|
|
7872460162 | ||
|
|
d9696ae34c | ||
|
|
7c937bf8b8 | ||
|
|
4913d7ee39 | ||
|
|
2503a3e3ca | ||
|
|
538984c6d2 | ||
|
|
5f92ed492b | ||
|
|
bca0978434 | ||
|
|
e1f06ec862 | ||
|
|
a5c8bbf79e | ||
|
|
e8df373abf | ||
|
|
39b8eb0ae0 | ||
|
|
eb02f6137e | ||
|
|
90ee689d5a | ||
|
|
90558a2e80 | ||
|
|
b343035060 | ||
|
|
bcdd006dd5 | ||
|
|
92c4e5bfaf | ||
|
|
fdbdf26afc | ||
|
|
1aa295dc84 | ||
|
|
85b534a0b0 | ||
|
|
e728738e34 | ||
|
|
6bbf168cec | ||
|
|
aa85ae89c1 | ||
|
|
b5e4fdc3d8 | ||
|
|
90f91eeea4 | ||
|
|
ae0ae5fd4e | ||
|
|
5b7486cff8 | ||
|
|
14240318f1 | ||
|
|
18eb9ffae6 | ||
|
|
c0a62793c4 | ||
|
|
dd848d754f | ||
|
|
f058850598 | ||
|
|
0c7220016b | ||
|
|
8c19124717 | ||
|
|
46f4359e1f | ||
|
|
f80452c7d9 | ||
|
|
611f1b57dd | ||
|
|
d1b1a45725 | ||
|
|
6e38f7e532 | ||
|
|
2c1e681984 | ||
|
|
f11ad99983 | ||
|
|
e1ef911d40 | ||
|
|
b40afd1006 | ||
|
|
af01122f33 | ||
|
|
189e835499 | ||
|
|
1319b62acb | ||
|
|
9cf9f1bdba | ||
|
|
0bf1789464 | ||
|
|
fe6acf07a5 | ||
|
|
8e888b4435 | ||
|
|
47e99ecb54 | ||
|
|
3b80f67e4d | ||
|
|
71d3dc6e44 | ||
|
|
f111380674 | ||
|
|
d52105b3b8 | ||
|
|
a4ca585ef2 | ||
|
|
076461a1b6 | ||
|
|
0c7407ebb6 | ||
|
|
f13a3fa549 | ||
|
|
c0a65eb593 | ||
|
|
450a7730d3 | ||
|
|
41ee4b642f | ||
|
|
d42c59792f | ||
|
|
7c105019d8 | ||
|
|
ee566723d7 | ||
|
|
23a80770e1 | ||
|
|
10e6ae2094 | ||
|
|
e2286a4c48 | ||
|
|
3ee3c52e14 | ||
|
|
e76a5bfd85 | ||
|
|
59c89a3b9d | ||
|
|
272d6e7437 | ||
|
|
45e5c4eb46 | ||
|
|
d9b7c012a6 | ||
|
|
270288f730 | ||
|
|
1e55d064ab | ||
|
|
e796fd1e11 | ||
|
|
b0039e938e | ||
|
|
8fc605037a | ||
|
|
311ddf82c5 | ||
|
|
9d65486c64 | ||
|
|
624eda297f | ||
|
|
ccce7751a0 | ||
|
|
7252f0b490 | ||
|
|
094d2e586a | ||
|
|
6c1507c88c | ||
|
|
60f48326e1 | ||
|
|
26db326483 | ||
|
|
d816f797a4 | ||
|
|
0e827b6ae6 | ||
|
|
049acde5b0 | ||
|
|
733a9bb2e1 | ||
|
|
9ac769e4f8 | ||
|
|
2157f93f36 | ||
|
|
5b985a924b | ||
|
|
ee74989f74 | ||
|
|
3651ef53e3 | ||
|
|
e2fc7e8cd7 | ||
|
|
aff55881df | ||
|
|
4d066a075d | ||
|
|
201077b6f6 | ||
|
|
dae5c94be0 | ||
|
|
03ea257711 | ||
|
|
df95115e2e | ||
|
|
5fea012eab | ||
|
|
a2981870ce | ||
|
|
60e87cd496 | ||
|
|
ac1c0b0715 | ||
|
|
6575af6b93 | ||
|
|
0e95ca7b69 | ||
|
|
630ff2abb4 | ||
|
|
7611cfddae | ||
|
|
ef75f7e650 | ||
|
|
478eefb74c | ||
|
|
795134c084 | ||
|
|
4f689223b4 | ||
|
|
70ce7293ac | ||
|
|
94a0a3b568 | ||
|
|
69305f0509 | ||
|
|
24f48b11e6 | ||
|
|
ff3b48fa59 | ||
|
|
db3f478598 | ||
|
|
e20ac803f3 | ||
|
|
ea283365e7 | ||
|
|
8211830bd8 | ||
|
|
2a8e0f9404 | ||
|
|
c15cfc26f1 | ||
|
|
4f4e6938eb | ||
|
|
8545a547b9 | ||
|
|
3bb7184f28 | ||
|
|
74c4f12b27 | ||
|
|
5af18c2d8a | ||
|
|
d38620bad2 | ||
|
|
3621b1a0d0 | ||
|
|
4347f624d8 | ||
|
|
bfb1a82754 | ||
|
|
d1672f8818 | ||
|
|
353e132cf9 | ||
|
|
ccb3a75281 | ||
|
|
cf3ca5a661 | ||
|
|
e4eee1cdfc | ||
|
|
f4776731ec | ||
|
|
dd71942a5e | ||
|
|
19fdd5e151 | ||
|
|
f537dc632e | ||
|
|
2221006970 | ||
|
|
5d29c5958b | ||
|
|
0fe72376b1 | ||
|
|
64dd46c7e4 | ||
|
|
8df382d976 | ||
|
|
3a447d5515 | ||
|
|
75aa1c7b80 | ||
|
|
f1697c6856 | ||
|
|
3c1ea5d0fb | ||
|
|
59d3f5c4ea | ||
|
|
4a1b4e0485 | ||
|
|
083d1acb81 | ||
|
|
c5650bb278 | ||
|
|
a795b95f7e | ||
|
|
b67859832a | ||
|
|
eb00e20269 | ||
|
|
b797b08bcf | ||
|
|
e4abbfb2c6 | ||
|
|
28de9b8913 | ||
|
|
acc9ca7d7d | ||
|
|
497afcc1e4 | ||
|
|
571e9801f3 | ||
|
|
31c58409e1 | ||
|
|
5abfe821bc | ||
|
|
05d4c127ee | ||
|
|
1c94625042 | ||
|
|
a74ed33b0e | ||
|
|
e03593d86f | ||
|
|
3d6c2c5fef | ||
|
|
54834c47f8 | ||
|
|
d0bfd7e19a | ||
|
|
1a807416b8 | ||
|
|
5f8870d448 | ||
|
|
375a140343 | ||
|
|
7002319cc8 | ||
|
|
e6acae5f94 | ||
|
|
1a8f144f5c | ||
|
|
b7682ca9e8 | ||
|
|
196784474d | ||
|
|
d104544d6f | ||
|
|
dd55226455 | ||
|
|
047bed2a86 | ||
|
|
cdae0c2bef | ||
|
|
c7825e391c | ||
|
|
bf6345aa90 | ||
|
|
3fcae36cf1 | ||
|
|
69eb6b11d0 | ||
|
|
1f2d4fd2b3 | ||
|
|
21468fff25 | ||
|
|
4711b4d529 | ||
|
|
29d4859e02 | ||
|
|
4b81d86311 | ||
|
|
38963e7960 | ||
|
|
3e3880823b | ||
|
|
1584d51433 | ||
|
|
98571c62a6 | ||
|
|
69f525bfd3 | ||
|
|
2b31154834 | ||
|
|
b0948ea018 | ||
|
|
a50e4e3380 | ||
|
|
5564664b13 | ||
|
|
1ae5a2c808 | ||
|
|
0181a25d70 | ||
|
|
60ba4a9830 | ||
|
|
3802a78c9d | ||
|
|
0ca6d73614 | ||
|
|
aa77f8f0d2 | ||
|
|
7767692394 | ||
|
|
5077ff169e | ||
|
|
b21b6238cf | ||
|
|
cf89984c7a | ||
|
|
707aad234e | ||
|
|
5b851a2d09 | ||
|
|
bb5ded2039 | ||
|
|
381796e708 | ||
|
|
62fc7717c8 | ||
|
|
b07a7ba9bc | ||
|
|
97e7ef9a3f | ||
|
|
5cbc978cad | ||
|
|
e19451bb4f | ||
|
|
85f588e8c9 | ||
|
|
ea644868a6 | ||
|
|
d08accaaf1 | ||
|
|
f49272cacb | ||
|
|
c8713d94d8 | ||
|
|
be8fef0228 | ||
|
|
b584f09223 | ||
|
|
d2968c95df | ||
|
|
7421e5f7d7 | ||
|
|
0b2a43cfcc | ||
|
|
50309d3ab3 | ||
|
|
dd0b16bff5 | ||
|
|
d5443adc74 | ||
|
|
9152ba72f1 | ||
|
|
ff396b5953 | ||
|
|
21e0e6e495 | ||
|
|
72e17914e2 | ||
|
|
17aa37ae21 | ||
|
|
94c116617a | ||
|
|
aed23d61fc | ||
|
|
076ca46ab4 | ||
|
|
02519b270e | ||
|
|
5aa7dedccb | ||
|
|
6383dfa854 | ||
|
|
5a4fb0323b | ||
|
|
e84a282aa6 | ||
|
|
f732493473 | ||
|
|
f66a265fcf | ||
|
|
0f58faaddb | ||
|
|
f1472d218e | ||
|
|
d65c05aacd | ||
|
|
2b28ffa2f4 | ||
|
|
10ec31df3e | ||
|
|
184b1055dc | ||
|
|
447a5f01a9 | ||
|
|
eaec25e6c2 | ||
|
|
3e277de82d | ||
|
|
8b07fbc554 | ||
|
|
bff7400de4 | ||
|
|
1024adca72 | ||
|
|
ededa69e4a | ||
|
|
6d48ce4a25 | ||
|
|
00a8fd654e | ||
|
|
b63e29610e | ||
|
|
58f7eb319f | ||
|
|
453f2ab02d | ||
|
|
3002382edc | ||
|
|
bfc695434c | ||
|
|
1e80cc6db5 | ||
|
|
b0db5a8b0a | ||
|
|
d3e2241ff7 | ||
|
|
e90b9f6c19 | ||
|
|
4c1199e009 | ||
|
|
65471068b6 | ||
|
|
7aa1fabbd7 | ||
|
|
85c06372ff | ||
|
|
c6467a824b | ||
|
|
271b7adeb8 | ||
|
|
b1d1f3c6b2 | ||
|
|
574c2e2770 | ||
|
|
aec2d233c9 | ||
|
|
39418f2bbe | ||
|
|
ccda73494f | ||
|
|
443b4ccc57 | ||
|
|
88ac0f5d34 | ||
|
|
511aedd5db | ||
|
|
2524290099 | ||
|
|
01e8017265 | ||
|
|
8338fc405f | ||
|
|
0a22b3990f | ||
|
|
954d81147e | ||
|
|
fa1e28e860 | ||
|
|
662cafe416 | ||
|
|
ea961ba8f2 | ||
|
|
8c8774cd2f | ||
|
|
2fe02ddb1f | ||
|
|
e11e8a5d64 | ||
|
|
0978777eec | ||
|
|
79bebf7c9b | ||
|
|
8d3b660ce0 | ||
|
|
9de53fe070 | ||
|
|
ecb9fc65b7 | ||
|
|
7b25d0379f | ||
|
|
05d4176d34 | ||
|
|
7b0dff88ae | ||
|
|
1c7604e0fe | ||
|
|
e18dc43aae | ||
|
|
caaad684a4 | ||
|
|
cdd51aee75 | ||
|
|
51851f6c99 | ||
|
|
ab98aa489c | ||
|
|
5829985ca8 | ||
|
|
2fa8e27f05 | ||
|
|
68f92dfd5d | ||
|
|
67aeb380e7 | ||
|
|
f7d91b7139 | ||
|
|
b6e157f393 | ||
|
|
2319fce092 | ||
|
|
a5f1707662 | ||
|
|
6cda55da06 | ||
|
|
8e69961744 | ||
|
|
9f53497e39 | ||
|
|
ae3c871438 | ||
|
|
1edf80db8e | ||
|
|
791cc093f4 | ||
|
|
4c15f4a84f | ||
|
|
3bb485d0b8 | ||
|
|
c3f2fee633 | ||
|
|
1f575a2a47 | ||
|
|
13c4d13157 | ||
|
|
43fadab3bb | ||
|
|
82a0240d2e | ||
|
|
f2aa35d3d2 | ||
|
|
9c9fcaf42f | ||
|
|
146a51ceba | ||
|
|
b0350e9e96 | ||
|
|
e0126d971c | ||
|
|
b60ace80be | ||
|
|
b3ea007e0a | ||
|
|
a0d6cb1fd3 | ||
|
|
7b66dae2f0 | ||
|
|
35e346c4b9 | ||
|
|
3982f13569 | ||
|
|
21356b487a | ||
|
|
1987647cc3 | ||
|
|
e9910d1fe2 | ||
|
|
4c5a5c70b0 | ||
|
|
a0836b6876 | ||
|
|
e0319cc894 | ||
|
|
4075cc8518 | ||
|
|
8ca09ec07f | ||
|
|
ba85101d30 | ||
|
|
a237c01b4b | ||
|
|
99d5013de3 | ||
|
|
a58f1c6a7d | ||
|
|
a748083f26 | ||
|
|
6e9afccfd7 | ||
|
|
04fb5e544d | ||
|
|
542534aeba | ||
|
|
908a2824ba | ||
|
|
77dd684916 | ||
|
|
bffd22038b | ||
|
|
a03ae295f6 | ||
|
|
544d991e1e | ||
|
|
083fda3172 | ||
|
|
e0cfd5e49b | ||
|
|
2dd165bbef | ||
|
|
cab9733b60 | ||
|
|
99e0dcec76 | ||
|
|
9dafb36c88 | ||
|
|
3d7d19b608 | ||
|
|
d650d10cb2 | ||
|
|
7fe45018e9 | ||
|
|
4c4cab87fb | ||
|
|
94c7f64baf | ||
|
|
f369b5f588 | ||
|
|
37065b7c50 | ||
|
|
0a7372460f | ||
|
|
063abc8ef7 | ||
|
|
d64c88786e | ||
|
|
fb4511d099 | ||
|
|
7343ae7339 | ||
|
|
cb6342c874 | ||
|
|
01997efcbe | ||
|
|
7926225e9b | ||
|
|
1aafcf241f | ||
|
|
1eeac7f4f4 | ||
|
|
2c01e178c7 | ||
|
|
36d2422eef | ||
|
|
70f257b1ea | ||
|
|
275560698f | ||
|
|
d4b6fe14c3 | ||
|
|
f1350a1022 | ||
|
|
344fb638fd | ||
|
|
373cc74a33 | ||
|
|
8e95ac42c2 | ||
|
|
ceb941df81 | ||
|
|
d275538116 | ||
|
|
fa38cdbc0d | ||
|
|
7569544b7b | ||
|
|
853a52f3ca | ||
|
|
5e32c69e0e | ||
|
|
39a0b15df4 | ||
|
|
a0db10838b | ||
|
|
f2f10dff92 | ||
|
|
7ba45b2887 | ||
|
|
c91eb8f406 | ||
|
|
57a78b3cad | ||
|
|
b755c7dab3 | ||
|
|
9ffd791ae4 | ||
|
|
8af12b22bb | ||
|
|
17ba0a97d5 | ||
|
|
4ae2b4e0b9 | ||
|
|
872691a138 | ||
|
|
3a54ecb522 | ||
|
|
71b4641e18 | ||
|
|
42b590af77 | ||
|
|
b15ecf7649 | ||
|
|
df4f80e773 | ||
|
|
b8b485af4d | ||
|
|
892d6b55ec | ||
|
|
4a3bc8d365 | ||
|
|
e12da72615 | ||
|
|
f95e510060 | ||
|
|
82932ae7a5 | ||
|
|
ae55ca7fd7 | ||
|
|
d69a314bbf | ||
|
|
e35aa4bd1e | ||
|
|
eaa1165611 | ||
|
|
14fc37a8b8 | ||
|
|
7b23856cc8 | ||
|
|
85f9690377 | ||
|
|
4723500c5f | ||
|
|
2db82a73a5 | ||
|
|
b00eeb86ea | ||
|
|
628e186846 | ||
|
|
cf4a55bc2f | ||
|
|
ed6a160372 | ||
|
|
7dc4e00b4d | ||
|
|
e0d7511eaa | ||
|
|
7777922bef | ||
|
|
5bd223a468 | ||
|
|
7c60e3c0ff | ||
|
|
e529d7fd3b | ||
|
|
5f9f0e3ed3 | ||
|
|
e91a76c936 | ||
|
|
cab07c7c4b | ||
|
|
7735a539e9 | ||
|
|
68eb6fc3c1 | ||
|
|
1dd3d2ec48 | ||
|
|
ea6cdc9673 | ||
|
|
134742a8b7 | ||
|
|
d8be8e25a5 | ||
|
|
1902ecb8ca | ||
|
|
124302908a | ||
|
|
0d3b50a5e5 | ||
|
|
419f86a4a5 | ||
|
|
fd785fc9a5 | ||
|
|
8d06908353 | ||
|
|
806706ca1d | ||
|
|
28f577738a | ||
|
|
044e203eab | ||
|
|
fcc7207b67 | ||
|
|
8dbd3f332b | ||
|
|
f43ec7c05d | ||
|
|
997e88af00 | ||
|
|
ff9dde54e3 | ||
|
|
3699f16848 | ||
|
|
fee2ac2ebd | ||
|
|
57d3bfcfc9 | ||
|
|
b92e34556f | ||
|
|
b6ff55309e | ||
|
|
305d88ebda | ||
|
|
cdc73d4f56 | ||
|
|
0e50c964d5 | ||
|
|
863fb9aa47 | ||
|
|
298fb00a3e | ||
|
|
d1e8c06d36 | ||
|
|
8ed79d5973 | ||
|
|
85b10b59e4 | ||
|
|
9a53c22833 | ||
|
|
c981b5cba0 | ||
|
|
4ffa823ab8 | ||
|
|
001c7e4b18 | ||
|
|
402136dc8f | ||
|
|
59ee30f056 | ||
|
|
c795068a78 | ||
|
|
5ce080779b | ||
|
|
8d3b296eed | ||
|
|
cfdb985d00 | ||
|
|
af6f0db284 | ||
|
|
491eac184e | ||
|
|
414d33eb26 | ||
|
|
2dad35186a | ||
|
|
6dd6094088 | ||
|
|
2ec64a2ea2 | ||
|
|
5c34a75032 | ||
|
|
91f33d3289 | ||
|
|
c50dc1eb35 | ||
|
|
dc1331e736 | ||
|
|
afc866eee4 | ||
|
|
b6d93b7c5b | ||
|
|
5d6158dd64 | ||
|
|
f2f6edabf9 | ||
|
|
e9549ab0bd | ||
|
|
779249ff81 | ||
|
|
66d206a710 | ||
|
|
bfc1cab6df | ||
|
|
5b0c79629e | ||
|
|
7922d3909a | ||
|
|
ee6e2e0af1 | ||
|
|
326a6be91c | ||
|
|
58095e1916 | ||
|
|
3dae077b4d | ||
|
|
7c14c0812b | ||
|
|
3a05eda63a | ||
|
|
d850b3ac7e | ||
|
|
08de6c32c9 | ||
|
|
91fe158c26 | ||
|
|
661b3c4bfb | ||
|
|
35eabc0353 | ||
|
|
ef5bbdb1e2 | ||
|
|
88fae2171d | ||
|
|
7d99e15dc3 | ||
|
|
d2d2978288 | ||
|
|
8680981990 | ||
|
|
78ca6f1a87 | ||
|
|
62e5680eaf | ||
|
|
de698154cd | ||
|
|
1df05715c2 | ||
|
|
e5524da40e | ||
|
|
50d393e0f9 | ||
|
|
cd08836f3e | ||
|
|
45ac1cfd54 | ||
|
|
dda11ec69e | ||
|
|
7be6206d9d | ||
|
|
4d896573b1 | ||
|
|
988383648c | ||
|
|
d59847537d | ||
|
|
36859d89c8 | ||
|
|
cc50e22928 | ||
|
|
13414dcd25 | ||
|
|
ba8b593351 | ||
|
|
aebfccfd4b | ||
|
|
5a59f2352c | ||
|
|
5164b78da1 | ||
|
|
5561b46a59 | ||
|
|
26b2431cbf | ||
|
|
029605f926 | ||
|
|
0cd173f9df | ||
|
|
414810bdf5 | ||
|
|
f94c1e91ea | ||
|
|
b7129e1456 | ||
|
|
dc6decd404 | ||
|
|
40c6b172f7 | ||
|
|
7cb9cedfe1 | ||
|
|
b43980d660 | ||
|
|
09b612546b | ||
|
|
a99d14c13f | ||
|
|
68f322a03b | ||
|
|
97f0414ff3 | ||
|
|
d5f308d9c9 | ||
|
|
1377eda0ba | ||
|
|
70259b0d04 | ||
|
|
f1466d6da3 | ||
|
|
ca07a88674 | ||
|
|
83010e278c | ||
|
|
dcfd332cbf | ||
|
|
dc3040550d | ||
|
|
3b25db919a | ||
|
|
09f038f997 | ||
|
|
bbdd3804c7 | ||
|
|
a0b9ac7bcc | ||
|
|
8bb0cba949 | ||
|
|
870aa3a265 | ||
|
|
86ada33577 | ||
|
|
869808b3f9 | ||
|
|
57ccbf44b8 | ||
|
|
416caa8f50 | ||
|
|
1e42fecf66 | ||
|
|
c9b00891ed | ||
|
|
497eacbea3 | ||
|
|
f90c591c78 | ||
|
|
175498940e | ||
|
|
eded00cbb3 | ||
|
|
038d7e0fa6 | ||
|
|
b7c9ca720a | ||
|
|
7072f207c0 | ||
|
|
5f59f458f4 | ||
|
|
b6fe613329 | ||
|
|
cd128e557c | ||
|
|
30a5c70260 | ||
|
|
beca978af5 | ||
|
|
98a830a6a0 | ||
|
|
ed2231e34b | ||
|
|
55049bb303 | ||
|
|
c210c6937b | ||
|
|
d2767f39f0 | ||
|
|
1c9d39d3e6 | ||
|
|
f16c6d81cf | ||
|
|
e8d6281007 | ||
|
|
8299845615 | ||
|
|
9ae5865c2d | ||
|
|
c2d0cfdfc0 | ||
|
|
5dd252731e | ||
|
|
7b9436d2b9 | ||
|
|
6a369ac985 | ||
|
|
23d90823a3 | ||
|
|
4bfb6b476c | ||
|
|
0d60099588 | ||
|
|
9a45547cda | ||
|
|
a000ded350 | ||
|
|
424ac29131 | ||
|
|
b7b5a5788f | ||
|
|
9de179cba8 | ||
|
|
94069e76c9 | ||
|
|
df9d67b873 | ||
|
|
6f7fbf7686 | ||
|
|
f32e694499 | ||
|
|
e5900a3fe3 | ||
|
|
6e151b044d | ||
|
|
516bea6a0a | ||
|
|
496cabcc53 | ||
|
|
d051db5083 | ||
|
|
660fc23e15 | ||
|
|
a5a480133f | ||
|
|
68b544c676 | ||
|
|
a8c958ece2 | ||
|
|
f77f7ca0ec | ||
|
|
6b21c8453f | ||
|
|
fa8a8abc98 | ||
|
|
80048bfa2b | ||
|
|
641a9bc6c5 | ||
|
|
0edf9b17f6 | ||
|
|
98cc36c458 | ||
|
|
f3beabba69 | ||
|
|
467fa5a847 | ||
|
|
50f283cf28 | ||
|
|
f49d7008a0 | ||
|
|
1fed564c47 | ||
|
|
bb99c3e6f9 | ||
|
|
8820cac792 | ||
|
|
ada911c20b | ||
|
|
17e01644f5 | ||
|
|
9458521f3e | ||
|
|
8aa73c5900 | ||
|
|
500f213c6b | ||
|
|
cede27b5fe | ||
|
|
c0ca1eaf90 | ||
|
|
b29a5511df | ||
|
|
49e77841e0 | ||
|
|
daf6c8e327 | ||
|
|
9f8068e8d1 | ||
|
|
0b705553a5 | ||
|
|
a799094227 | ||
|
|
d529c1b5b3 | ||
|
|
834f68e6e4 | ||
|
|
83b2102705 | ||
|
|
2f064cdfd1 | ||
|
|
6c28182dd3 | ||
|
|
3cb8c5db28 | ||
|
|
251abdb4dd | ||
|
|
726e4df54b | ||
|
|
bd32a6ac8e | ||
|
|
27d7400c36 | ||
|
|
53e52aeaa8 | ||
|
|
ae6ed97a80 | ||
|
|
34f24de3e4 | ||
|
|
f93d6813a9 | ||
|
|
3ad773beb3 | ||
|
|
be91235858 | ||
|
|
95fc0bbc94 | ||
|
|
9dad7e4daf | ||
|
|
d08ed9fe5f | ||
|
|
82210cc116 | ||
|
|
94d3e76517 | ||
|
|
3f72492a59 | ||
|
|
c0653da736 | ||
|
|
f3d8f1b1fb | ||
|
|
d2391b9c63 | ||
|
|
f8e44c09eb | ||
|
|
2a00519b93 | ||
|
|
3292a2aecc | ||
|
|
b7aa44837f | ||
|
|
17fd6e692e | ||
|
|
2ce8ef5704 | ||
|
|
7b7afd3e7b | ||
|
|
9c2514fce4 | ||
|
|
e04402ed57 | ||
|
|
3eda8d8482 | ||
|
|
79f2f03fb2 | ||
|
|
f7d0db9cd2 | ||
|
|
fab1d3651b | ||
|
|
e5d7578663 | ||
|
|
cf80c1a506 | ||
|
|
4649ab2d85 | ||
|
|
773fd47ca6 | ||
|
|
2fd526b359 | ||
|
|
830cf4b31f | ||
|
|
2826f27153 | ||
|
|
83ac869693 | ||
|
|
bc92f9221a | ||
|
|
c2f85a2877 | ||
|
|
0bbd186635 | ||
|
|
806dcd74ec | ||
|
|
93772e7265 | ||
|
|
9094f07290 | ||
|
|
0aae155c80 | ||
|
|
54233aba1b | ||
|
|
bd3d2c60d9 | ||
|
|
2e75a111ed | ||
|
|
e4b0359b8e | ||
|
|
803e0bfe72 | ||
|
|
a5024a65a0 | ||
|
|
734a00237a | ||
|
|
06f1d15283 | ||
|
|
ff3edc9889 | ||
|
|
8f1acb700d | ||
|
|
519884d167 | ||
|
|
3f0a98acbd | ||
|
|
c023e5f518 | ||
|
|
67c73768c1 | ||
|
|
bbb98083eb | ||
|
|
8bb9f4b8a2 | ||
|
|
96cde7d4af | ||
|
|
ea39c8a4c1 | ||
|
|
7a55832a22 | ||
|
|
7a97d5d4eb | ||
|
|
8305f6d1f5 | ||
|
|
dcececf9c0 | ||
|
|
839afe5ac0 | ||
|
|
c72f25c693 | ||
|
|
5fc373f5cc | ||
|
|
cf9eaf2eff | ||
|
|
04d145d6d8 | ||
|
|
76d73abd81 | ||
|
|
0ec0185d84 | ||
|
|
7b1335825b | ||
|
|
2c2e37e9f0 | ||
|
|
25957bfae3 | ||
|
|
11e2200acf | ||
|
|
f5356b84f6 | ||
|
|
db2d71ed9e | ||
|
|
1bf100ba15 | ||
|
|
7614f423e5 | ||
|
|
318c8b85e9 | ||
|
|
7085fe77da | ||
|
|
2e20d7f02b | ||
|
|
831065b5a1 | ||
|
|
b97167e841 | ||
|
|
19bacc9e23 | ||
|
|
61b61b1bc0 | ||
|
|
7c3318df92 | ||
|
|
d0b85586b9 | ||
|
|
cef0d168a5 | ||
|
|
3a192223a3 | ||
|
|
288a1d23e5 | ||
|
|
7c05db8e2f | ||
|
|
18080a969e | ||
|
|
412430e1c3 | ||
|
|
131e433880 | ||
|
|
b7c0e8b71f | ||
|
|
264652f2c3 | ||
|
|
2cb53a0f7e | ||
|
|
7625a2dd3c | ||
|
|
93da5a39be | ||
|
|
aeb4996ac2 | ||
|
|
330c498fe4 | ||
|
|
5d0a7cb307 | ||
|
|
8c27ff3859 | ||
|
|
736d6cb675 | ||
|
|
200aca470b | ||
|
|
b2dc6c5d3d | ||
|
|
a5ec0ee277 | ||
|
|
f48d7aedce | ||
|
|
bb4f3e1789 | ||
|
|
e0230ed104 | ||
|
|
704fdf9ccd | ||
|
|
d528614cbf | ||
|
|
b5e8157700 | ||
|
|
339776c139 | ||
|
|
87e07e731d | ||
|
|
3991115ae5 | ||
|
|
a30e7bf34f | ||
|
|
43b983054a | ||
|
|
d3364ef4d1 | ||
|
|
24d6941cc4 | ||
|
|
4099dd3a05 | ||
|
|
f420435b82 | ||
|
|
696fe7bc0d | ||
|
|
7c147db324 | ||
|
|
32205045ba | ||
|
|
1ce9192369 | ||
|
|
0a62f75a40 | ||
|
|
2e0f15b35f | ||
|
|
7c60089692 | ||
|
|
0a8788eb97 | ||
|
|
9565addcd4 | ||
|
|
6377d475fc | ||
|
|
fff124ebb1 | ||
|
|
033db83068 | ||
|
|
de5c9ef4b2 | ||
|
|
3c261b05d9 | ||
|
|
ada81e31c9 | ||
|
|
0f68ecda78 | ||
|
|
1902e112f6 | ||
|
|
96565c31d9 | ||
|
|
aa9e68e121 | ||
|
|
15e011ae52 | ||
|
|
a173083e5b | ||
|
|
33c0c8cf6a | ||
|
|
9b5f45aee1 | ||
|
|
93de6c9f88 | ||
|
|
0ad440fea5 | ||
|
|
8235b339ee | ||
|
|
3185cd0b1f | ||
|
|
3a85edba3d | ||
|
|
a573a35349 | ||
|
|
d67d3f8d6d | ||
|
|
1e317f82f5 | ||
|
|
acdebea7f1 | ||
|
|
a090955918 | ||
|
|
70f71e0f57 | ||
|
|
dfdeac4968 | ||
|
|
e84f2e3ad2 | ||
|
|
98ca4f5b5a | ||
|
|
87779b7b88 | ||
|
|
b56cae24c5 | ||
|
|
d48a68317d | ||
|
|
77bd26d17f | ||
|
|
4cdc2601f5 | ||
|
|
ff5c274048 | ||
|
|
561e06e7f0 | ||
|
|
626a446c3d | ||
|
|
26d2da7b98 | ||
|
|
66ed39b4b7 | ||
|
|
fbf91dda7d | ||
|
|
41ff1d0fc9 | ||
|
|
64d8512fc3 | ||
|
|
94804fecd8 | ||
|
|
559dc2f865 | ||
|
|
7c0f32e8ee | ||
|
|
82243732a1 | ||
|
|
61d2158f76 | ||
|
|
68081fb9a2 | ||
|
|
8276933dbb | ||
|
|
0d84338e28 | ||
|
|
2423e0872f | ||
|
|
35c967e6f7 | ||
|
|
b92de63245 | ||
|
|
8b529abfe1 | ||
|
|
a01068949c | ||
|
|
b07e88869a | ||
|
|
94bd27bcf5 | ||
|
|
78ecc8673c | ||
|
|
7e26d92190 | ||
|
|
dbe2f8a6f1 | ||
|
|
e96f5447f4 | ||
|
|
5193fa6483 | ||
|
|
e1e2c76ae1 | ||
|
|
a3e7cab935 | ||
|
|
c06b3374ce | ||
|
|
6f66138a18 | ||
|
|
334c97035e | ||
|
|
1c6a84659c | ||
|
|
3a3ed8bf64 | ||
|
|
001ab1d067 | ||
|
|
4932e4f8c6 | ||
|
|
6f05f17c62 | ||
|
|
cfb3897047 | ||
|
|
8c058dcd45 | ||
|
|
7b70129974 | ||
|
|
6a4becfb46 | ||
|
|
4a7159389e | ||
|
|
a66501250e | ||
|
|
efb41b7433 | ||
|
|
090df05193 | ||
|
|
2c161c01c1 | ||
|
|
fc5a23cc88 | ||
|
|
73f2f9fc63 | ||
|
|
eb4b4a6c8d | ||
|
|
39430e01de | ||
|
|
96015aa590 | ||
|
|
c1720505f3 | ||
|
|
5c338a90a1 | ||
|
|
f04dc55030 | ||
|
|
38bc5de3e8 | ||
|
|
7c56b21095 | ||
|
|
8d0ed99bcd | ||
|
|
8375995680 | ||
|
|
0afd3e6189 | ||
|
|
79cee12b1e | ||
|
|
ba7361bdc7 | ||
|
|
554b44b9f2 | ||
|
|
b44a5ea609 | ||
|
|
487d67768b | ||
|
|
f485a47b48 | ||
|
|
faf1e6a43d | ||
|
|
f193f0d3f9 | ||
|
|
2e78568d4d | ||
|
|
aa5c42683a | ||
|
|
0c72c20d2a | ||
|
|
9c6938e7ae | ||
|
|
811c21ec7e | ||
|
|
84c14aadc7 | ||
|
|
f1f0d9cd0d | ||
|
|
717fd760df | ||
|
|
075f4907ef | ||
|
|
b7317bfe29 | ||
|
|
01d3c062f2 | ||
|
|
6af5a884cd | ||
|
|
6015c47587 | ||
|
|
33ea8763d5 | ||
|
|
2c2c2e9060 | ||
|
|
64dad7dbd2 | ||
|
|
176bd2396b | ||
|
|
e16942dea5 | ||
|
|
12efcec3b0 | ||
|
|
a7b6c40596 | ||
|
|
b95773938d | ||
|
|
6898ae7106 | ||
|
|
909b83c537 | ||
|
|
fb9da87abb | ||
|
|
bdf359470e | ||
|
|
4c475c1b33 | ||
|
|
438b4b4758 | ||
|
|
01f791a44e | ||
|
|
43f2d4a331 | ||
|
|
95ed07a95e | ||
|
|
ec0560a2c5 | ||
|
|
ac2cd552b9 | ||
|
|
1c73bd5079 | ||
|
|
138af27bf7 | ||
|
|
445e16f668 | ||
|
|
90e9f34494 | ||
|
|
5271680483 | ||
|
|
38f6d22d2d | ||
|
|
8b80b0c3df | ||
|
|
8e1535f7ec | ||
|
|
3e7922e41e | ||
|
|
1a4f8c5422 | ||
|
|
66c4d23119 | ||
|
|
d66fc8f661 | ||
|
|
031876964f | ||
|
|
5a6190e321 | ||
|
|
18c3bb673f | ||
|
|
6463fd902c | ||
|
|
c63766c4c6 | ||
|
|
af6237e12e | ||
|
|
00328226ec | ||
|
|
b31ba4e9d2 | ||
|
|
4be5d3f9e9 | ||
|
|
53154746fc | ||
|
|
2f4c1b6e8f | ||
|
|
045ec7d3a0 | ||
|
|
b73db750e5 | ||
|
|
3f766ffea8 | ||
|
|
f28761202f | ||
|
|
6d1f07df05 | ||
|
|
eb9f2b36ab | ||
|
|
ca59cd1eb8 | ||
|
|
2bd29127dc | ||
|
|
3eef6363fd | ||
|
|
d451f30bfc | ||
|
|
105956f8e6 | ||
|
|
39256afb67 | ||
|
|
69aaf28b9c | ||
|
|
b806220074 | ||
|
|
d2bdf4e822 | ||
|
|
3ab5682e7a | ||
|
|
c0010ec100 | ||
|
|
6897c5fadd | ||
|
|
745aa23ed6 | ||
|
|
9089f5cf67 | ||
|
|
dd79aae137 | ||
|
|
26e470f521 | ||
|
|
a34c8b80e5 | ||
|
|
854a12982f | ||
|
|
cf173d4f50 | ||
|
|
7041486b93 | ||
|
|
548a8c3be3 | ||
|
|
087a018faf | ||
|
|
e09024e86f | ||
|
|
1757102536 | ||
|
|
9c8432cf13 | ||
|
|
c262af550d | ||
|
|
d9c6609b24 | ||
|
|
339bcb89bb | ||
|
|
b5884a5b54 | ||
|
|
c818d63043 | ||
|
|
c9c537a1b9 | ||
|
|
1be748b479 | ||
|
|
376c776520 | ||
|
|
a1f271d7d9 | ||
|
|
724997cb48 | ||
|
|
f3fe3f9a18 | ||
|
|
357a5d1e65 | ||
|
|
460e3fd5d6 | ||
|
|
257c0afdb5 | ||
|
|
ed3bc7cdcc | ||
|
|
bd181ac84f | ||
|
|
d1f5988db7 | ||
|
|
a5b99e7148 | ||
|
|
114500e7f4 | ||
|
|
d9f178e315 | ||
|
|
7337630704 | ||
|
|
0fdd081869 | ||
|
|
a9761e8dd2 | ||
|
|
1f1a05dc67 | ||
|
|
14b065cf5f | ||
|
|
47c3a20fda | ||
|
|
86aed4e073 | ||
|
|
19c984bdab | ||
|
|
84d83fbd14 | ||
|
|
965ba3aca1 | ||
|
|
38f34ddb28 | ||
|
|
6b3e0d3229 | ||
|
|
854121b6ec | ||
|
|
047425dadd | ||
|
|
8dc0767cdf | ||
|
|
a99753fb0f | ||
|
|
ad65e06d0a | ||
|
|
bfb37d6283 | ||
|
|
fd180e480a | ||
|
|
3e5452d9da | ||
|
|
3ec0fe5519 | ||
|
|
71449b3414 | ||
|
|
16f5e233d0 | ||
|
|
abb72868f2 | ||
|
|
13e9d57d68 | ||
|
|
833acc3618 | ||
|
|
db522f96be | ||
|
|
df8b76127e | ||
|
|
8e849566d5 | ||
|
|
dba9602c75 | ||
|
|
9e2364b246 | ||
|
|
b5aecfeb91 | ||
|
|
c7523ffc67 | ||
|
|
d87d860a57 | ||
|
|
68b1234388 | ||
|
|
8fda08a1b5 | ||
|
|
aaba4b534f | ||
|
|
6d32aa8a88 | ||
|
|
0214c388ae | ||
|
|
e443d719d4 | ||
|
|
d514290688 | ||
|
|
694bd231e3 | ||
|
|
8523ad166e | ||
|
|
7ec6b4ebb7 | ||
|
|
38172b793b | ||
|
|
6bccb6d90b | ||
|
|
3cf1d6baf4 | ||
|
|
2a1718bfc8 | ||
|
|
0db4092266 | ||
|
|
41dfdc0aaa | ||
|
|
6bc72109c1 | ||
|
|
55e9685d30 | ||
|
|
d2dcc51430 | ||
|
|
214c1d5a50 | ||
|
|
38be0b4976 | ||
|
|
b86847c57e | ||
|
|
8ba5d03280 | ||
|
|
879ffd648b | ||
|
|
030c573037 | ||
|
|
713e79c1a9 | ||
|
|
383cdb5340 | ||
|
|
7b3f6f1c67 | ||
|
|
9cb29f48a0 | ||
|
|
5e29679968 | ||
|
|
84f3ab90df | ||
|
|
34db2eb611 | ||
|
|
16d8981a3f | ||
|
|
e67c965180 | ||
|
|
b0abfee35b | ||
|
|
1e8ee5e59b | ||
|
|
cc0830bf28 | ||
|
|
e3e005e327 | ||
|
|
42afd80e82 | ||
|
|
0b2862be54 | ||
|
|
8d703ffb36 | ||
|
|
6f24a938d9 | ||
|
|
574b57eadb | ||
|
|
aa05097fca | ||
|
|
de58f53f9f | ||
|
|
e738ff2fa7 | ||
|
|
25f501fb12 | ||
|
|
baf045aed6 | ||
|
|
e813dda275 | ||
|
|
ca131f12db | ||
|
|
ca72b07947 | ||
|
|
13d8957cf1 | ||
|
|
ca11b74c8e | ||
|
|
2ba6a6fc45 | ||
|
|
a6e79a1d61 | ||
|
|
1f4263aa6d | ||
|
|
147a4cbfb0 | ||
|
|
ab0a2abc54 | ||
|
|
57abbf1058 | ||
|
|
2a95e1bf71 | ||
|
|
bd957612c6 | ||
|
|
908e6a7a38 | ||
|
|
4493c31216 | ||
|
|
7a813349f3 | ||
|
|
ad7b8a9ac8 | ||
|
|
a226f06b1b | ||
|
|
b55c85b2af | ||
|
|
0d1d14bcd6 | ||
|
|
8c1a01d5ab | ||
|
|
cf8fdacfa3 | ||
|
|
2c1745ce28 | ||
|
|
950ce94653 | ||
|
|
851f8a1585 | ||
|
|
d40d1638af | ||
|
|
26ceeb61ef | ||
|
|
a39a9c9b56 | ||
|
|
45988b9818 | ||
|
|
7234b3bbf8 | ||
|
|
513ecd7e26 | ||
|
|
e12314ba60 | ||
|
|
9226302742 | ||
|
|
0e8c6ee522 | ||
|
|
a9c1c8968e | ||
|
|
6a15c2ae86 | ||
|
|
752de0d9c0 | ||
|
|
49617a595d | ||
|
|
2a293d5d02 | ||
|
|
9d99ede024 | ||
|
|
4a13ee6f40 | ||
|
|
2ba840c72c | ||
|
|
46cd55151d | ||
|
|
4d9691c8e5 | ||
|
|
f1687ef53d | ||
|
|
2fb55374b9 | ||
|
|
312246fec2 | ||
|
|
27c0e6dd5e | ||
|
|
0d7986e082 | ||
|
|
94300b221e | ||
|
|
a1110b07de | ||
|
|
a3069239e9 | ||
|
|
69f083428d | ||
|
|
113358f2de | ||
|
|
caa2813d0d | ||
|
|
481046c8b8 | ||
|
|
83f70dc28c | ||
|
|
8ede7a9297 | ||
|
|
ddff193786 | ||
|
|
774dff07ee | ||
|
|
4b14b31853 | ||
|
|
b0addfbe13 | ||
|
|
593874b45f | ||
|
|
b207f28402 | ||
|
|
7bdde47473 | ||
|
|
a2eb0d80d2 | ||
|
|
6f94198934 | ||
|
|
707e51d855 | ||
|
|
528df76747 | ||
|
|
662c896480 | ||
|
|
29eb2383d6 | ||
|
|
9772c5705f | ||
|
|
d2fe59ae8f | ||
|
|
d5e5cdda23 | ||
|
|
f63dcb1f08 | ||
|
|
6f66b27507 | ||
|
|
909d127c27 | ||
|
|
20ef18f98f | ||
|
|
a33e47780b | ||
|
|
691c66d2f5 | ||
|
|
14d87a3584 | ||
|
|
d743dc160a | ||
|
|
2b263b054c | ||
|
|
b95e8350d2 | ||
|
|
5235866d05 | ||
|
|
093a86bc38 | ||
|
|
5b87232f59 | ||
|
|
679bbd3e76 | ||
|
|
515b6bf71a | ||
|
|
9c389d9dcb | ||
|
|
f1e4273a23 | ||
|
|
4618cc2b22 | ||
|
|
1909f0c733 | ||
|
|
840ea36f70 | ||
|
|
a8cdb3895b | ||
|
|
349733c6dd | ||
|
|
1c09ffdd1f | ||
|
|
c4c6fa6042 | ||
|
|
86da6c6c14 | ||
|
|
7b7b01a26b | ||
|
|
415313ac2f | ||
|
|
7db2b9d091 | ||
|
|
8036d1e5a5 | ||
|
|
65c9339687 | ||
|
|
3090981335 | ||
|
|
4f36885c5e | ||
|
|
db2993035d | ||
|
|
bf05bc2986 | ||
|
|
88b230f0e4 | ||
|
|
deb53d771d | ||
|
|
fd16c47d2e | ||
|
|
b78451742f | ||
|
|
6f23ab5603 | ||
|
|
5e67627e6b | ||
|
|
19e77ed456 | ||
|
|
ed0f792f04 | ||
|
|
deda1691e9 | ||
|
|
94d2ad120c | ||
|
|
ab1a5f32ef | ||
|
|
2a1de5e28c | ||
|
|
f78fdd6900 | ||
|
|
6b43eafcb4 | ||
|
|
844cd154b9 | ||
|
|
e05fa5c302 | ||
|
|
f5f74944dd | ||
|
|
556efcc1d7 | ||
|
|
25d1fe2c8d | ||
|
|
b44ec35ade | ||
|
|
1a478150d6 | ||
|
|
e5643fb1e2 | ||
|
|
13e633778a | ||
|
|
bb57600f0f | ||
|
|
9813f3b696 | ||
|
|
3203db07b7 | ||
|
|
94b8d36065 | ||
|
|
0d61dcb1bc | ||
|
|
58203dbcfa | ||
|
|
66619cdc2f | ||
|
|
99cba25108 | ||
|
|
2fb1d388e3 | ||
|
|
6a4ed099fc | ||
|
|
d184ed4712 | ||
|
|
125a562189 | ||
|
|
a02ba5f7bb | ||
|
|
2e90f22529 | ||
|
|
bd681f5908 | ||
|
|
85b61c0b7e | ||
|
|
d11ea67bdd | ||
|
|
52603c087b | ||
|
|
545474a1a3 | ||
|
|
b63c838c74 | ||
|
|
1c6fdea27f | ||
|
|
9d0e6f0c30 | ||
|
|
1d0c72f5fa | ||
|
|
c221b9b4d4 | ||
|
|
a0ba8380c9 | ||
|
|
82a209bc5b | ||
|
|
2a338110f2 | ||
|
|
e890944160 | ||
|
|
542e01775e | ||
|
|
9cc4992fad | ||
|
|
6518d87200 | ||
|
|
499005f84d | ||
|
|
8497965cf7 | ||
|
|
0b0ab9277c | ||
|
|
75c62ff729 | ||
|
|
aef8c5fbb5 | ||
|
|
cfa4f5677b | ||
|
|
8131feae8a | ||
|
|
a3d5e04946 | ||
|
|
1fc3c6d9d2 | ||
|
|
53a5bc2221 | ||
|
|
12f3c2596f | ||
|
|
87dad41c37 | ||
|
|
4dbb18d408 | ||
|
|
a7cb75d73d | ||
|
|
517c0e2fe6 | ||
|
|
84db2e90ab | ||
|
|
9d469874c0 | ||
|
|
d850aa0773 | ||
|
|
9baebfa241 | ||
|
|
9e1d2da449 | ||
|
|
a71604e79f | ||
|
|
9a8d33e6bf | ||
|
|
09d745d987 | ||
|
|
8199bb6b62 | ||
|
|
643939ea1e | ||
|
|
9b3498d87a | ||
|
|
e4a162b054 | ||
|
|
bd47d0850e | ||
|
|
be3b4f0d3e | ||
|
|
664b02d735 | ||
|
|
6d1b981ecb | ||
|
|
ac6b1bf422 | ||
|
|
10847e2956 | ||
|
|
9b0258fef4 | ||
|
|
5b89cdc868 | ||
|
|
5a8cedd63f | ||
|
|
3feba2997f | ||
|
|
fce419526d | ||
|
|
e8fb86a283 | ||
|
|
90a820e0cf | ||
|
|
9f59f99663 | ||
|
|
a6150f2578 | ||
|
|
b784705cd3 | ||
|
|
0609bcaaf0 | ||
|
|
7727ec91f4 | ||
|
|
5365c866ff | ||
|
|
e1fbe89b41 | ||
|
|
a72e23eddf | ||
|
|
dcd49fd97b | ||
|
|
1b074d2d53 | ||
|
|
aed07a8ec5 | ||
|
|
1b12185a39 | ||
|
|
2e895c734e | ||
|
|
11a9dc57fc | ||
|
|
badd92a50e | ||
|
|
b2faf8044d | ||
|
|
3105e9545a | ||
|
|
42c71984f9 | ||
|
|
736da4bcad | ||
|
|
db359719a9 | ||
|
|
7bceeb714b | ||
|
|
35b8fc6e83 | ||
|
|
6d27e11043 | ||
|
|
b8e387ce98 | ||
|
|
c7ebad0fbb | ||
|
|
1bb596fc7e | ||
|
|
7bcebd5b0f | ||
|
|
a8b6902829 | ||
|
|
71e6dc8275 | ||
|
|
564640213e | ||
|
|
b04f262642 | ||
|
|
b802127801 | ||
|
|
6845fb0f00 | ||
|
|
a312311be9 | ||
|
|
fe54acef51 | ||
|
|
ef057b3e45 | ||
|
|
84ab233571 | ||
|
|
cf381d732d | ||
|
|
8653b0f3d0 | ||
|
|
65659fb676 | ||
|
|
939bcfec4b | ||
|
|
6ce8dd5ac3 | ||
|
|
63f4d81bc0 | ||
|
|
d0fbbbfb37 | ||
|
|
f23dc2d405 | ||
|
|
34aa231436 | ||
|
|
51d1b6e0d6 | ||
|
|
7c8612aadd | ||
|
|
d347b97f20 | ||
|
|
42b961229f | ||
|
|
79f726e6cd | ||
|
|
31cd6898d4 | ||
|
|
7608ee8450 | ||
|
|
da67a35328 | ||
|
|
46d0af6cef | ||
|
|
0ea9c65007 | ||
|
|
57dc4c207f | ||
|
|
582b69de74 | ||
|
|
0cf9be2a8d | ||
|
|
0bf39590e3 | ||
|
|
2debeb7475 | ||
|
|
ee8fd701ae | ||
|
|
9379324b07 | ||
|
|
55cdbd57cc | ||
|
|
11836cdfb1 | ||
|
|
c411d2a9f1 | ||
|
|
1b612816cc | ||
|
|
051abc00c4 | ||
|
|
f7ee5e8d78 | ||
|
|
cc26bc4858 | ||
|
|
88d2441ab3 | ||
|
|
6842879985 | ||
|
|
1518a460d5 | ||
|
|
ea86321da8 | ||
|
|
c416fce400 | ||
|
|
ae28df8abd | ||
|
|
e8ba4b0564 | ||
|
|
53e21ceed4 | ||
|
|
735286d3b0 | ||
|
|
8ad958708f | ||
|
|
58862e115c | ||
|
|
0df67dbc12 | ||
|
|
8bdfa34c7d | ||
|
|
06c730f4dc | ||
|
|
afc8d5bbbf | ||
|
|
1de46f592c | ||
|
|
863048cda2 | ||
|
|
0b09365d0d | ||
|
|
8e3ab8d5c5 | ||
|
|
9cf560ceec | ||
|
|
c3a75d98d4 | ||
|
|
261372289a | ||
|
|
b86edd4a20 | ||
|
|
374cf146e2 | ||
|
|
08ed545065 | ||
|
|
80836c725c | ||
|
|
9fa2acfe85 | ||
|
|
3ba122afd4 | ||
|
|
76df55dfc0 | ||
|
|
49a949aa97 | ||
|
|
5413263eff | ||
|
|
772c76e0a4 | ||
|
|
5463fa7390 | ||
|
|
d18c83beb0 | ||
|
|
7aa89c2e73 | ||
|
|
007d660ce1 | ||
|
|
3752cb3e56 | ||
|
|
cdf8d91e1b | ||
|
|
d082442851 | ||
|
|
689f67b1a8 | ||
|
|
744f47cb98 | ||
|
|
81e1b7490e | ||
|
|
22d160b1da | ||
|
|
c323105696 | ||
|
|
f6746c7530 | ||
|
|
52c4d54481 | ||
|
|
4c3f584fa6 | ||
|
|
2e7d912bdd | ||
|
|
288bf477ce | ||
|
|
27f3816fc6 | ||
|
|
33d40d4253 | ||
|
|
c7e0abc3fb | ||
|
|
18a4232783 | ||
|
|
15ed575207 | ||
|
|
eae4502708 | ||
|
|
78ebf04be0 | ||
|
|
49a596073e | ||
|
|
95783cc128 | ||
|
|
8d9d3a9e7d | ||
|
|
ea0de4b01d | ||
|
|
72aaf76cf4 | ||
|
|
78e282d406 | ||
|
|
0c214932ba | ||
|
|
a1eb4dc807 | ||
|
|
e92f13977c | ||
|
|
5db283700f | ||
|
|
6e79e5608e | ||
|
|
8355270a1a | ||
|
|
5a8835f41a | ||
|
|
2d32aeb972 | ||
|
|
1c38d63c50 | ||
|
|
4f6944424b | ||
|
|
fc01bedd45 | ||
|
|
7ab916b527 | ||
|
|
51c1f4b214 | ||
|
|
0b80d85c6c | ||
|
|
4489e130f2 | ||
|
|
e1cc00ad17 | ||
|
|
49191261a1 | ||
|
|
0479d5a02a | ||
|
|
189e733f81 | ||
|
|
bf2d535356 | ||
|
|
05cfdd0b69 | ||
|
|
a60e8d3e12 | ||
|
|
7b3d285884 | ||
|
|
5ba053a1c0 | ||
|
|
7d5f647cd3 | ||
|
|
0572d03003 | ||
|
|
f25649955e | ||
|
|
04d6a4a371 | ||
|
|
a8140d1f70 | ||
|
|
d1af15037c | ||
|
|
cca76550d6 | ||
|
|
2ff3d0d5a2 | ||
|
|
cb804eb3e1 | ||
|
|
878288fbec | ||
|
|
407f05629a | ||
|
|
ffae2c5f18 | ||
|
|
e300fad340 | ||
|
|
8898d3b558 | ||
|
|
53c29b65bd | ||
|
|
8e7bcd95a4 | ||
|
|
84479925bf | ||
|
|
7bfc66e218 | ||
|
|
309247d487 | ||
|
|
081054e08c | ||
|
|
adda8c4642 | ||
|
|
a0b17e145b | ||
|
|
3f0b355717 | ||
|
|
6b09c139e7 | ||
|
|
03b20b00b4 | ||
|
|
108305a3e3 | ||
|
|
ae4f4b052e | ||
|
|
a038e8bba4 | ||
|
|
33e825e91e | ||
|
|
c5e74635dd | ||
|
|
7be684835b | ||
|
|
a9930bd442 | ||
|
|
19eafef41e | ||
|
|
d42138384f | ||
|
|
ebe7779f40 | ||
|
|
347ea4ca98 | ||
|
|
f2f9c926bb | ||
|
|
5e1156abe2 | ||
|
|
803f9b6913 | ||
|
|
61fe0e81cd | ||
|
|
4c31b611b1 | ||
|
|
b3909e62f0 | ||
|
|
74e0d0396a | ||
|
|
dd58ef1de5 | ||
|
|
7eef726ee1 | ||
|
|
c0bf1576c2 | ||
|
|
e4c668c252 | ||
|
|
3f4e3f5f84 | ||
|
|
30f4eb8da0 | ||
|
|
328092f0ef | ||
|
|
a5dda0705e | ||
|
|
ba3552b697 | ||
|
|
b59c1c693d | ||
|
|
856956afce | ||
|
|
d938b6621d | ||
|
|
cc5ea61f5a | ||
|
|
fa617c78af | ||
|
|
f671b7e5e2 | ||
|
|
09066a4c6c | ||
|
|
07f34c2675 | ||
|
|
2b9326d75e | ||
|
|
91246b0f81 | ||
|
|
5ec0ad6913 | ||
|
|
64e6dcb23c | ||
|
|
1661d1f4ca | ||
|
|
e3008babfe | ||
|
|
cdc9753009 | ||
|
|
29e41e8e2b | ||
|
|
a2158af385 | ||
|
|
c14b546d5f | ||
|
|
29ee3e5ac0 | ||
|
|
011f35164a | ||
|
|
47ef8b9cac | ||
|
|
7058d6ca5a | ||
|
|
8592e0af54 | ||
|
|
ae6b2be52c | ||
|
|
31e41f8f02 | ||
|
|
717724c9f6 | ||
|
|
3cfb0bacf4 | ||
|
|
0fe1a426c0 | ||
|
|
0503825f7b | ||
|
|
858d12969a | ||
|
|
443172197b | ||
|
|
05d16b0682 | ||
|
|
8cf9f0d5bc | ||
|
|
2bfdaf08ee | ||
|
|
145be09cfd | ||
|
|
747c065213 | ||
|
|
8d8ac70070 | ||
|
|
11a14927c9 | ||
|
|
c5178fd90e | ||
|
|
89662124e5 | ||
|
|
337f95e269 | ||
|
|
8614b1c74a | ||
|
|
e72982a7f8 | ||
|
|
a16098d548 | ||
|
|
cc3bd8833a | ||
|
|
ab6523af3f | ||
|
|
af92417131 | ||
|
|
ae5c2d49c6 | ||
|
|
8b571912cf | ||
|
|
9f615cde79 | ||
|
|
ce7fa95546 | ||
|
|
dd0489c1c5 | ||
|
|
ab5a763d93 | ||
|
|
7449ea28a5 | ||
|
|
fa6661e4ae | ||
|
|
bfb1b6ac0a | ||
|
|
6b88ed0321 | ||
|
|
faa993acfb | ||
|
|
fbcdae9a6b | ||
|
|
12e1681d31 | ||
|
|
4225e28a4b | ||
|
|
23be5694d0 | ||
|
|
dc8adfc546 | ||
|
|
5d98c3337a | ||
|
|
5406acf329 | ||
|
|
fd7d8cbf56 | ||
|
|
9ff505d11b | ||
|
|
7f121f7518 | ||
|
|
1b132379be | ||
|
|
0f99e5fcaa | ||
|
|
726b148aa9 | ||
|
|
facf757997 | ||
|
|
fe1f221286 | ||
|
|
d3b4a72f4f | ||
|
|
fa47ad0095 | ||
|
|
aa7d38a0a5 | ||
|
|
42b2e2717d | ||
|
|
3387282de4 | ||
|
|
c82470e4df | ||
|
|
4383425060 | ||
|
|
3ed346be86 | ||
|
|
fd58eeae1d | ||
|
|
0ed82af99a | ||
|
|
a09e4bf82a | ||
|
|
dce3e0763f | ||
|
|
b814123ede | ||
|
|
a3d40e3521 | ||
|
|
4abfa6231c | ||
|
|
5bf4234ad3 | ||
|
|
7640740113 | ||
|
|
82300990ec | ||
|
|
bc812e4937 | ||
|
|
38d7b83ed0 | ||
|
|
ec5ed17860 | ||
|
|
8f6b71df46 | ||
|
|
e8e3e9b0be | ||
|
|
28ca815c88 | ||
|
|
65aaab5f38 | ||
|
|
f426ba3526 | ||
|
|
028c876bca | ||
|
|
29299b4644 | ||
|
|
7c6e5a68d9 | ||
|
|
fa99263918 | ||
|
|
e173c8b548 | ||
|
|
3e19038e06 | ||
|
|
2c023ef7a0 | ||
|
|
d9e27b6a82 | ||
|
|
b6ec1d9aa7 | ||
|
|
f683f0786e | ||
|
|
54dfa6cb7f | ||
|
|
7c667f3485 | ||
|
|
995aa65f16 | ||
|
|
8b76db2bca | ||
|
|
9c247d9a19 | ||
|
|
d9a6f11c35 | ||
|
|
00c4ac8d51 | ||
|
|
88e382e7a1 | ||
|
|
c585175214 | ||
|
|
a5b95728bf | ||
|
|
c742501b80 | ||
|
|
9c1de27562 | ||
|
|
fc15ef6967 | ||
|
|
eaf0259c3d | ||
|
|
fe2ce03ac1 | ||
|
|
70585ff32e | ||
|
|
a479c867c4 | ||
|
|
74f1b51b38 | ||
|
|
0ad9b83623 | ||
|
|
631d991d8d | ||
|
|
1be4a57bd4 | ||
|
|
76a6119584 | ||
|
|
add95292ce | ||
|
|
57fc6efd4c | ||
|
|
2fe734e6f9 | ||
|
|
e6091ee0c9 | ||
|
|
728b3bac67 | ||
|
|
0d7309cb19 | ||
|
|
18a9e39be6 | ||
|
|
18934bcc69 | ||
|
|
98ff00bc62 | ||
|
|
8d2f79cf24 | ||
|
|
05ba54b6d3 | ||
|
|
ef3cb9544a | ||
|
|
79614ed2cf | ||
|
|
7deabfe9cd | ||
|
|
bd1e019a42 | ||
|
|
14e27363e0 | ||
|
|
605b7c5b3e | ||
|
|
881b18f6d0 | ||
|
|
7256c7050a | ||
|
|
7a2a25c13a | ||
|
|
3e0bcd58d4 | ||
|
|
4c209ed74c | ||
|
|
d5675a5d4a | ||
|
|
91d39cc0c0 | ||
|
|
930ca8d9a1 | ||
|
|
6a07f66cfc | ||
|
|
442b3fcc48 | ||
|
|
6cc4f27ee3 | ||
|
|
036a068b83 | ||
|
|
4e0b795a3c | ||
|
|
10cbbee947 | ||
|
|
276ded0119 | ||
|
|
b017927c69 | ||
|
|
e59d88bbe9 | ||
|
|
e1391cae20 | ||
|
|
0b819053cf | ||
|
|
25b6f02091 | ||
|
|
32b6bc6a74 | ||
|
|
18f1b93ae4 | ||
|
|
c7afc9eb28 | ||
|
|
3f63a02145 | ||
|
|
eb0d5c996e | ||
|
|
a8a9e061a1 | ||
|
|
4292d88a92 | ||
|
|
a8af24d7ca | ||
|
|
efa0fc2b09 | ||
|
|
ebb2918a88 | ||
|
|
4fb3a2e0a0 | ||
|
|
607039f043 | ||
|
|
fb379b63ec | ||
|
|
4a6278f598 | ||
|
|
697161beb1 | ||
|
|
742804ecb8 | ||
|
|
2bf20fa501 | ||
|
|
685e0ce00d | ||
|
|
6a6b0236a9 | ||
|
|
857c70ece9 | ||
|
|
e68be6f041 | ||
|
|
52edeb42b5 | ||
|
|
c8a8bfd84d | ||
|
|
9f2c4919eb | ||
|
|
f56a470cc7 | ||
|
|
1e7b76005c | ||
|
|
54ccc705d0 | ||
|
|
0a661596b3 | ||
|
|
14f696e824 | ||
|
|
7e481960f9 | ||
|
|
7c779f4f09 | ||
|
|
4c4fe80697 | ||
|
|
fdd8e33b58 | ||
|
|
c36b190d5d | ||
|
|
37c9340499 | ||
|
|
b038b1f613 | ||
|
|
48b4bf1683 | ||
|
|
934543b595 | ||
|
|
d87ec82fe3 | ||
|
|
55b7cf21cc | ||
|
|
809d9e4697 | ||
|
|
a1ba3b567c | ||
|
|
b3ed545d6a | ||
|
|
8a7473765e | ||
|
|
eda1c6b2c6 | ||
|
|
7e55b44610 | ||
|
|
7e18b0dd3a | ||
|
|
578885225f | ||
|
|
3ec6194a47 | ||
|
|
9d3cac43b7 | ||
|
|
569041a4c4 | ||
|
|
9839885198 | ||
|
|
18472188b9 | ||
|
|
44c0dec68b | ||
|
|
f81b3d4ed6 | ||
|
|
c69ef95c6a | ||
|
|
dfd42c9896 | ||
|
|
3bfa1cbf41 | ||
|
|
79c06442db | ||
|
|
6195fc0d11 | ||
|
|
6523334a48 | ||
|
|
b3cde51590 | ||
|
|
6ec296f2a7 | ||
|
|
cb4392628f | ||
|
|
3549fc07f6 | ||
|
|
ecd84d7c43 | ||
|
|
c2b2b059e6 | ||
|
|
6ff5a1db42 | ||
|
|
2bc68707b5 | ||
|
|
0c9376039c | ||
|
|
e1fe3ca14a | ||
|
|
a224e5d470 | ||
|
|
7444110c79 | ||
|
|
fc0c8a160b | ||
|
|
481cc52686 | ||
|
|
4273b6e4fb | ||
|
|
5e08b2be37 | ||
|
|
a665b79f85 | ||
|
|
0e23038e28 | ||
|
|
fe4de7f929 | ||
|
|
0783d57459 | ||
|
|
4e1e5bd8c4 | ||
|
|
b3a14e9a7b | ||
|
|
b725a9bcea | ||
|
|
5c263fac8d | ||
|
|
04c1619eb4 | ||
|
|
d74dbb722a | ||
|
|
95969c4979 | ||
|
|
10c9954ebc | ||
|
|
e61b2b1fc5 | ||
|
|
46ecb0ac03 | ||
|
|
2d44bade4b | ||
|
|
0a0b852f2c | ||
|
|
1658d7ae86 | ||
|
|
ca44cda112 | ||
|
|
1935f8b27f | ||
|
|
d32dba43b4 | ||
|
|
8d0a3c8e69 | ||
|
|
f561b2d955 | ||
|
|
8afb7d654d | ||
|
|
32cbc20108 | ||
|
|
be3cd2a434 | ||
|
|
ba3ca6b00d | ||
|
|
c88dcef900 | ||
|
|
3d1e4fde81 | ||
|
|
1e02bb5999 | ||
|
|
bd7bcf8a0b | ||
|
|
1c0f3e1b81 | ||
|
|
b2b3f388b1 | ||
|
|
110a6d11a5 | ||
|
|
75faf7d30e | ||
|
|
e95a9731be | ||
|
|
5cb5f9a963 | ||
|
|
88aa3a4e19 | ||
|
|
d34b9ee00e | ||
|
|
103730a642 | ||
|
|
84017776ec | ||
|
|
34e673f7d6 | ||
|
|
5ac6a307bf | ||
|
|
8c1b681391 | ||
|
|
e12fef7828 | ||
|
|
dc79f80366 | ||
|
|
e004f872f9 | ||
|
|
da558de769 | ||
|
|
587335e3ba | ||
|
|
7219e3760c | ||
|
|
d2267ecd71 | ||
|
|
b159def9b2 | ||
|
|
e1eefd1165 | ||
|
|
da1fb4f969 | ||
|
|
5b4dacf0f5 | ||
|
|
9046f59b9f | ||
|
|
6c1f9dba52 | ||
|
|
ea1df2b5c3 | ||
|
|
1daee79095 | ||
|
|
b3423e1722 | ||
|
|
5b68a11f01 | ||
|
|
0c8195e4f1 | ||
|
|
8fe795102f | ||
|
|
bfb91fcf10 | ||
|
|
27a02f64b2 | ||
|
|
44c62f8f44 | ||
|
|
7bb7747c67 | ||
|
|
8bb47a88f8 | ||
|
|
c8c47961db | ||
|
|
e8c91ea3a1 | ||
|
|
429d995270 | ||
|
|
c4bd47eb84 | ||
|
|
1811118f28 | ||
|
|
69ba925ee8 | ||
|
|
7219c3449f | ||
|
|
a5d84c88bf | ||
|
|
da0aa38614 | ||
|
|
6b1397d257 | ||
|
|
7d640e2aab | ||
|
|
0a01629b15 | ||
|
|
ee2de33643 | ||
|
|
78b0e50742 | ||
|
|
a7371c048b | ||
|
|
f3dfa81811 | ||
|
|
5b4793a2d5 | ||
|
|
b6660c72e1 | ||
|
|
a6eeed4061 | ||
|
|
239fddcac2 | ||
|
|
b27f9bf74c | ||
|
|
09b856bf0b | ||
|
|
9954c6a571 | ||
|
|
44b24de5d0 | ||
|
|
22927bfc76 | ||
|
|
a39522a25e | ||
|
|
ea6c8a1a65 | ||
|
|
546bbe5418 | ||
|
|
93534db79e | ||
|
|
805892f623 | ||
|
|
744792452f | ||
|
|
5ca7f375d3 | ||
|
|
568148a349 | ||
|
|
fedf745d25 | ||
|
|
8823aeb9d7 | ||
|
|
dc5c765c2a | ||
|
|
fed0322ebf | ||
|
|
e429ba6fa2 | ||
|
|
dc57332988 | ||
|
|
138231059b | ||
|
|
834b233c30 | ||
|
|
234475effe | ||
|
|
7d7d06651c | ||
|
|
72d41eac85 | ||
|
|
0fec03ad3f | ||
|
|
43a823d0ac | ||
|
|
96ffae3372 | ||
|
|
ecf51406c5 | ||
|
|
bf56145a09 | ||
|
|
8056290423 | ||
|
|
892d1214b0 | ||
|
|
f6823b5704 | ||
|
|
f3abf84e17 | ||
|
|
a6d937b366 | ||
|
|
7dc71f92d0 | ||
|
|
f74b47ca16 | ||
|
|
b9a413d19e | ||
|
|
3436780117 | ||
|
|
2d2719cfb2 | ||
|
|
515aed7022 | ||
|
|
22e484edd4 | ||
|
|
616a598940 | ||
|
|
1a843f95b7 | ||
|
|
32e1d7e879 | ||
|
|
8c67c7efb3 | ||
|
|
252bdcbbe0 | ||
|
|
4dbe047512 | ||
|
|
1da7c705e3 | ||
|
|
fabd751f20 | ||
|
|
308820b8a1 | ||
|
|
4fd7eaf8e0 | ||
|
|
789f0bc8ff | ||
|
|
042c65a48c | ||
|
|
03a1014714 | ||
|
|
6e9c81eddf | ||
|
|
d7c103d77f | ||
|
|
63435f2ec1 | ||
|
|
445adbd078 | ||
|
|
0e088f11ba | ||
|
|
e47f25ac3e | ||
|
|
df02123b1e | ||
|
|
6a685df823 | ||
|
|
a4add7de67 | ||
|
|
8473820f0c | ||
|
|
c777daf6e6 | ||
|
|
4dff20cc8c | ||
|
|
c855570b55 | ||
|
|
395add8114 | ||
|
|
019a5563c4 | ||
|
|
e9b21aaf86 | ||
|
|
d6a0cbb1a0 | ||
|
|
3900b97136 | ||
|
|
2d4ae38a09 | ||
|
|
7f2f98885b | ||
|
|
a4955b420a | ||
|
|
fe78f60b1f | ||
|
|
21d14a782e | ||
|
|
c0f1243879 | ||
|
|
67945f2f33 | ||
|
|
30ffa4c3f2 | ||
|
|
43c17b9950 | ||
|
|
ea5d02b1e6 | ||
|
|
5856275347 | ||
|
|
534b0e4cf6 | ||
|
|
97d5873e3d | ||
|
|
fb1173bc30 | ||
|
|
f0acaa16c4 | ||
|
|
3bd99e1910 | ||
|
|
ad19b09ae3 | ||
|
|
ffa4cd134b | ||
|
|
fbffef1cc4 | ||
|
|
2a402b632d | ||
|
|
6899a3258a | ||
|
|
04cc43b2f0 | ||
|
|
460a203c29 | ||
|
|
79184347f9 | ||
|
|
be48bf06df | ||
|
|
3bba1089ed | ||
|
|
c9c8108a53 | ||
|
|
067fdaeb8f | ||
|
|
b6e862bd10 | ||
|
|
9ad8065f75 | ||
|
|
f1cdd72575 | ||
|
|
58e1a1f1d8 | ||
|
|
aee09d9119 | ||
|
|
de56e2b405 | ||
|
|
c59c4290f9 | ||
|
|
fd9d9d9d35 | ||
|
|
2a5b497d8a | ||
|
|
b93570eeb0 | ||
|
|
3ef6284a0d | ||
|
|
1024782b9e | ||
|
|
d35ac1347c | ||
|
|
c4e88fd11a | ||
|
|
0de50e0afe | ||
|
|
763b02975c | ||
|
|
cc57d1edf7 | ||
|
|
bb988701fe | ||
|
|
75fdff4d41 | ||
|
|
8fc49f37a7 | ||
|
|
abd9ffd31d | ||
|
|
0b07909386 | ||
|
|
82b770c1aa | ||
|
|
456ffb79ff | ||
|
|
368c2aac24 | ||
|
|
b6f70ed92a | ||
|
|
98c2914eeb | ||
|
|
5b09e4ac0c | ||
|
|
5d8cf22897 | ||
|
|
51f6d2f45e | ||
|
|
1abaa5e60c | ||
|
|
f4792eea04 | ||
|
|
1fe1e1ce7e | ||
|
|
58659cf3b6 | ||
|
|
9a588231c5 | ||
|
|
f408ad16e4 | ||
|
|
fecca5ad83 | ||
|
|
9e5d41c48a | ||
|
|
87b4cfff1a | ||
|
|
19a2b9042f | ||
|
|
eea26d7ece | ||
|
|
06182bfce4 | ||
|
|
77bb9eaa73 | ||
|
|
10d1378277 | ||
|
|
8b2f4780ed | ||
|
|
aef513f038 | ||
|
|
bb55df34d7 | ||
|
|
2b159fc40f | ||
|
|
d7d004b48e | ||
|
|
013fbf79e9 | ||
|
|
2618dde1e2 | ||
|
|
8a2d4ab68c | ||
|
|
5e4878843e | ||
|
|
be484d20a2 | ||
|
|
1dd9f8c1d4 | ||
|
|
4939b6b641 | ||
|
|
52747e364a | ||
|
|
1901e93b1e | ||
|
|
eb55761c38 | ||
|
|
16b57193f1 | ||
|
|
5bb7bf8947 | ||
|
|
2c9aa86bf0 | ||
|
|
d2b915f6c2 | ||
|
|
7920eff672 | ||
|
|
30415e6220 | ||
|
|
21db209f47 | ||
|
|
648b9dd7d8 | ||
|
|
396c91f8f7 | ||
|
|
c3c79d3715 | ||
|
|
8c3229ec38 | ||
|
|
8c92cfb814 | ||
|
|
3eb866f5d2 | ||
|
|
3471c737b9 | ||
|
|
d164ccb6c7 | ||
|
|
ce98957be0 | ||
|
|
fe4a9bff2d | ||
|
|
024f3962b2 | ||
|
|
a55316aef9 | ||
|
|
08b955f8b6 | ||
|
|
83f520f7a8 | ||
|
|
9476fda987 | ||
|
|
b509d96f18 | ||
|
|
d8ae65a762 | ||
|
|
efea511211 | ||
|
|
2564818c3e | ||
|
|
e6930d9601 | ||
|
|
4827cd24d8 | ||
|
|
acca69a8a9 | ||
|
|
4e405ce530 | ||
|
|
d171e781d2 | ||
|
|
99f0e31810 | ||
|
|
88ffc9b145 | ||
|
|
9ed76400de | ||
|
|
0aa8fc2fc2 | ||
|
|
98829b209a | ||
|
|
f3eb0df081 | ||
|
|
f83fb57d38 | ||
|
|
7d07631f12 | ||
|
|
8737e9824f | ||
|
|
ea472c844e | ||
|
|
a29e2582ed | ||
|
|
98477ef6c6 | ||
|
|
86be6aebff | ||
|
|
f9754bddf1 | ||
|
|
03390815af | ||
|
|
82ef6f8ac5 | ||
|
|
497e50c559 | ||
|
|
7cf9e202a3 | ||
|
|
620d222f98 | ||
|
|
a2d16143e3 | ||
|
|
97c087ef5f | ||
|
|
07f39b31da | ||
|
|
f7c1bc71d9 | ||
|
|
4b0d5815c0 | ||
|
|
5c07a968fe | ||
|
|
f4ac87af3a | ||
|
|
125965b559 | ||
|
|
43703b6f40 | ||
|
|
7cdae0f689 | ||
|
|
61ce2c95b3 | ||
|
|
08128748a7 | ||
|
|
c9fe7f6db6 | ||
|
|
a8cad28da7 | ||
|
|
c035af5409 | ||
|
|
eb951fdaf1 | ||
|
|
726ab7fc05 | ||
|
|
fb25c79b9c | ||
|
|
3c0f4278c7 | ||
|
|
6bd4b3c167 | ||
|
|
89350a80ad | ||
|
|
f26227ecec | ||
|
|
c002501c2e | ||
|
|
8af78c6d84 | ||
|
|
7e8ffd8390 | ||
|
|
5bd30060e7 | ||
|
|
c24cac9a44 | ||
|
|
2bc9730b1d | ||
|
|
428858dc75 | ||
|
|
8a425a93ae | ||
|
|
59256cf8b3 | ||
|
|
844186d520 | ||
|
|
93b6d785f3 | ||
|
|
0bb2a051b6 | ||
|
|
ef78a7d41b | ||
|
|
6c1c695616 | ||
|
|
8bdab347b6 | ||
|
|
ae349d4424 | ||
|
|
3e49745257 | ||
|
|
c2b7226205 | ||
|
|
f67369a9a9 | ||
|
|
14d2a49942 | ||
|
|
92df40a6a0 | ||
|
|
0e6e9c5238 | ||
|
|
de65ffb99d | ||
|
|
2d5472cf2a | ||
|
|
a2203da1c6 | ||
|
|
0fb8291b8b | ||
|
|
b393ec2856 | ||
|
|
c3d908126f | ||
|
|
4c3b0abe7b | ||
|
|
664ba55460 | ||
|
|
3d0882856f | ||
|
|
e849d28276 | ||
|
|
18a691482d | ||
|
|
7c48e3632d | ||
|
|
8701b20899 | ||
|
|
8ca2884c1c | ||
|
|
d1d2ad6a5c | ||
|
|
e3f5062583 | ||
|
|
d427e0522e | ||
|
|
46e144f647 | ||
|
|
6ad20c53d9 | ||
|
|
cc433388f5 | ||
|
|
1fba4b7e32 | ||
|
|
c249cd4ffd | ||
|
|
d54bf5f75e | ||
|
|
9cbe3ff551 | ||
|
|
b1d20d3228 | ||
|
|
e5602abee0 | ||
|
|
a296a9e109 | ||
|
|
e5bbf47ab9 | ||
|
|
9bda2a44ae | ||
|
|
a1d32c3a21 | ||
|
|
b4b68c0b00 | ||
|
|
608bf30bda | ||
|
|
d0be5f09a5 | ||
|
|
3d8a3a2204 | ||
|
|
b19734004a | ||
|
|
f503c72782 | ||
|
|
f8903a8183 | ||
|
|
d43d5a6cb6 | ||
|
|
99f4b2cf95 | ||
|
|
b493d739bd | ||
|
|
92fb43a455 | ||
|
|
7c29fb449e | ||
|
|
7ddcec3a0d | ||
|
|
18f206747c | ||
|
|
0bce1da4e3 | ||
|
|
65ed047084 | ||
|
|
b0573f88e6 | ||
|
|
348fca7e28 | ||
|
|
cc9b750eff | ||
|
|
701ad8a4a9 | ||
|
|
2cc088c633 | ||
|
|
4dfba3a2ad | ||
|
|
a3721a94ce | ||
|
|
7439faad34 | ||
|
|
6efe54aa88 | ||
|
|
9e62d1ad8f | ||
|
|
e69251b21a | ||
|
|
f096c4a5d0 | ||
|
|
03b3f5937f | ||
|
|
696b5c80a7 | ||
|
|
d6fcd22752 | ||
|
|
54d9ca8ed8 | ||
|
|
05d8a06cd5 | ||
|
|
4f7626828a | ||
|
|
81193eb550 | ||
|
|
38b09dc610 | ||
|
|
ae3527df16 | ||
|
|
85d0270af0 | ||
|
|
59e185b781 | ||
|
|
b5ad29e3f2 | ||
|
|
f1e2b99456 | ||
|
|
0635e7ae1e | ||
|
|
8f674aede9 | ||
|
|
838200219f | ||
|
|
e543b305c3 | ||
|
|
d42b0691b2 | ||
|
|
71022d58d3 | ||
|
|
a313b675a6 | ||
|
|
ae18693715 | ||
|
|
3ad7622bf0 | ||
|
|
19cb575b90 | ||
|
|
3cfab25f8a | ||
|
|
85359bb10f | ||
|
|
aa2beb1d78 | ||
|
|
2e07ac5a47 | ||
|
|
d844ee2c79 | ||
|
|
266482649f | ||
|
|
83496c66d1 | ||
|
|
374cb74978 | ||
|
|
f0018dcba9 | ||
|
|
7949a5e1fd | ||
|
|
0a1531ce8a | ||
|
|
7b8bd2d4ce | ||
|
|
4883bc3dd4 | ||
|
|
72a115b434 | ||
|
|
f28edd0864 | ||
|
|
d69ec7f8e4 | ||
|
|
779837389b | ||
|
|
ea9e9d7273 | ||
|
|
237dfce8a0 | ||
|
|
2b0ccf3acd | ||
|
|
e4f3b3447e | ||
|
|
eb8e4f64fc | ||
|
|
6287f75e67 | ||
|
|
d82f2e289a | ||
|
|
73e9842877 | ||
|
|
a86178f19b | ||
|
|
b77c228853 | ||
|
|
5e4432b9ad | ||
|
|
e7f10fdaea | ||
|
|
8713ed5d73 | ||
|
|
cd64fcac8d | ||
|
|
96759af86f | ||
|
|
d57222328b | ||
|
|
83c4577f6d | ||
|
|
7bd853e87b | ||
|
|
861a52d27c | ||
|
|
9df2130e11 | ||
|
|
6242e195be | ||
|
|
f2f0ea8d04 | ||
|
|
b7309d5c69 | ||
|
|
613e0d10b3 | ||
|
|
04fc3a5a9e | ||
|
|
6ec8ac7597 | ||
|
|
9a5f54bdaf | ||
|
|
ad5e167ad7 | ||
|
|
d33d9522cc | ||
|
|
a292ff5cc0 | ||
|
|
b91e5763e2 | ||
|
|
e1e840eb69 | ||
|
|
0eb9f41470 | ||
|
|
34457ea1b4 | ||
|
|
878154c305 | ||
|
|
9ede726eea | ||
|
|
bfa95c16e3 | ||
|
|
7885ec5511 | ||
|
|
be3d33eebd | ||
|
|
c7040fd418 | ||
|
|
eac53a779b | ||
|
|
0986fd1081 | ||
|
|
1e3c7e1a87 | ||
|
|
3869028d53 | ||
|
|
12945704e9 | ||
|
|
cd629fc737 | ||
|
|
b070be1c41 | ||
|
|
8fa37d3ec8 | ||
|
|
3135dc42c3 | ||
|
|
08ef5c9a02 | ||
|
|
b1935ddcab | ||
|
|
93353e94a2 | ||
|
|
30e4504ee5 | ||
|
|
a9716af0fa | ||
|
|
042f3590c8 | ||
|
|
2c9b791b85 | ||
|
|
7396975500 | ||
|
|
fe4bf62793 | ||
|
|
8a8342b106 | ||
|
|
e52702f6c2 | ||
|
|
0fae7504b3 | ||
|
|
ab612c1ca6 | ||
|
|
0364d8cd43 | ||
|
|
1544823d73 | ||
|
|
b793ee3aff | ||
|
|
36c903da04 | ||
|
|
981e7017bb | ||
|
|
2820d26a0f | ||
|
|
b7e44a744d | ||
|
|
bb00f2ff46 | ||
|
|
65d90aa8a3 | ||
|
|
3d286fbdc3 | ||
|
|
c8eae3a5c3 | ||
|
|
afc58e6bff | ||
|
|
f59b5119e5 | ||
|
|
8eca7377a5 | ||
|
|
c828806b67 | ||
|
|
e639de9861 | ||
|
|
9a4d885a9c | ||
|
|
d28cc4fdb5 | ||
|
|
54a979c936 | ||
|
|
d18652f726 | ||
|
|
ac1083f65d | ||
|
|
bcfc2e5f74 | ||
|
|
a135396d7b | ||
|
|
ef987bd008 | ||
|
|
a2fef1df83 | ||
|
|
016c7d4e6f | ||
|
|
0a60bcdb8d | ||
|
|
5374e6c881 | ||
|
|
ab65ab860f | ||
|
|
ad2742dbb2 | ||
|
|
997077fc5d | ||
|
|
c8042ad511 | ||
|
|
b51d66ea72 | ||
|
|
21d31b5747 | ||
|
|
1ea208ba00 | ||
|
|
5fdf2d3416 | ||
|
|
0321ae0a7f | ||
|
|
e4ecd2dae9 | ||
|
|
b9176adca4 | ||
|
|
b6f6293b76 | ||
|
|
d45edcd216 | ||
|
|
89c487de65 | ||
|
|
d45a17247d | ||
|
|
2e97bf48c5 | ||
|
|
872e936924 | ||
|
|
574a43fff7 | ||
|
|
6ff8a267e9 | ||
|
|
335cfcde57 | ||
|
|
5f5df97e59 | ||
|
|
cbd4d2f99a | ||
|
|
a1ac1876ad | ||
|
|
58841e85db | ||
|
|
46cd22ea7e | ||
|
|
cf8dad5763 | ||
|
|
8ea2949d84 | ||
|
|
e4af9ebc6f | ||
|
|
7a3af8de83 | ||
|
|
433c48a1a3 | ||
|
|
889316085c | ||
|
|
05c0a9256d | ||
|
|
c10b8cf55b | ||
|
|
91fe80f73c | ||
|
|
4e837c2770 | ||
|
|
7e437455c1 | ||
|
|
9a68a61ad3 | ||
|
|
7e65a3d3b4 | ||
|
|
82fbd975f1 | ||
|
|
bd95d2b852 | ||
|
|
956e2728c2 | ||
|
|
7f1d9aeaf8 | ||
|
|
f2c079de87 | ||
|
|
8be4fbbce3 | ||
|
|
64d11d32c8 | ||
|
|
1f1a62da67 | ||
|
|
e97adcb614 | ||
|
|
2bb4a81e23 | ||
|
|
46a024441c | ||
|
|
a694dbb020 | ||
|
|
f74c88027e | ||
|
|
c64f96d65b | ||
|
|
fb48c1f6dd | ||
|
|
ee7f7c877a | ||
|
|
f64f205e81 | ||
|
|
10778f8479 | ||
|
|
bb6360cad4 | ||
|
|
c0c4eed3a8 | ||
|
|
f9f1a4439f | ||
|
|
9c66e1f01b | ||
|
|
683f75fad1 | ||
|
|
a303a0dfb7 | ||
|
|
b0d634a89e | ||
|
|
f62e49c02b | ||
|
|
61f137866e | ||
|
|
3f1714f076 | ||
|
|
afce8e2516 | ||
|
|
4e30ed9693 | ||
|
|
7f02b9436b | ||
|
|
a237725d0d | ||
|
|
91561e9ca5 | ||
|
|
4ab5d15ee6 | ||
|
|
187f4fa4aa | ||
|
|
3bb2b9e8f6 | ||
|
|
59d8c0b321 | ||
|
|
d0cb7d843d | ||
|
|
991f71bf28 | ||
|
|
362392d1de | ||
|
|
9e51ddd8d8 | ||
|
|
f65f924011 | ||
|
|
bc4f19c967 | ||
|
|
b482c30866 | ||
|
|
676d93e829 | ||
|
|
cb93953b2c | ||
|
|
68082a88a7 | ||
|
|
4c60a602b9 | ||
|
|
912cd220cc | ||
|
|
3b120c0372 | ||
|
|
2799d71e93 | ||
|
|
fcd7b42941 | ||
|
|
6fe2f83435 | ||
|
|
94c25b0ff4 | ||
|
|
ec38ec8004 | ||
|
|
1d9e55ca6e | ||
|
|
9b89afd6dc | ||
|
|
1aa22d1ba8 | ||
|
|
61d23df83a | ||
|
|
fca5accba8 | ||
|
|
947da63d56 | ||
|
|
a94e5c7403 | ||
|
|
c061f7021e | ||
|
|
ad43373f5b | ||
|
|
720b88048d | ||
|
|
d58291d119 | ||
|
|
132b1ff479 | ||
|
|
0115a61ab7 | ||
|
|
fadf15dbc0 | ||
|
|
cb9478e0ea | ||
|
|
04964cc52b | ||
|
|
6ab1c06036 | ||
|
|
d3fee54644 | ||
|
|
f4e49495e2 | ||
|
|
c072ba088f | ||
|
|
4397d3da02 | ||
|
|
fc5bb966f0 | ||
|
|
20f60cd99d | ||
|
|
ac0c54cce4 | ||
|
|
19b78e63ce | ||
|
|
653af17755 | ||
|
|
bac2387f50 | ||
|
|
9990fd25d4 | ||
|
|
e9930854c4 | ||
|
|
11ac4cd2c2 | ||
|
|
5b07c77708 | ||
|
|
c3ad2d0a80 | ||
|
|
4dae781be0 | ||
|
|
1cc82f2ab7 | ||
|
|
c6641ec1de | ||
|
|
c083b862a7 | ||
|
|
6ffadb501b | ||
|
|
38ded66c4e | ||
|
|
358d7ac562 | ||
|
|
cae784ff52 | ||
|
|
835e11d10f | ||
|
|
e7157973e7 | ||
|
|
5b5110acbf | ||
|
|
61e5eff666 | ||
|
|
16a3d1339a | ||
|
|
759190d8ba | ||
|
|
f8e2cb06d1 | ||
|
|
37aa10c5a5 | ||
|
|
ad9ed13b9a | ||
|
|
d9f8d809c8 | ||
|
|
03054b88aa | ||
|
|
a72911b527 | ||
|
|
8e4da3faf4 | ||
|
|
46945aa98d | ||
|
|
939224d0af | ||
|
|
14bc3a3cf8 | ||
|
|
79b19821f6 | ||
|
|
8d15f79f1e | ||
|
|
b079cc12f4 | ||
|
|
1c66733b8a | ||
|
|
2ef85ea195 | ||
|
|
69a3d14b53 | ||
|
|
d74c07e1a2 | ||
|
|
e1a86139dc | ||
|
|
8e1fe6339e | ||
|
|
7a5cf80412 | ||
|
|
5406e8e2e7 | ||
|
|
d3974c9f44 | ||
|
|
0015c8dfa2 | ||
|
|
ad1da22257 | ||
|
|
e703d9ff78 | ||
|
|
32501c96e5 | ||
|
|
6149ba6e36 | ||
|
|
0d44a320a0 | ||
|
|
a8a272b068 | ||
|
|
20a85c1ef2 | ||
|
|
23b58ccbe8 | ||
|
|
9c967ee3ea | ||
|
|
f495addb1e | ||
|
|
d750b690e7 | ||
|
|
fdb3e3f9a4 | ||
|
|
a17018a875 | ||
|
|
8de20fcd1f | ||
|
|
51120ccf31 | ||
|
|
8dd7123923 | ||
|
|
6ed2e7b636 | ||
|
|
fa8e70fe26 | ||
|
|
a87f34ebb3 | ||
|
|
75d875615b | ||
|
|
07e6abdac4 | ||
|
|
1ddc1a6781 | ||
|
|
3f216fa4a3 | ||
|
|
4fb79e6e2a | ||
|
|
fdda30704b | ||
|
|
5418520252 | ||
|
|
9d526b0907 | ||
|
|
9db492eb07 | ||
|
|
d6ee4d58ba | ||
|
|
f63cf6a7a4 | ||
|
|
18ab1144bb | ||
|
|
a9b216d212 | ||
|
|
6b19a1ece9 | ||
|
|
0dd6d552a8 | ||
|
|
cfddf570b9 | ||
|
|
6a9b50f95d | ||
|
|
1dcd857ca6 | ||
|
|
7e6cb9d186 | ||
|
|
cf78307577 | ||
|
|
12fbd34962 | ||
|
|
ed059d80d6 | ||
|
|
664a39911c | ||
|
|
d6cf385a3c | ||
|
|
cef8204f40 | ||
|
|
42e82f0ead | ||
|
|
2a517cde9f | ||
|
|
992657cbe0 | ||
|
|
d2c8aae59c | ||
|
|
3208c8317d | ||
|
|
bec7ea7072 | ||
|
|
0a6ebdee48 | ||
|
|
b1cd634ab4 | ||
|
|
47abd62c55 | ||
|
|
db781437fc | ||
|
|
a40f52ee62 | ||
|
|
89e6fd68e5 | ||
|
|
ecf0f15c17 | ||
|
|
04a6e2de9d | ||
|
|
0cd29daea2 | ||
|
|
b392502b9b | ||
|
|
a301c974e4 | ||
|
|
4c7c2edf9a | ||
|
|
3d3748d6f5 | ||
|
|
fa3199d41c | ||
|
|
efbda6d5af | ||
|
|
8640f500d1 | ||
|
|
3d90e3aee9 | ||
|
|
6c676d21c3 | ||
|
|
7e6af88966 | ||
|
|
3b53cf5e84 | ||
|
|
713f02ca3f | ||
|
|
19844e81d1 | ||
|
|
5fbe766a0a | ||
|
|
1430c0a6e6 | ||
|
|
e3e928f1c4 | ||
|
|
e155acbbd4 | ||
|
|
be1b6b6aa3 | ||
|
|
b4ba5cbb7a | ||
|
|
f28474d86e | ||
|
|
1964073072 | ||
|
|
856d2e3176 | ||
|
|
3409a1bfba | ||
|
|
fc8f02c180 | ||
|
|
03e48161a1 | ||
|
|
def63329f0 | ||
|
|
0680b01a96 | ||
|
|
592e788a7d | ||
|
|
aabc1a8265 | ||
|
|
a23ff4e519 | ||
|
|
edc015d9bf | ||
|
|
d5a0e12283 | ||
|
|
90e8f26cd4 | ||
|
|
d4e83ca1c0 | ||
|
|
137aa9da2c | ||
|
|
87c600aa7c | ||
|
|
08dfe64301 | ||
|
|
0e48ee5f9e | ||
|
|
b6e532f01d | ||
|
|
60baa5e59e | ||
|
|
9eb64dc6a4 | ||
|
|
3de04094fb | ||
|
|
02e8979178 | ||
|
|
5e962719ca | ||
|
|
fefc623343 | ||
|
|
5c40081d84 | ||
|
|
e739d6aa05 | ||
|
|
0994719b91 | ||
|
|
f469920759 | ||
|
|
3c9be8cd08 | ||
|
|
a0e82e1817 | ||
|
|
69bf451b20 | ||
|
|
58699a220b | ||
|
|
3f70f685bb | ||
|
|
d838a76461 | ||
|
|
e13d96a6f2 | ||
|
|
1e1e2d5f54 | ||
|
|
c51d2a56ac | ||
|
|
e9d888bf63 | ||
|
|
47b7ec8d00 | ||
|
|
c8f09f28b1 | ||
|
|
5a32b9599a | ||
|
|
a6cb7965dc | ||
|
|
601cbd2306 | ||
|
|
a77658a6bf | ||
|
|
4a2d2882c6 | ||
|
|
0accaedad0 | ||
|
|
aa10430c7b | ||
|
|
98983e7e1a | ||
|
|
3441216aca | ||
|
|
d16a7e108c | ||
|
|
359ae5d116 | ||
|
|
a9a2509d39 | ||
|
|
e73c225965 | ||
|
|
39e6872288 | ||
|
|
af3c4905ea | ||
|
|
7873952e7a | ||
|
|
d989ce2b70 | ||
|
|
249948e174 | ||
|
|
8ae3331d04 | ||
|
|
b2e05aafc1 | ||
|
|
cc1a43e5d9 | ||
|
|
6f39e6599d | ||
|
|
1fe5857411 | ||
|
|
fce61295c9 | ||
|
|
396b0dace8 | ||
|
|
fe2e33a9e1 | ||
|
|
8d9d4cec05 | ||
|
|
ddd10ba8af | ||
|
|
e4f22bc494 | ||
|
|
09633ee11b | ||
|
|
dc6dbdf3c4 | ||
|
|
8f4197c020 | ||
|
|
5fe5fd71b5 | ||
|
|
77e2b0e4ba | ||
|
|
e196d82e76 | ||
|
|
23f334e5df | ||
|
|
c5a265e828 | ||
|
|
278c881059 | ||
|
|
b09112941a | ||
|
|
158ed5765b | ||
|
|
1e5778e6db | ||
|
|
442dee72b5 | ||
|
|
f2d028ba29 | ||
|
|
b1402f3bae | ||
|
|
6ca9e2a777 | ||
|
|
dac93b9840 | ||
|
|
34a0e2e72d | ||
|
|
af2777c580 | ||
|
|
4a066a1913 | ||
|
|
91083fd6c5 | ||
|
|
202e7d0ebf | ||
|
|
7449f36f22 | ||
|
|
dc6e7cd56c | ||
|
|
26426c1431 | ||
|
|
2fba20acda | ||
|
|
3c887b0dd9 | ||
|
|
52c9e3ecef | ||
|
|
2ffdc46f81 | ||
|
|
577c86fb80 | ||
|
|
4ce7dfa55e | ||
|
|
bd144c996a | ||
|
|
2c1a60b965 | ||
|
|
2dad44c93f | ||
|
|
c835ec5102 | ||
|
|
e2d17b1999 | ||
|
|
3c2ddf1f69 | ||
|
|
d64fc261e2 | ||
|
|
34643f536e | ||
|
|
6a3dab0142 | ||
|
|
3c2b2f26b9 | ||
|
|
67f9e16905 | ||
|
|
14a46f82ee | ||
|
|
974500c281 | ||
|
|
1f4954bf0e | ||
|
|
9615dc0638 | ||
|
|
c1e56a3717 | ||
|
|
91ea12344c | ||
|
|
f572f66426 | ||
|
|
872ba89cad | ||
|
|
1f2daaad59 | ||
|
|
230b503b7a | ||
|
|
a371c08c86 | ||
|
|
55e8d37fb0 | ||
|
|
3f5a2b9c7a | ||
|
|
a589022fcc | ||
|
|
31fc8076e3 | ||
|
|
53f330dbe8 | ||
|
|
13a13f3943 | ||
|
|
00ca227292 | ||
|
|
5c8ed73608 | ||
|
|
5df01ed3e6 | ||
|
|
43d7d5570e | ||
|
|
e062cbb79f | ||
|
|
27e27788cd | ||
|
|
cc5c000a6d | ||
|
|
2c7fc5df75 | ||
|
|
f7e61cc153 | ||
|
|
e7f64334c0 | ||
|
|
584b8109a0 | ||
|
|
d75696b30a | ||
|
|
22bb700f94 | ||
|
|
a4b2e1f2e2 | ||
|
|
6ee161bdc6 | ||
|
|
13349dab6d | ||
|
|
1159976d99 | ||
|
|
407b16c98c | ||
|
|
96ce9122f4 | ||
|
|
a80f13243e | ||
|
|
c166852054 | ||
|
|
ba00d57d37 | ||
|
|
f5133c6737 | ||
|
|
5a4234fcb9 | ||
|
|
3cbe8ddf02 | ||
|
|
8461832a7b | ||
|
|
f504d1aa99 | ||
|
|
2b0ddd2a98 | ||
|
|
cc271aefe1 | ||
|
|
0b57389af6 | ||
|
|
ef77961cf4 | ||
|
|
915cf3e715 | ||
|
|
cadba74b1f | ||
|
|
23b305847e | ||
|
|
f55e966c8f | ||
|
|
77bbe5730b | ||
|
|
f8b523b97b | ||
|
|
d9c503a9ec | ||
|
|
52aa123a9f | ||
|
|
4e25c70f96 | ||
|
|
d250fd91a9 | ||
|
|
6a90295505 | ||
|
|
b4c7727a82 | ||
|
|
9ac64d57d0 | ||
|
|
6f68be5aa7 | ||
|
|
b68c79be6b | ||
|
|
b3d674e170 | ||
|
|
bff9bd5dbd | ||
|
|
e7e63796ac | ||
|
|
e1911a624b | ||
|
|
825cc9a86f | ||
|
|
869c87e396 | ||
|
|
e9fb91b197 | ||
|
|
a081d0d93a | ||
|
|
54af29eb40 | ||
|
|
6cae4d7ee4 | ||
|
|
65d2994823 | ||
|
|
8e0a6479ca | ||
|
|
98f2d2501b | ||
|
|
a05fe69043 | ||
|
|
6fb080ff4c | ||
|
|
9923548628 | ||
|
|
181f5c991b | ||
|
|
3dd2e4c84c | ||
|
|
83f7f9f0e5 | ||
|
|
507fb5387b | ||
|
|
1d7bee5eee | ||
|
|
1d922ee813 | ||
|
|
d237b97776 | ||
|
|
790e1ee2e4 | ||
|
|
e5caea04c1 | ||
|
|
2f1ca902f7 | ||
|
|
d5d87e0fdd | ||
|
|
3e7cf416f1 | ||
|
|
e2d2ff8586 | ||
|
|
11fa348575 | ||
|
|
58668a6807 | ||
|
|
6d379ad029 | ||
|
|
a05fc091c8 | ||
|
|
f2bc6f0f96 | ||
|
|
16a95beb22 | ||
|
|
ef426deb53 | ||
|
|
6773709c34 | ||
|
|
e72db65be2 | ||
|
|
5b9e1b04dc | ||
|
|
c1c4f28f29 | ||
|
|
59df724844 | ||
|
|
fc126d79cd | ||
|
|
bb15f78ca5 | ||
|
|
83daadd575 | ||
|
|
c559775135 | ||
|
|
ba2ff0acb8 | ||
|
|
5106e879c6 | ||
|
|
8c4d4532a4 | ||
|
|
9a736170fe | ||
|
|
9f8f9e8b97 | ||
|
|
0ee4bc22e5 | ||
|
|
b9da0129ff | ||
|
|
42c29d0f45 | ||
|
|
d0e6e9c837 | ||
|
|
5f8b0cc40a | ||
|
|
9736d6ba48 | ||
|
|
052346364a | ||
|
|
424d72a7b3 | ||
|
|
eb5f6167a5 | ||
|
|
e84a6b99a8 | ||
|
|
f3f3993963 | ||
|
|
4a8a1ce45c | ||
|
|
7aa9ecd17a | ||
|
|
aed25fea3a | ||
|
|
cbea309786 | ||
|
|
a3675854be | ||
|
|
b3c770216e | ||
|
|
8714c33e8a | ||
|
|
a0772fd7ba | ||
|
|
3d6baeaab0 | ||
|
|
d17bf67131 | ||
|
|
64d1f57276 | ||
|
|
963df7e398 | ||
|
|
5ed5ffea0e | ||
|
|
d560e2da93 | ||
|
|
2b359ce1c7 | ||
|
|
4971469590 | ||
|
|
db0c61dea4 | ||
|
|
c496b05630 | ||
|
|
8348c5a674 | ||
|
|
d03c14d49c | ||
|
|
7a61354d8c | ||
|
|
b9af6ef841 | ||
|
|
de0e69840e | ||
|
|
52312195b6 | ||
|
|
fbe1ec3e6d | ||
|
|
46b48ee55d | ||
|
|
f631f8c45b | ||
|
|
1552681e6b | ||
|
|
2377e04911 | ||
|
|
aac930237a | ||
|
|
97c588a8ba | ||
|
|
3d6bf1e0f8 | ||
|
|
b8a7870750 | ||
|
|
cb79a5a56d | ||
|
|
0567f0d190 | ||
|
|
340e665817 | ||
|
|
8ba50d0cf2 | ||
|
|
a6f0154803 | ||
|
|
652e128cfd | ||
|
|
9b2dc89c6c | ||
|
|
dc7da4f0f6 | ||
|
|
ab33b3aa84 | ||
|
|
bf836d4d46 | ||
|
|
c3f2cc7648 | ||
|
|
d2c4c7fb10 | ||
|
|
39f4dea051 | ||
|
|
7cf4095983 | ||
|
|
0d27abc6fc | ||
|
|
62b0a68bef | ||
|
|
5db14f9410 | ||
|
|
6542a326c1 | ||
|
|
72dace29b7 | ||
|
|
867f308027 | ||
|
|
d388472773 | ||
|
|
39b322ae6b | ||
|
|
23cce55246 | ||
|
|
b39019cec9 | ||
|
|
f2cba78549 | ||
|
|
f845eeb117 | ||
|
|
c53990c739 | ||
|
|
7d52b4d9a5 | ||
|
|
a69d61c124 | ||
|
|
798220cf9a | ||
|
|
7598b891c1 | ||
|
|
1f0b1dd10e | ||
|
|
f0bac741cc | ||
|
|
bd62611117 | ||
|
|
2bb79a2773 | ||
|
|
9fae11a42f | ||
|
|
700aa1ad5c | ||
|
|
9a9babfc35 | ||
|
|
97c8306eeb | ||
|
|
8d02303515 | ||
|
|
70e966923a | ||
|
|
f82e2a8d20 | ||
|
|
2424f684b9 | ||
|
|
6dcb2de28f | ||
|
|
fcb5e6ae1c | ||
|
|
cbd155406b | ||
|
|
70cc368225 | ||
|
|
6d28eae5dc | ||
|
|
ca932ecadc | ||
|
|
04d763d814 | ||
|
|
97ea15e978 | ||
|
|
28c17f33ab | ||
|
|
db87a69488 | ||
|
|
2b154dcfdf | ||
|
|
1000039c74 | ||
|
|
2ccc543542 | ||
|
|
8ac2ee7b49 | ||
|
|
db3fd27da2 | ||
|
|
6edd65c4ed | ||
|
|
aad32c4866 | ||
|
|
00e102fb0c | ||
|
|
a43361170c | ||
|
|
acd4054e79 | ||
|
|
ffdb727e1c | ||
|
|
cf328ca51e | ||
|
|
b871d2a8c4 | ||
|
|
02f348b15f | ||
|
|
4672f16fda | ||
|
|
6404657f99 | ||
|
|
2f3557c18f | ||
|
|
047f03a58c | ||
|
|
606b015314 | ||
|
|
478d82196a | ||
|
|
034ff2fb3f | ||
|
|
9bfb89fffd | ||
|
|
26ff33c41a | ||
|
|
9e84e3b83b | ||
|
|
ce2210b7bc | ||
|
|
82f5d0070e | ||
|
|
22d2289ed2 | ||
|
|
ff3d0b72b9 | ||
|
|
4de7fcd758 | ||
|
|
2845dd488e | ||
|
|
2e558ba031 | ||
|
|
3ba18633de | ||
|
|
9cbfc0ce9a | ||
|
|
55a2e0299c | ||
|
|
e304f105c9 | ||
|
|
502b66367c | ||
|
|
00caa368c5 | ||
|
|
a969b81e63 | ||
|
|
0a67926012 | ||
|
|
51821818e0 | ||
|
|
82c6fb6e19 | ||
|
|
7c1316619b | ||
|
|
2146c38748 | ||
|
|
e3f98a011c | ||
|
|
68060cf9e9 | ||
|
|
eed2e4a15b | ||
|
|
3a47e0e2ed | ||
|
|
60c30b92ba | ||
|
|
99352a5d30 | ||
|
|
35273c7bfe | ||
|
|
769b240164 | ||
|
|
823aa6b712 | ||
|
|
73bf3b9498 | ||
|
|
23d56a5758 | ||
|
|
086b1d85c7 | ||
|
|
32274dec86 | ||
|
|
dde52309d2 | ||
|
|
c9c8d337a0 | ||
|
|
8781cf1c57 | ||
|
|
87c13a876b | ||
|
|
e7d26ca5dc | ||
|
|
143f3cc27c | ||
|
|
0d01a3fce8 | ||
|
|
defade84e4 | ||
|
|
80c142ab7c | ||
|
|
c0c5f52ed9 | ||
|
|
97ac6851d0 | ||
|
|
d4b96a5a27 | ||
|
|
1bbfc6da25 | ||
|
|
1aabb2ed5d | ||
|
|
f53810ebb2 | ||
|
|
d61d62088f | ||
|
|
3df3706f27 | ||
|
|
66c4597525 | ||
|
|
30778a9c40 | ||
|
|
96650b0216 | ||
|
|
7545599493 | ||
|
|
eecd51e08b | ||
|
|
3047208e6a | ||
|
|
a796e29c98 | ||
|
|
26abd1f4e2 | ||
|
|
5f0e04aebe | ||
|
|
918ca4fdcb | ||
|
|
24e5dd0c78 | ||
|
|
f35715683e | ||
|
|
b5a65bc66c | ||
|
|
3a21f7ab26 | ||
|
|
a2c012d2c4 | ||
|
|
752b099d22 | ||
|
|
6470613221 | ||
|
|
44caa402d0 | ||
|
|
a716ca705c | ||
|
|
75ddc63466 | ||
|
|
0e41bc48b7 | ||
|
|
4896059162 | ||
|
|
0c5efa243d | ||
|
|
eadecf3eda | ||
|
|
29eebf9fbe | ||
|
|
ae1ceb26b9 | ||
|
|
55268c90c8 | ||
|
|
aa0ee2720b | ||
|
|
35759fdb70 | ||
|
|
39e4ab164e | ||
|
|
5089df3ffd | ||
|
|
9738257aa2 | ||
|
|
85439fd952 | ||
|
|
eaf8d95ce5 | ||
|
|
f560693748 | ||
|
|
6db3c65bcc | ||
|
|
693b32077a | ||
|
|
c7c66626b6 | ||
|
|
44b842592a | ||
|
|
2c9ae60dec | ||
|
|
a072d40594 | ||
|
|
a6e0ef8cd8 | ||
|
|
6b3a1998c8 | ||
|
|
534364a30f | ||
|
|
52ec35b94f | ||
|
|
3870f5d246 | ||
|
|
23cde6d1b8 | ||
|
|
c813ae4f04 | ||
|
|
d984dbd83b | ||
|
|
d59f0891e4 | ||
|
|
6275c8c67d | ||
|
|
ffdf5514ae | ||
|
|
56ee425227 | ||
|
|
19430ddeb5 | ||
|
|
d5d6b0e856 | ||
|
|
32b8148da1 | ||
|
|
50aecd02f4 | ||
|
|
b2066bc4b7 | ||
|
|
32aa2daea6 | ||
|
|
b846f631a4 | ||
|
|
3d34f1cdcb | ||
|
|
13db22d392 | ||
|
|
df73737128 | ||
|
|
079c42291c | ||
|
|
f8800b8303 | ||
|
|
5737f6fca0 | ||
|
|
8cb636bed2 | ||
|
|
7ff247c57f | ||
|
|
e9da84f91a | ||
|
|
47ea75348c | ||
|
|
cd9c425d9a | ||
|
|
6612e0107e | ||
|
|
ae0a481c64 | ||
|
|
aa0d4c4145 | ||
|
|
66355da04c | ||
|
|
e0abd7ef3e | ||
|
|
4fd1219814 | ||
|
|
1a43ef82d9 | ||
|
|
9f242216e6 | ||
|
|
9d10c57dc9 | ||
|
|
d50a0d94be | ||
|
|
3b0a75edf8 | ||
|
|
0d07b0346b | ||
|
|
c974c5687c | ||
|
|
610420c020 | ||
|
|
cd398b15d8 | ||
|
|
8abc05544c | ||
|
|
105c0fd3d2 | ||
|
|
19a3a4d4ef | ||
|
|
f2bc824a8e | ||
|
|
23a9cb2fad | ||
|
|
46df5a97b2 | ||
|
|
e53ae1d584 | ||
|
|
cd71799373 | ||
|
|
319329e2b2 | ||
|
|
985197788b | ||
|
|
587e6fcf72 | ||
|
|
22a80c5558 | ||
|
|
14ef7fa869 | ||
|
|
068803dc86 | ||
|
|
ee7f43abe1 | ||
|
|
015e25c618 | ||
|
|
5c8694ad65 | ||
|
|
12e2537222 | ||
|
|
28f0da0bc1 | ||
|
|
18a8a91d57 | ||
|
|
1b55285167 | ||
|
|
bddd010310 | ||
|
|
ee63cbe7e9 | ||
|
|
cca2173886 | ||
|
|
47fd9cab1c | ||
|
|
f684d07c61 | ||
|
|
dfb5a06d9d | ||
|
|
ff42c89cc4 | ||
|
|
856500b014 | ||
|
|
380f59ac0b | ||
|
|
9b16d6df2e | ||
|
|
d30874e0de | ||
|
|
28925c12eb | ||
|
|
31fcad4dbb | ||
|
|
e2a840ff0b | ||
|
|
0a40418614 | ||
|
|
90dbe9bf60 | ||
|
|
09dc271eec | ||
|
|
1f0a4cc548 | ||
|
|
c0b94e4e8e | ||
|
|
e404f4efd2 | ||
|
|
116b20cb9f | ||
|
|
afa1449f89 | ||
|
|
0c3fafdfef | ||
|
|
5ba4252388 | ||
|
|
6195a34db5 | ||
|
|
c3eb2eb601 | ||
|
|
38ed612cb9 | ||
|
|
5677fab2f9 | ||
|
|
a998c826a8 | ||
|
|
935d239eab | ||
|
|
961a491ea4 | ||
|
|
54a4f84708 | ||
|
|
c1b57af771 | ||
|
|
2b689239ae | ||
|
|
d44c2ba8fe | ||
|
|
d540728f50 | ||
|
|
12402f4c30 | ||
|
|
3e1961b435 | ||
|
|
4c23b59090 | ||
|
|
3a90366538 | ||
|
|
b85990daa6 | ||
|
|
e77f1bdd85 | ||
|
|
f97d8963f2 | ||
|
|
975e7e60ff | ||
|
|
c986321402 | ||
|
|
0b33c53f47 | ||
|
|
b2a14d4654 | ||
|
|
64adbf8769 | ||
|
|
43f3e682c5 | ||
|
|
ec095e58b7 | ||
|
|
0cc2a6b2cf | ||
|
|
70ec5b9f37 | ||
|
|
584b076886 | ||
|
|
52dc80209c | ||
|
|
230e7bbe34 | ||
|
|
0030fe1779 | ||
|
|
91eca8cac9 | ||
|
|
dbfb9b2cee | ||
|
|
61cf903028 | ||
|
|
3d2f6c0703 | ||
|
|
4ecd3d23f7 | ||
|
|
2d56a658b3 | ||
|
|
2bc524a2ee | ||
|
|
43f1fbf5b3 | ||
|
|
e983f44fd3 | ||
|
|
4d9da4a1f8 | ||
|
|
9d30712fb2 | ||
|
|
03b207d154 | ||
|
|
a743102567 | ||
|
|
eba2ea06ff | ||
|
|
6694ec78bc | ||
|
|
df6ad680ce | ||
|
|
b1b63513e7 | ||
|
|
22e30b93d5 | ||
|
|
c5e82a3895 | ||
|
|
4466458076 | ||
|
|
47a6fc19ca | ||
|
|
c891f43b14 | ||
|
|
1509650462 | ||
|
|
695e9ec5d7 | ||
|
|
c5ab89d71e | ||
|
|
08c492f1f4 | ||
|
|
0c8d45f679 | ||
|
|
d0ac4332ab | ||
|
|
08b9eedcec | ||
|
|
5f9e687c9c | ||
|
|
f1877fcea9 | ||
|
|
78d104e60c | ||
|
|
dd0185816c | ||
|
|
83eede8bc5 | ||
|
|
b22d4cb9ca | ||
|
|
de081d0205 | ||
|
|
f92569d468 | ||
|
|
bbbfc27593 | ||
|
|
d289b26034 | ||
|
|
babdc1db38 | ||
|
|
b559c827d2 | ||
|
|
268aa755c4 | ||
|
|
5d7935c855 | ||
|
|
6305a35a4f | ||
|
|
a0103036e4 | ||
|
|
b3b7e08c50 | ||
|
|
7dbeaf7a01 | ||
|
|
967073eaaf | ||
|
|
473d76c9d1 | ||
|
|
5bff50cade | ||
|
|
bfcbd9da6c | ||
|
|
2435c177f5 | ||
|
|
8e5aa69321 | ||
|
|
f3e4911c68 | ||
|
|
e8e4ff4111 | ||
|
|
523c32b8af | ||
|
|
5cdccb47f4 | ||
|
|
fa73bf8e87 | ||
|
|
5fe4e6cc96 | ||
|
|
f23900fc8c | ||
|
|
53e09a924c | ||
|
|
bde25e69f8 | ||
|
|
d2b7eb161c | ||
|
|
378c0ac259 | ||
|
|
a9086b0679 | ||
|
|
d0f1c733e7 | ||
|
|
0b7d019c02 | ||
|
|
5b3de8defe | ||
|
|
fb8904af54 | ||
|
|
f7b8d6ede5 | ||
|
|
d9e5adc032 | ||
|
|
a0790e9119 | ||
|
|
236db7d42d | ||
|
|
c85a45e520 | ||
|
|
5da7590eea | ||
|
|
df97eb2f72 | ||
|
|
32a0e519ad | ||
|
|
78d6561e39 | ||
|
|
9147823305 | ||
|
|
e7cf87be97 | ||
|
|
6e28490b84 | ||
|
|
fcc15d2e33 | ||
|
|
3522eafd2c | ||
|
|
848cfeb353 | ||
|
|
35a280eb31 | ||
|
|
aedba0e8be | ||
|
|
728088f5fa | ||
|
|
2116b928b6 | ||
|
|
2276603ac3 | ||
|
|
879166d939 | ||
|
|
f37997ac54 | ||
|
|
ed65603632 | ||
|
|
802af06c0f | ||
|
|
ec66e1a5c0 | ||
|
|
ee34e28986 | ||
|
|
d1071b79e3 | ||
|
|
2339fe22ae | ||
|
|
e02590ac96 | ||
|
|
7b05a18173 | ||
|
|
b22995a6d7 | ||
|
|
6c1436174c | ||
|
|
b2aa9b82c8 | ||
|
|
23aae52992 | ||
|
|
8b5e701ba4 | ||
|
|
8f88d2afab | ||
|
|
8d351178ac | ||
|
|
bc0e6cc8dd | ||
|
|
bf4fee1592 | ||
|
|
e1cf27a3ac | ||
|
|
db5bb8e5bb | ||
|
|
3ebef04a11 | ||
|
|
0d9fc309d5 | ||
|
|
c9c79dabef | ||
|
|
5fad6a63ca | ||
|
|
82900fb65d | ||
|
|
046272ff37 | ||
|
|
bc5f800a8b | ||
|
|
36d86e6220 | ||
|
|
986ef2b8e6 | ||
|
|
5629124755 | ||
|
|
0bfb64dc09 | ||
|
|
c482dcd8cb | ||
|
|
881cab051b | ||
|
|
afebf525d1 | ||
|
|
0e5d0a43f9 | ||
|
|
cf086cd7b2 | ||
|
|
81c72739b5 | ||
|
|
ff5a3c1055 | ||
|
|
bc04543b33 | ||
|
|
dd707c97af | ||
|
|
34708a8fa5 | ||
|
|
4ee8e473eb | ||
|
|
b4299241fe | ||
|
|
66c91484f5 | ||
|
|
808d621eda | ||
|
|
943c2230ba | ||
|
|
d4fd0df02c | ||
|
|
fd139a77f5 | ||
|
|
a08418bff8 | ||
|
|
bdc4189812 | ||
|
|
e252de319e | ||
|
|
0e91d837a0 | ||
|
|
71c2e235a8 | ||
|
|
ed0e212ce0 | ||
|
|
b405e8294b | ||
|
|
a7cd09d6d4 | ||
|
|
bc61393256 | ||
|
|
acd5f21866 | ||
|
|
3bff9b647c | ||
|
|
6d8cb6dac3 | ||
|
|
76dc80a45d | ||
|
|
53f9f82317 | ||
|
|
0b14b66727 | ||
|
|
fe1ffdcbb7 | ||
|
|
b891b407d4 | ||
|
|
5372492785 | ||
|
|
c40df97ffa | ||
|
|
9e14e28d89 | ||
|
|
e9e77fc689 | ||
|
|
779686425a | ||
|
|
09849391e3 | ||
|
|
c45a57ff43 | ||
|
|
100c8fef20 | ||
|
|
d752c36ea8 | ||
|
|
d8d752b623 | ||
|
|
b917403c93 | ||
|
|
8a8b4e728a | ||
|
|
f3fb85933f | ||
|
|
a831e525da | ||
|
|
fdc43f8279 | ||
|
|
2c64d45c69 | ||
|
|
5b438c3f30 | ||
|
|
3c395e7c9f | ||
|
|
eadd2d6854 | ||
|
|
c163ec1e8d | ||
|
|
93da6b6edf | ||
|
|
d7e2acd0ad | ||
|
|
365b6f5e17 | ||
|
|
70321ba4fb | ||
|
|
e6bc55af85 | ||
|
|
aca3ca9d65 | ||
|
|
1dfed14bc9 | ||
|
|
09015c98c4 | ||
|
|
14724f3e1a | ||
|
|
2b9dad934c | ||
|
|
86c3eec3e4 | ||
|
|
4a516103a6 | ||
|
|
b1ec332a56 | ||
|
|
6367105302 | ||
|
|
c1e58291b2 | ||
|
|
0f397fa410 | ||
|
|
c36d8b2256 | ||
|
|
d384f25ec2 | ||
|
|
e8df9be702 | ||
|
|
0d68d0c059 | ||
|
|
8709c50a9e | ||
|
|
bdb8263610 | ||
|
|
043c34c510 | ||
|
|
e0f67c9ee9 | ||
|
|
73756f7483 | ||
|
|
42ebf0a546 | ||
|
|
e6df6dc7f4 | ||
|
|
bd24eebbf2 | ||
|
|
65b42c93b0 | ||
|
|
65af012d60 | ||
|
|
9c3b67048a | ||
|
|
2ce99929e2 | ||
|
|
22c482bdc3 | ||
|
|
c358097d52 | ||
|
|
26e37c1da6 | ||
|
|
053c600b67 | ||
|
|
ce2dada9fd | ||
|
|
ccb2bf4344 | ||
|
|
8517434733 | ||
|
|
b410674f9e | ||
|
|
31e65a09e8 | ||
|
|
cdfec4d865 | ||
|
|
af98e349e9 | ||
|
|
c3c27ac664 | ||
|
|
2644330452 | ||
|
|
eacbec9c68 | ||
|
|
9e3bfdd57c | ||
|
|
f49998980f | ||
|
|
190a2ff92b | ||
|
|
96d2a8b30a | ||
|
|
d42a37f866 | ||
|
|
7b45d06631 | ||
|
|
cea6c98f54 | ||
|
|
fd564f09d1 | ||
|
|
76c2fd3414 | ||
|
|
712e850951 | ||
|
|
24cedab04b | ||
|
|
95348b1044 | ||
|
|
55ee3db5bc | ||
|
|
73f9d615bc | ||
|
|
4262e2ef09 | ||
|
|
2dd494bc42 | ||
|
|
8faf586e14 | ||
|
|
08975b5ef9 | ||
|
|
d1a505d07f | ||
|
|
1e4615aa75 | ||
|
|
0616127503 | ||
|
|
b8783078eb | ||
|
|
31c156f792 | ||
|
|
a770dd4836 | ||
|
|
bfdb01244d | ||
|
|
a206b422fb | ||
|
|
9f363f493b | ||
|
|
2972993a84 | ||
|
|
b17e47101c | ||
|
|
9e1edd55d6 | ||
|
|
61ce8d1cb0 | ||
|
|
e2718973ce | ||
|
|
b081864e66 | ||
|
|
a912d6ed1e | ||
|
|
e45ebdffb1 | ||
|
|
5734c5e093 | ||
|
|
cb570790e6 | ||
|
|
bb4f21d5ee | ||
|
|
fe20c30a81 | ||
|
|
7eb688bdcd | ||
|
|
22ee6703ad | ||
|
|
b734c72be7 | ||
|
|
9bcfefa31e | ||
|
|
37706f1c87 | ||
|
|
78bb2e12fe | ||
|
|
84d4b2db77 | ||
|
|
b47a9f251d | ||
|
|
46ebeba28f | ||
|
|
a262a8320b | ||
|
|
d39cda2e45 | ||
|
|
cb36f9fdb3 | ||
|
|
b69d2f1367 | ||
|
|
3fd3c7a383 | ||
|
|
8c4add38f4 | ||
|
|
d28cece264 | ||
|
|
a12d94a3bc | ||
|
|
d23f97abc8 | ||
|
|
9f4c1e64ce | ||
|
|
86956c8fc3 | ||
|
|
0991a8edaa | ||
|
|
380d30e612 | ||
|
|
4f54ffa9aa | ||
|
|
7cdb0cf560 | ||
|
|
798810b3dd | ||
|
|
1fcefc486c | ||
|
|
79f1248119 | ||
|
|
2cc4f032b0 | ||
|
|
64a3bd37e7 | ||
|
|
b4cf85149b | ||
|
|
788f8c9a1c | ||
|
|
e9199d6ca5 | ||
|
|
1ac215bf87 | ||
|
|
3e6b257fa0 | ||
|
|
a3d1ee474c | ||
|
|
1714902f88 | ||
|
|
f1e82a3647 | ||
|
|
357bf671ad | ||
|
|
183d475dc8 | ||
|
|
136d3118d2 | ||
|
|
c6fd6ab329 | ||
|
|
0ef016db07 | ||
|
|
08a5e82afc | ||
|
|
8514a5427c | ||
|
|
de6202c160 | ||
|
|
0f679e1f03 | ||
|
|
39dc1f882a | ||
|
|
5b43fa0e12 | ||
|
|
2f5e623284 | ||
|
|
a7829a2deb | ||
|
|
ba50bfa939 | ||
|
|
9d243103f4 | ||
|
|
16f44305e4 | ||
|
|
1dbf776279 | ||
|
|
bdf41451eb | ||
|
|
82cd24a7de | ||
|
|
21a750e8ec | ||
|
|
68ecddccdb | ||
|
|
8dd41b771e | ||
|
|
a4829198ff | ||
|
|
5cfc4ec3a0 | ||
|
|
19d0d6ff10 | ||
|
|
7461e76606 | ||
|
|
d8b0a11a49 | ||
|
|
1f9a440598 | ||
|
|
1d0b27c99e | ||
|
|
48576919b2 | ||
|
|
0174983208 | ||
|
|
a7776d2f53 | ||
|
|
85254eb8b5 | ||
|
|
9078cb29cc | ||
|
|
0fd3c83861 | ||
|
|
1291fc4187 | ||
|
|
04d8ab3792 | ||
|
|
cf0e31ac0f | ||
|
|
4458ce69df | ||
|
|
81ed03575d | ||
|
|
49c6bee6d7 | ||
|
|
d47ea04ec4 | ||
|
|
d5a5a4a8d1 | ||
|
|
087ad30d3c | ||
|
|
9f7ed25e74 | ||
|
|
013a2a35e0 | ||
|
|
9cece39ee9 | ||
|
|
05aa008ce1 | ||
|
|
9c1dd159de | ||
|
|
bc7535c4d2 | ||
|
|
df20abf283 | ||
|
|
96c539c0ee | ||
|
|
e53839ca2a | ||
|
|
ba8b99d3b8 | ||
|
|
cac48924ae | ||
|
|
7788bf3ce3 | ||
|
|
fa9ffb23ad | ||
|
|
a260019a7f | ||
|
|
f83ec7256f | ||
|
|
96b3de7916 | ||
|
|
b1686c2db9 | ||
|
|
c8418fe550 | ||
|
|
9f025747a7 | ||
|
|
59091efa86 | ||
|
|
8d7001fe56 | ||
|
|
c3a7939a77 | ||
|
|
683ba5eed3 | ||
|
|
4f00b5af4a | ||
|
|
26e81546eb | ||
|
|
1692fbf5d8 | ||
|
|
15525392a2 | ||
|
|
b535608519 | ||
|
|
0a44ed1355 | ||
|
|
d70140f148 | ||
|
|
ccdbf820ba | ||
|
|
56c0b48302 | ||
|
|
4c2fdf3b1c | ||
|
|
4eddec4b1e | ||
|
|
39248f9e2f | ||
|
|
fac0da224a | ||
|
|
6e50ed084d | ||
|
|
bf7bd68b6a | ||
|
|
5fd5dbab7b | ||
|
|
fec3ee6f08 | ||
|
|
85b284be54 | ||
|
|
02a6e2190f | ||
|
|
847fbfd71a | ||
|
|
327a93136a | ||
|
|
353d88f0a6 | ||
|
|
25e1319864 | ||
|
|
88033c0801 | ||
|
|
5700ade1a1 | ||
|
|
f6d05f3906 | ||
|
|
2fbe138c71 | ||
|
|
a2d957ba0d | ||
|
|
f807d3a024 | ||
|
|
15f5719f44 | ||
|
|
924f319343 | ||
|
|
9a075130f1 | ||
|
|
6d0281adc8 | ||
|
|
592ad18317 | ||
|
|
1f905e72d9 | ||
|
|
e02936a44a | ||
|
|
4ea4112490 | ||
|
|
20ee8ec107 | ||
|
|
6547a2bc50 | ||
|
|
4a74927fa2 | ||
|
|
41f92ef8e6 | ||
|
|
f092c107b5 | ||
|
|
f4c14d4854 | ||
|
|
1ed152cd49 | ||
|
|
e635dc1fb3 | ||
|
|
7b33fac71d | ||
|
|
a1e5a8b86a | ||
|
|
92c889ef9e | ||
|
|
eb2da300b0 | ||
|
|
6abb7e8f4d | ||
|
|
1f9cdc71d4 | ||
|
|
d03d302eef | ||
|
|
c5362f5931 | ||
|
|
f28bde179e | ||
|
|
f98fa364c0 | ||
|
|
e67f08c745 | ||
|
|
8d7377ba04 | ||
|
|
1c5af01a82 | ||
|
|
95462ce0ec | ||
|
|
9f614452b4 | ||
|
|
fa0c7a76cb | ||
|
|
06ae424b80 | ||
|
|
e4b5045ec7 | ||
|
|
7e3e18faea | ||
|
|
225b6c6958 | ||
|
|
57b73c485f | ||
|
|
c484fa99e2 | ||
|
|
8959d2e0a7 | ||
|
|
4613b69c28 | ||
|
|
43d610405f | ||
|
|
7e8a4a2a77 | ||
|
|
56ec4a6360 | ||
|
|
0b1df1483f | ||
|
|
7fab929194 | ||
|
|
89ea34015d | ||
|
|
7defa22b0b | ||
|
|
88e3ac30b6 | ||
|
|
52a13b1960 | ||
|
|
52cff1ee50 | ||
|
|
8a26f475a7 | ||
|
|
1d922a1848 | ||
|
|
51e9b0a22a | ||
|
|
268b4c854e | ||
|
|
af778f8fca | ||
|
|
15f32bdd73 | ||
|
|
36498c9dd2 | ||
|
|
66703d8963 | ||
|
|
71812d1bd5 | ||
|
|
5ed6136915 | ||
|
|
f48a079ae6 | ||
|
|
a47a100cb7 | ||
|
|
9ea4f82eaa | ||
|
|
617e20af0b | ||
|
|
89ff59d048 | ||
|
|
6ecbf45974 | ||
|
|
eb45ad600e | ||
|
|
10e6b6ca66 | ||
|
|
5732466e56 | ||
|
|
ce55d0c791 | ||
|
|
6ab4640cdc | ||
|
|
a6b03b8884 | ||
|
|
0dbe248df8 | ||
|
|
1681dbfa39 | ||
|
|
3777fbccc3 | ||
|
|
86d1370512 | ||
|
|
8c0adc9c61 | ||
|
|
c8461095c9 | ||
|
|
a452e78fa6 | ||
|
|
04571ce920 | ||
|
|
5dfa80c0b9 | ||
|
|
40c416618a | ||
|
|
9a1531442a | ||
|
|
6128ef4b37 | ||
|
|
84db1adfaf | ||
|
|
2c354c7f86 | ||
|
|
edc65a6a34 | ||
|
|
8412f9481c | ||
|
|
b26fc81187 | ||
|
|
0455947597 | ||
|
|
95965d65c9 | ||
|
|
8179cfa4c1 | ||
|
|
d21881e207 | ||
|
|
9777f25b9f | ||
|
|
6e3a32567c | ||
|
|
25926e32f0 | ||
|
|
3fdc8e7d3d | ||
|
|
71afba4d2e | ||
|
|
319799b5ce | ||
|
|
128327b8a3 | ||
|
|
6f8f3f98b4 | ||
|
|
2e272132b0 | ||
|
|
1dbae5b64c | ||
|
|
6d23d9ebb7 | ||
|
|
ec9b33ac97 | ||
|
|
5aa2a6eefe | ||
|
|
103a44991a | ||
|
|
0fcdd63941 | ||
|
|
8695714c65 | ||
|
|
2001cfe864 | ||
|
|
3badfd756c | ||
|
|
b08d9a5a8e | ||
|
|
ecf40e1525 | ||
|
|
909ddd653c | ||
|
|
2f19350ff5 | ||
|
|
68ef5177f0 | ||
|
|
ba138de53b | ||
|
|
2303034c92 | ||
|
|
2ceed475d5 | ||
|
|
e2398c8c0e | ||
|
|
36cf40f25c | ||
|
|
59c1e34024 | ||
|
|
2ac53afd96 | ||
|
|
d60a2d3723 | ||
|
|
4d2c75a824 | ||
|
|
99c72c78c1 | ||
|
|
052555c3f7 | ||
|
|
9a0bc16c86 | ||
|
|
6663844a86 | ||
|
|
d6386f739e | ||
|
|
ed1717f858 | ||
|
|
1cf0868e30 | ||
|
|
afda46d587 | ||
|
|
603c804535 | ||
|
|
fce19a363d | ||
|
|
e3820e93b7 | ||
|
|
459e485555 | ||
|
|
548127cc88 | ||
|
|
a1b816b403 | ||
|
|
5ad5994b9d | ||
|
|
25d6bbf659 | ||
|
|
75354a8a78 | ||
|
|
d1bd010e05 | ||
|
|
bb6be8e3d3 | ||
|
|
fc2d08c407 | ||
|
|
40938f0c8a | ||
|
|
490dee1fa0 | ||
|
|
27796bbd08 | ||
|
|
b5d53fa850 | ||
|
|
7b24984280 | ||
|
|
37564d630a | ||
|
|
380a5cf8a7 | ||
|
|
f2b26282b8 | ||
|
|
31bb70d9a2 | ||
|
|
2608b3f9f3 | ||
|
|
e76b1f1daa | ||
|
|
6cb31a274f | ||
|
|
181bcd70ad | ||
|
|
eb8c0539c5 | ||
|
|
4f3fde8055 | ||
|
|
c832e3c2c7 | ||
|
|
88bf183af5 | ||
|
|
462f992a2b | ||
|
|
c5dc075fb0 | ||
|
|
11a247edc2 | ||
|
|
328d639886 | ||
|
|
0800279325 | ||
|
|
26770515e1 | ||
|
|
b0c24de596 | ||
|
|
fd18395f78 | ||
|
|
360c56ec34 | ||
|
|
3890d17c61 | ||
|
|
2d4694e72d | ||
|
|
54ece346bc | ||
|
|
5e71bad5cf | ||
|
|
d1adc5ea9b | ||
|
|
bb755daf8b | ||
|
|
715ddc6b02 | ||
|
|
ef978b2ebf | ||
|
|
d0f0aef2ef | ||
|
|
448dc1442c | ||
|
|
e23a5ad141 | ||
|
|
4ae05dddeb | ||
|
|
b318bde76c | ||
|
|
3876efe494 | ||
|
|
f075339c5f | ||
|
|
abaf0daa6e | ||
|
|
4a11800d9e | ||
|
|
cafecb091d | ||
|
|
7cf0e6034b | ||
|
|
c7aa0a2321 | ||
|
|
58f4e3756c | ||
|
|
067e89f6a0 | ||
|
|
efed2bc262 | ||
|
|
adf0255bdf | ||
|
|
1e259f3043 | ||
|
|
ffa3a229b5 | ||
|
|
0f8df8c985 | ||
|
|
ed0b38c7a7 | ||
|
|
fa0ff8be39 | ||
|
|
5d724f6b84 | ||
|
|
ffb43a8534 | ||
|
|
ce5fd7955f | ||
|
|
e917535380 | ||
|
|
a5512dd4c4 | ||
|
|
bac3ace8fc | ||
|
|
60deb3f0ba | ||
|
|
eaaaaec5a5 | ||
|
|
5bcf85e57d | ||
|
|
1d466d6fd1 | ||
|
|
57cfb4ed7e | ||
|
|
9fa4cbdfa5 | ||
|
|
5af2b3c2f5 | ||
|
|
2e5058c4c9 | ||
|
|
9fc4a4f24a | ||
|
|
e905a36fb2 | ||
|
|
7dc4f8d5cc | ||
|
|
da906f48d9 | ||
|
|
057a022205 | ||
|
|
7a54bd9f2a | ||
|
|
9b48a26aef | ||
|
|
a37d06064a | ||
|
|
c1eea166c9 | ||
|
|
25cbab2ea4 | ||
|
|
cf81a8979f | ||
|
|
e3a8638471 | ||
|
|
d26fcc9918 | ||
|
|
8e9dc9f20e | ||
|
|
81d08ac50b | ||
|
|
e13320f58d | ||
|
|
1f727f565f | ||
|
|
9fd36279ab | ||
|
|
4078d9b669 | ||
|
|
3b54d6f8e5 | ||
|
|
58b4f6abca | ||
|
|
f041c762ac | ||
|
|
88ae522c9a | ||
|
|
5cdaaed311 | ||
|
|
40947f8cb2 | ||
|
|
9abc67bbeb | ||
|
|
16cdf3006f | ||
|
|
15004c654f | ||
|
|
062a319a7c | ||
|
|
ed9ca270a7 | ||
|
|
e0037c7f70 | ||
|
|
4301c06d17 | ||
|
|
90bc1cd951 | ||
|
|
67784c0568 | ||
|
|
20ec700045 | ||
|
|
892c0e3d8b | ||
|
|
ecd3963b7c | ||
|
|
54dd20cdb4 | ||
|
|
2f53411efc | ||
|
|
7a858cea23 | ||
|
|
987414ed7b | ||
|
|
047286f9c0 | ||
|
|
a2955196af | ||
|
|
62224857f0 | ||
|
|
c1a37db871 | ||
|
|
a8145fe4c2 | ||
|
|
3b44e7c1c4 | ||
|
|
830fd5f83a | ||
|
|
f83e435a90 | ||
|
|
0ebd87bcb9 | ||
|
|
1ea368856b | ||
|
|
a8077e6ed1 | ||
|
|
7def37961a | ||
|
|
4f830c9c22 | ||
|
|
032f87caec | ||
|
|
e616aad911 | ||
|
|
c2f6f5a7cd | ||
|
|
d3fbaca228 | ||
|
|
ae913f14ce | ||
|
|
1ee79ee61e | ||
|
|
b5ebfd0b07 | ||
|
|
286a3e6ca2 | ||
|
|
665646707c | ||
|
|
279ae7ea10 | ||
|
|
d65cead212 | ||
|
|
e21cbf2a06 | ||
|
|
1fae9aff0c | ||
|
|
a06d74472d | ||
|
|
8cc1dc9f1c | ||
|
|
86e5a09b01 | ||
|
|
1d5f2fbd11 | ||
|
|
f8851121ab | ||
|
|
e9f8640ee6 | ||
|
|
4219691e62 | ||
|
|
4ae1879b87 | ||
|
|
cde1db4436 | ||
|
|
d2dce6db25 | ||
|
|
fae115b995 | ||
|
|
8f9dcf5a97 | ||
|
|
91ba44cc96 | ||
|
|
5330914431 | ||
|
|
927c012fc9 | ||
|
|
dc161d9f2f | ||
|
|
040fadb0c3 | ||
|
|
bb1484a444 | ||
|
|
b31cc89478 | ||
|
|
05c851301e | ||
|
|
dbf6c0a075 | ||
|
|
3084d58da1 | ||
|
|
19b57aa1ea | ||
|
|
d157818d7e | ||
|
|
ddcd172af1 | ||
|
|
19407ba3bc | ||
|
|
3502398d1d | ||
|
|
205acd2c4d | ||
|
|
e463430d51 | ||
|
|
cae412d280 | ||
|
|
56f6698ba5 | ||
|
|
a62b98ac50 | ||
|
|
7a7634de2d | ||
|
|
c6e85970d4 | ||
|
|
110bad7041 | ||
|
|
85e932bfc1 | ||
|
|
886b59f400 | ||
|
|
8bd9b460cb | ||
|
|
34ae57dfa3 | ||
|
|
81a322eaaf | ||
|
|
2479b8a57f | ||
|
|
2fe4656db4 | ||
|
|
6fc7c6a7d0 | ||
|
|
1d33d7d205 | ||
|
|
56898f7e37 | ||
|
|
3278cc8cc0 | ||
|
|
112dfb865b | ||
|
|
a0f4d481dc | ||
|
|
7b01ba9776 | ||
|
|
32620dd556 | ||
|
|
76f74f479b | ||
|
|
e9831442cd | ||
|
|
5d4cc5bf3d | ||
|
|
26d7c21314 | ||
|
|
a4af270ea8 | ||
|
|
b6c38ceb73 | ||
|
|
3a9512f086 | ||
|
|
9679557747 | ||
|
|
3c334a0238 | ||
|
|
5574aaa8cb | ||
|
|
edf15532d2 | ||
|
|
d23b18beb5 | ||
|
|
e23b2c4c4f | ||
|
|
5b6a6fb63e | ||
|
|
58989b85c8 | ||
|
|
8786bb25c5 | ||
|
|
670139492d | ||
|
|
5d3cf8074b | ||
|
|
85c54703ec | ||
|
|
02687453f2 | ||
|
|
90828cedae | ||
|
|
f65b2278f0 | ||
|
|
bdfc0364d5 | ||
|
|
65bd3fbddb | ||
|
|
f8e29ea66a | ||
|
|
a8ed04c4d2 | ||
|
|
73b7eb0c7f | ||
|
|
486f1a74ab | ||
|
|
5d36d81ae1 | ||
|
|
dc56e49410 | ||
|
|
ca199cdefe | ||
|
|
b2ba9d68c9 | ||
|
|
00ce3588d3 | ||
|
|
814aff78b5 | ||
|
|
a261d10bfd | ||
|
|
ce46512c74 | ||
|
|
fb7446487e | ||
|
|
a6a88a0d2e | ||
|
|
4cee506710 | ||
|
|
5dddf6846b | ||
|
|
03da9348e5 | ||
|
|
28a14cf5ae | ||
|
|
56b7ab1734 | ||
|
|
68599351aa | ||
|
|
c9a7527f33 | ||
|
|
5f9b25453d | ||
|
|
ccc31b2c7c | ||
|
|
e54d441433 | ||
|
|
88cffca270 | ||
|
|
92f49b4711 | ||
|
|
faf3885775 | ||
|
|
f04340679e | ||
|
|
7f5583c7ae | ||
|
|
a5785552d9 | ||
|
|
abcd26da43 | ||
|
|
4545c15173 | ||
|
|
b7cf85e8c8 | ||
|
|
9cde377133 | ||
|
|
74c29b0bb7 | ||
|
|
635fefcb5c | ||
|
|
ff3b348771 | ||
|
|
27700d316f | ||
|
|
77a49fa40e | ||
|
|
5273b9d0ee | ||
|
|
ae7445ee8e | ||
|
|
3ef4287d57 | ||
|
|
581dc4e070 | ||
|
|
1bce148be2 | ||
|
|
eb9147a575 | ||
|
|
781334b615 | ||
|
|
5282ae2250 | ||
|
|
bae050e689 | ||
|
|
ab60a5d73d | ||
|
|
71d4b5c5df | ||
|
|
7e64d3e653 | ||
|
|
e7fde2795f | ||
|
|
f36c797e98 | ||
|
|
49b780358e | ||
|
|
af8e1a6472 | ||
|
|
91362b0f82 | ||
|
|
e61fc1f709 | ||
|
|
8fd860a413 | ||
|
|
82c247f3cf | ||
|
|
5e5038d780 | ||
|
|
2b32430a10 | ||
|
|
5381c4e0ae | ||
|
|
406b076b95 | ||
|
|
993ee8c900 | ||
|
|
cc6e74dfd5 | ||
|
|
40c590f445 | ||
|
|
5486cff441 | ||
|
|
a928d337d9 | ||
|
|
fa8407371b | ||
|
|
8c40148ca7 | ||
|
|
8eb4d0a36b | ||
|
|
64f60228ec | ||
|
|
1f5d2520c3 | ||
|
|
d2e1428c75 | ||
|
|
f3b22acc9a | ||
|
|
cd236aa886 | ||
|
|
3c8e7e739d | ||
|
|
a64351279d | ||
|
|
ba91b3aa2e | ||
|
|
8394ff5537 | ||
|
|
14744da8f6 | ||
|
|
2c2d6c6d47 | ||
|
|
aeb32104a4 | ||
|
|
73895b1c88 | ||
|
|
f54fb67efc | ||
|
|
422eeddbef | ||
|
|
86755029ef | ||
|
|
2900013118 | ||
|
|
cfe8882f72 | ||
|
|
29abcbced8 | ||
|
|
e0ebb8e7d8 | ||
|
|
96e05fb12d | ||
|
|
07fd92cd4c | ||
|
|
38d8b0a1ec | ||
|
|
fd0be35d99 | ||
|
|
1461be2004 | ||
|
|
569d4ee201 | ||
|
|
1d93d9a63a | ||
|
|
be5962fb3a | ||
|
|
94d0ebbd7d | ||
|
|
a275a30dca | ||
|
|
c90f680284 | ||
|
|
daa2c6ff21 | ||
|
|
41361ce2a2 | ||
|
|
63f842c7db | ||
|
|
06aca2e1d5 | ||
|
|
3abb52a085 | ||
|
|
87fa6bc252 | ||
|
|
4b5d64939d | ||
|
|
91e46ceb77 | ||
|
|
cea01e037a | ||
|
|
465d3ae1af | ||
|
|
6624fc6076 | ||
|
|
d5b9722533 | ||
|
|
745c9a9c2b | ||
|
|
e3be5f8468 | ||
|
|
2c19390d7c | ||
|
|
da8380c62c | ||
|
|
e14e217fcd | ||
|
|
b7a96a33ef | ||
|
|
7c6faff405 | ||
|
|
c507ab30e9 | ||
|
|
af96ffb3e9 | ||
|
|
5c1adf9e37 | ||
|
|
3711283de5 | ||
|
|
43ad9aa2b1 | ||
|
|
5dfcca96c8 | ||
|
|
7d1614b933 | ||
|
|
c9d0293bd0 | ||
|
|
2e25f6b217 | ||
|
|
cd0eb0d8ce | ||
|
|
a4dbd2dae5 | ||
|
|
fbc8b46d13 | ||
|
|
881b0a6add | ||
|
|
5378f01462 | ||
|
|
3baf983e86 | ||
|
|
1ccb3162ff | ||
|
|
4d5d298ee1 | ||
|
|
b1aa7fa7f8 | ||
|
|
9312dea2b2 | ||
|
|
270d61ce1b | ||
|
|
70d0a5f665 | ||
|
|
607744813a | ||
|
|
839e999a71 | ||
|
|
0239be9be5 | ||
|
|
6e2c68ef42 | ||
|
|
d85d963842 | ||
|
|
3d8001ae1c | ||
|
|
80f08e6830 | ||
|
|
7c4d634ae6 | ||
|
|
51ccbdf6c4 | ||
|
|
b0478a7e5b | ||
|
|
e6598fac20 | ||
|
|
f9f7c19d81 | ||
|
|
4486957b9a | ||
|
|
718ff4a743 | ||
|
|
fa630c048c | ||
|
|
4b8ef6b09a | ||
|
|
61ae4be16a | ||
|
|
34a17d4571 | ||
|
|
6ab046ba8f | ||
|
|
05cb47e650 | ||
|
|
e75c4c012d | ||
|
|
bcb7899b04 | ||
|
|
81ffa0811e | ||
|
|
f8060ce112 | ||
|
|
3b6d9dc552 | ||
|
|
c096232cb1 | ||
|
|
33c44c2dd9 | ||
|
|
cd0ee4cd69 | ||
|
|
6e9e6af2f0 | ||
|
|
7ad27a2b65 | ||
|
|
e3cfc9ad80 | ||
|
|
88687608e7 | ||
|
|
ed21ff52ee | ||
|
|
f98a236a5b | ||
|
|
5f8970e6bf | ||
|
|
f535ef4924 | ||
|
|
6e832de4a9 | ||
|
|
3226e7f6df | ||
|
|
39ea14202e | ||
|
|
55b40d92d4 | ||
|
|
8ec2e3cc7b | ||
|
|
725e3cdbf3 | ||
|
|
96eafe6dc1 | ||
|
|
f51e7519dc | ||
|
|
3442ec77a7 | ||
|
|
e8d493578b | ||
|
|
0ee1112d9d | ||
|
|
4971054c34 | ||
|
|
d8cb58c746 | ||
|
|
eb14c08cab | ||
|
|
fed9408b90 | ||
|
|
ffba1c1d43 | ||
|
|
bdbf21b3e2 | ||
|
|
f019c8d2ce | ||
|
|
ad099d79f2 | ||
|
|
7feaa896e5 | ||
|
|
178052b2f6 | ||
|
|
dc9617c7aa | ||
|
|
587339bea0 | ||
|
|
7c8c85e435 | ||
|
|
d8494e44e7 | ||
|
|
30c3d6ee40 | ||
|
|
f3012ed839 | ||
|
|
afa0565a44 | ||
|
|
750deac2cf | ||
|
|
c0b1ae4923 | ||
|
|
14b9a12a2f | ||
|
|
a77d1e502c | ||
|
|
e5e5725a24 | ||
|
|
92343469e7 | ||
|
|
3ece4f137f | ||
|
|
70b8b9ecdb | ||
|
|
11ee6f417f | ||
|
|
5ea92dda4b | ||
|
|
ca08125d55 | ||
|
|
7b50f2b0eb | ||
|
|
6a61f0911d | ||
|
|
e975f1b216 | ||
|
|
62cdf0d928 | ||
|
|
97b8e73716 | ||
|
|
131d2c97ca | ||
|
|
ada55dfdfb | ||
|
|
cc721efe97 | ||
|
|
b362c6a967 | ||
|
|
5eef6bc527 | ||
|
|
8a3a5a8cb1 | ||
|
|
ca762588ca | ||
|
|
26c335fc68 | ||
|
|
f80eb16060 | ||
|
|
8ea611df44 | ||
|
|
3db83dd3a2 | ||
|
|
29707cd496 | ||
|
|
5205c4963f | ||
|
|
5aadfff1de | ||
|
|
cb84e3bb2e | ||
|
|
e0f819691f | ||
|
|
1ce0191a74 | ||
|
|
788909de94 | ||
|
|
2dbc04c6fb | ||
|
|
fc1feec8bf | ||
|
|
819f842cf1 | ||
|
|
0ffc74c669 | ||
|
|
9ed0494b45 | ||
|
|
d37a74846a | ||
|
|
e97205922c | ||
|
|
8b57a888e7 | ||
|
|
d79ed76d80 | ||
|
|
488129d7ad | ||
|
|
dc9f991e5f | ||
|
|
c691ec843d | ||
|
|
67f2cdc921 | ||
|
|
ee51dae73f | ||
|
|
0316063ba9 | ||
|
|
8939d4de92 | ||
|
|
5de085d83d | ||
|
|
19a10cee82 | ||
|
|
db70f04447 | ||
|
|
d5dbd5ccf1 | ||
|
|
b5aff1575d | ||
|
|
884d648cc2 | ||
|
|
ed05198c45 | ||
|
|
c593eca936 | ||
|
|
cfc09bfcc8 | ||
|
|
2daf1e2004 | ||
|
|
5266bf93a3 | ||
|
|
e04a5dc81f | ||
|
|
ccf8059452 | ||
|
|
b86c61dcdb | ||
|
|
f7e7699d93 | ||
|
|
eb2e960af4 | ||
|
|
2357928e72 | ||
|
|
ae58af4bb7 | ||
|
|
902b1b2c32 | ||
|
|
225ba4cc35 | ||
|
|
fe088dba7a | ||
|
|
46b896b2cf | ||
|
|
52ef488208 | ||
|
|
34c33549b8 | ||
|
|
76230cad53 | ||
|
|
9ffc404027 | ||
|
|
58442b1af6 | ||
|
|
5f6b63e978 | ||
|
|
ad08935c57 | ||
|
|
af405a8ab2 | ||
|
|
1ffbeba181 | ||
|
|
630788731e | ||
|
|
721368ea8d | ||
|
|
1f3a21ba20 | ||
|
|
6cfd68d9fb | ||
|
|
6413d47fb2 | ||
|
|
9e0aa0d11e | ||
|
|
ee4c5ef64a | ||
|
|
4ab3854d66 | ||
|
|
354f87c888 | ||
|
|
92fc28aa09 | ||
|
|
30e330c887 | ||
|
|
093181c186 | ||
|
|
f316958943 | ||
|
|
0432b1a6f9 | ||
|
|
b2f4ef06c7 | ||
|
|
f469c794ce | ||
|
|
221e014a25 | ||
|
|
fb2868f8bb | ||
|
|
aa38dcf490 | ||
|
|
06116cdde7 | ||
|
|
5f1329c71c | ||
|
|
613e37837b | ||
|
|
a914a7c438 | ||
|
|
8c7b3a1f9b | ||
|
|
9c16d5a747 | ||
|
|
0d9d0b0446 | ||
|
|
cb344a3792 | ||
|
|
dd9fc4173d | ||
|
|
fd6739f0cc | ||
|
|
fa83750e72 | ||
|
|
a72d5c899e | ||
|
|
5cf872d000 | ||
|
|
3d3d1bc623 | ||
|
|
59e6386361 | ||
|
|
9c1eda0d9a | ||
|
|
785119f5bb | ||
|
|
8a3ebf64bc | ||
|
|
af302d8368 | ||
|
|
f03cc96050 | ||
|
|
e7f7b14214 | ||
|
|
84d2db0d35 | ||
|
|
74e56a890c | ||
|
|
b94ef39a51 | ||
|
|
877417d68f | ||
|
|
62f14f0473 | ||
|
|
66a99e13bb | ||
|
|
d316d8ac61 | ||
|
|
40574b65af | ||
|
|
81c9177c09 | ||
|
|
68ef5dd2a4 | ||
|
|
59815ea53d | ||
|
|
5540079e81 | ||
|
|
68a0e76ca6 | ||
|
|
1d9fbeed81 | ||
|
|
d0edd9d5c1 | ||
|
|
9ea30c057f | ||
|
|
c1f2ad90ef | ||
|
|
2a47bb8b54 | ||
|
|
b6686a5fcb | ||
|
|
16b8a45ed6 | ||
|
|
579c365808 | ||
|
|
745ac294a5 | ||
|
|
eedda6e648 | ||
|
|
5ec1b31804 | ||
|
|
8e661c34e9 | ||
|
|
ce0b1733fe | ||
|
|
0a8b09a11a | ||
|
|
0b77702626 | ||
|
|
a4382f0b27 | ||
|
|
2732e7c3d9 | ||
|
|
2188b0982c | ||
|
|
eeb9633854 | ||
|
|
60b6c48775 | ||
|
|
4e84e8048f | ||
|
|
e220c38b97 | ||
|
|
ad1522f428 | ||
|
|
bc50c2aa55 | ||
|
|
28b5e88c50 | ||
|
|
33ca352fd9 | ||
|
|
058c78d8be | ||
|
|
05fdf5e9a0 | ||
|
|
533521b29d | ||
|
|
2dff093305 | ||
|
|
ba6ce07759 | ||
|
|
33eb5e11de | ||
|
|
8d3801896f | ||
|
|
f1236e9bf7 | ||
|
|
fa1548f3ce | ||
|
|
0995e10d87 | ||
|
|
e143158f12 | ||
|
|
40bfb55370 | ||
|
|
dab313897e | ||
|
|
c7fb2ff894 | ||
|
|
ced6fe313a | ||
|
|
7f5571200c | ||
|
|
fd879c7cf5 | ||
|
|
a9d04547d1 | ||
|
|
09e09e43ba | ||
|
|
87f0b19dc0 | ||
|
|
eab79faaeb | ||
|
|
dbbb2cdaba | ||
|
|
7246fd667e | ||
|
|
fe4f4bddc8 | ||
|
|
f7ba766de3 | ||
|
|
70c29051b3 | ||
|
|
043b1c28d2 | ||
|
|
022653f446 | ||
|
|
1706db38df | ||
|
|
81287833ee | ||
|
|
2f12d09663 | ||
|
|
3ace83c5aa | ||
|
|
356de985d2 | ||
|
|
ab93606e4a | ||
|
|
ec2dc8d7a4 | ||
|
|
a2eb2e7da6 | ||
|
|
3590ed378d | ||
|
|
2f37357a1b | ||
|
|
981c982237 | ||
|
|
457354c244 | ||
|
|
00afe7aa94 | ||
|
|
450615e0bb | ||
|
|
73881ad1e0 | ||
|
|
2522b88fc6 | ||
|
|
0068108c57 | ||
|
|
400f6fc5fb | ||
|
|
901143b72a | ||
|
|
9a38586e13 | ||
|
|
62ad7734b2 | ||
|
|
7ef9a6c0a7 | ||
|
|
8364694fb4 | ||
|
|
683c5a22db | ||
|
|
0574ac7530 | ||
|
|
a955f90a7e | ||
|
|
2dc31c0edd | ||
|
|
6ea15cec6f | ||
|
|
9df238c5f2 | ||
|
|
9466802a95 | ||
|
|
36130965f2 | ||
|
|
d4f6909859 | ||
|
|
1a8554fd32 | ||
|
|
9f5b138b0f | ||
|
|
cebe580484 | ||
|
|
3b4ec5926d | ||
|
|
c5776d9da4 | ||
|
|
9e45cafac4 | ||
|
|
2033d15b2f | ||
|
|
e2123f4a9e | ||
|
|
f6dfd2fa43 | ||
|
|
1f382f9252 | ||
|
|
459bcd88a9 | ||
|
|
1487b5004d | ||
|
|
a28509019a | ||
|
|
c189895f6c | ||
|
|
5e971994ff | ||
|
|
f108049142 | ||
|
|
9fc1e88d9f | ||
|
|
2cd44d0234 | ||
|
|
16bc262a4f | ||
|
|
ef5c20dc6f | ||
|
|
a53f854187 | ||
|
|
ea9de37dd1 | ||
|
|
235d99021b | ||
|
|
8af4cf87b5 | ||
|
|
997247ee77 | ||
|
|
b92e518370 | ||
|
|
b5d57262f9 | ||
|
|
45f6ea211d | ||
|
|
a4a276083a | ||
|
|
c42613cf4d | ||
|
|
84de0458aa | ||
|
|
2b33e91e2c | ||
|
|
71c363ebc8 | ||
|
|
7ffc00159e | ||
|
|
79aba5edf2 | ||
|
|
a504f5f309 | ||
|
|
90144ccd9a | ||
|
|
8c6d35645d | ||
|
|
0706c65ce6 | ||
|
|
0dc3a72912 | ||
|
|
0de857bf7a | ||
|
|
55558cb272 | ||
|
|
e66d065b6d | ||
|
|
7bf1420463 | ||
|
|
3a0b28144f | ||
|
|
bc19072dc6 | ||
|
|
1eddac4066 | ||
|
|
2571f22ae5 | ||
|
|
5346efe009 | ||
|
|
bb3f37ca35 | ||
|
|
0e49a7a1fd | ||
|
|
93159fec4b | ||
|
|
ab2ea5697f | ||
|
|
0eaec6bd83 | ||
|
|
8cca22d79c | ||
|
|
e364a25e46 | ||
|
|
049da81bf2 | ||
|
|
947affd78f | ||
|
|
cdcbf20d6a | ||
|
|
15ab30d0c6 | ||
|
|
16d3cebf3e | ||
|
|
1069ad21d8 | ||
|
|
1423fd9024 | ||
|
|
0439be2870 | ||
|
|
22246353e2 | ||
|
|
02bf6bd3a6 | ||
|
|
8d511b0f72 | ||
|
|
4edd0b1fd6 | ||
|
|
f9073a2f07 | ||
|
|
ad9dfec894 | ||
|
|
9a829500cd | ||
|
|
9fa5004a35 | ||
|
|
2a5bf2a222 | ||
|
|
b22bf0c4b0 | ||
|
|
17c76e413d | ||
|
|
803287a514 | ||
|
|
1a89e35729 | ||
|
|
5950bedfae | ||
|
|
c1ef87e009 | ||
|
|
09298dab7a | ||
|
|
afcd9b801f | ||
|
|
12bedac28a | ||
|
|
c50714ec42 | ||
|
|
9f8d1d2436 | ||
|
|
920078a738 | ||
|
|
4136a5fd5e | ||
|
|
7d236b607e | ||
|
|
f2d1c7d82a | ||
|
|
a7c133daa6 | ||
|
|
f89773f4a3 | ||
|
|
363c4acadc | ||
|
|
b9d66f010f | ||
|
|
57df250128 | ||
|
|
1657d6a0b8 | ||
|
|
3b200bbffc | ||
|
|
121c7ada1f | ||
|
|
25f4cae3ff | ||
|
|
9f42bce16a | ||
|
|
defe59d79e | ||
|
|
8a23811831 | ||
|
|
5190710aef | ||
|
|
04ddc0487a | ||
|
|
f9c9cf9ad2 | ||
|
|
b8b02c7b25 | ||
|
|
a061a03860 | ||
|
|
7793f281c5 | ||
|
|
593374764d | ||
|
|
a320b54c2f | ||
|
|
6ba24c3296 | ||
|
|
92949ddcdb | ||
|
|
b2bc1bf74a | ||
|
|
70397461eb | ||
|
|
aefed0df89 | ||
|
|
bc954bc7be | ||
|
|
e4cfeb1977 | ||
|
|
e4e4af1b2d | ||
|
|
2bd3f1fcc3 | ||
|
|
7454efe648 | ||
|
|
9df2769383 | ||
|
|
36cbbac870 | ||
|
|
406b88777c | ||
|
|
113313e000 | ||
|
|
f7c6df6e6a | ||
|
|
9e92520266 | ||
|
|
1dd07337fd | ||
|
|
746bfd8bca | ||
|
|
10dee9b57b | ||
|
|
31e5d9ffe6 | ||
|
|
a45b18b335 | ||
|
|
57b6ac7cb1 | ||
|
|
4611536ca9 | ||
|
|
e4abfd192e | ||
|
|
c85bcbcf31 | ||
|
|
cb7932ecda | ||
|
|
e4fc37e91a | ||
|
|
74821c2c17 | ||
|
|
e6ee9803d4 | ||
|
|
fa992853b0 | ||
|
|
1e4dd102bd | ||
|
|
0f9c37fbc7 | ||
|
|
a261060e5c | ||
|
|
78a1aad6c0 | ||
|
|
7b6bd75c22 | ||
|
|
c983dac771 | ||
|
|
7a10748355 | ||
|
|
ca1186dca1 | ||
|
|
3070c7e991 | ||
|
|
406708218b | ||
|
|
c7b74b2090 | ||
|
|
1b38f3ad3a | ||
|
|
1e1c6526b2 | ||
|
|
0be5488104 | ||
|
|
13fcdc0c1e | ||
|
|
5f5edbc10e | ||
|
|
71a8a13644 | ||
|
|
a17c22746d | ||
|
|
e5f8f15293 | ||
|
|
22ec11c766 | ||
|
|
1b6f721e50 | ||
|
|
9c88f12abe | ||
|
|
e285d0b547 | ||
|
|
5dc956fbe1 | ||
|
|
1449dfc966 | ||
|
|
fcf3b14712 | ||
|
|
28473fa3e0 | ||
|
|
8ce106cb4b | ||
|
|
bdf9857e6f | ||
|
|
22ac9f63a1 | ||
|
|
0de7f4712f | ||
|
|
8d92089487 | ||
|
|
3a0849699f | ||
|
|
008fc5623e | ||
|
|
9d66ac4a6a | ||
|
|
405d93c6f2 | ||
|
|
2fcdc90d3f | ||
|
|
27e3b6f377 | ||
|
|
faf676e6e0 | ||
|
|
624566b04e | ||
|
|
5a00939512 | ||
|
|
4431259cd8 | ||
|
|
87c914bece | ||
|
|
56c26f80b3 | ||
|
|
215dbef7a0 | ||
|
|
64c9bf27c1 | ||
|
|
1abc82e718 | ||
|
|
be9df3c07d | ||
|
|
798ecfc8f0 | ||
|
|
015a339202 | ||
|
|
2ee06c13f9 | ||
|
|
0851b97ba5 | ||
|
|
1b64f67f2b | ||
|
|
c908f132ec | ||
|
|
c78df40cb0 | ||
|
|
5a61bbec26 | ||
|
|
3b4607d30d | ||
|
|
5befe66aa5 | ||
|
|
3c249a40a0 | ||
|
|
7e81d5fe11 | ||
|
|
6b4858303b | ||
|
|
5000f7f8d7 | ||
|
|
f643af13d7 | ||
|
|
afc8c9bfe9 | ||
|
|
a6e859d9b7 | ||
|
|
5bf68493df | ||
|
|
43f3488270 | ||
|
|
62efe0621f | ||
|
|
161f03217e | ||
|
|
40b56d7f62 | ||
|
|
4eb731cfae | ||
|
|
35786966c6 | ||
|
|
c3b64164ba | ||
|
|
644b4aa42d | ||
|
|
838291c3f3 | ||
|
|
3296298d21 | ||
|
|
211311be9f | ||
|
|
9a532b1eb2 | ||
|
|
1fbd3a2c26 | ||
|
|
99038ffc44 | ||
|
|
67565ca191 | ||
|
|
81d001d49e | ||
|
|
cc4a22b2d1 | ||
|
|
4d1749cc71 | ||
|
|
f7b620c6a2 | ||
|
|
76138f3080 | ||
|
|
36f8d6d259 | ||
|
|
909971f237 | ||
|
|
4e76e4ec9c | ||
|
|
87d90adaef | ||
|
|
8ed0d0400f | ||
|
|
cfd813772d | ||
|
|
2b484955aa | ||
|
|
a5853427d4 | ||
|
|
d0bd1ad25b | ||
|
|
d9dcc92300 | ||
|
|
d0c82c23bd | ||
|
|
6cdb86931e | ||
|
|
23d0241865 | ||
|
|
61c0a4cc61 | ||
|
|
b97d3b0716 | ||
|
|
25d126d4ff | ||
|
|
2b75e05ea7 | ||
|
|
1a997610c7 | ||
|
|
04ee55a40c | ||
|
|
1c72d75b62 | ||
|
|
9128dc961c | ||
|
|
28e3b7af18 | ||
|
|
12602a95ea | ||
|
|
11d012de4e | ||
|
|
45cdac6f36 | ||
|
|
2c4136f514 | ||
|
|
a14c7980f6 | ||
|
|
329740d2a7 | ||
|
|
8ffba6a279 | ||
|
|
5a02dc457c | ||
|
|
cf312e9690 | ||
|
|
20b36f910f | ||
|
|
0b3111c47f | ||
|
|
493d68a57a | ||
|
|
5092641157 | ||
|
|
2b134ea0f0 | ||
|
|
58ff08be4e | ||
|
|
682fd40fff | ||
|
|
cdcc63fdf6 | ||
|
|
c0052eb416 | ||
|
|
74e3e2e5e1 | ||
|
|
214470fb84 | ||
|
|
e76ea2a03c | ||
|
|
6c272adb0e | ||
|
|
51f7b7a5bf | ||
|
|
b81622222d | ||
|
|
e8a8b39c47 | ||
|
|
c78d30d47e | ||
|
|
ba6562a5db | ||
|
|
b28729baff | ||
|
|
adf9221bab | ||
|
|
d2157a3423 | ||
|
|
e07ed3de93 | ||
|
|
584539d0a3 | ||
|
|
322b328584 | ||
|
|
b38eeaebc9 | ||
|
|
66fa79741d | ||
|
|
09805ddc4a | ||
|
|
1130f6b9f0 | ||
|
|
38ff01e874 | ||
|
|
be23230938 | ||
|
|
7b93155b06 | ||
|
|
b7d41bc42c | ||
|
|
e17597a0a9 | ||
|
|
7a53e24f97 | ||
|
|
f05c7be394 | ||
|
|
2cf990bd92 | ||
|
|
21473548a5 | ||
|
|
626513a8b2 | ||
|
|
5871640701 | ||
|
|
f1b0421805 | ||
|
|
8cfb5ac5c6 | ||
|
|
ae1767b5d0 | ||
|
|
84d078a539 | ||
|
|
01b9d1a493 | ||
|
|
2a1de0202f | ||
|
|
4ea8967c2d | ||
|
|
a456cbb26c | ||
|
|
5b505b21c8 | ||
|
|
9116d74cf7 | ||
|
|
a136a0788c | ||
|
|
89ab6553d6 | ||
|
|
faa22cb637 | ||
|
|
d6ccf13167 | ||
|
|
f6cbce65fa | ||
|
|
f0ced98dc6 | ||
|
|
fcdb05238c | ||
|
|
8687226cc7 | ||
|
|
047f13ac5d | ||
|
|
b475a575e4 | ||
|
|
1a8eea5aa9 | ||
|
|
8cb6aed8fa | ||
|
|
926b1fadf2 | ||
|
|
2de8d8b73d | ||
|
|
440f754fec | ||
|
|
815a46bfbe | ||
|
|
182fddddd2 | ||
|
|
ce89fa74b9 | ||
|
|
7ce1289bb2 | ||
|
|
e4df02887b | ||
|
|
6bc7be7ba5 | ||
|
|
7aba8e3ec4 | ||
|
|
8d5ea5d005 | ||
|
|
ec0f45e20d | ||
|
|
0c8ad45976 | ||
|
|
e431ef09e5 | ||
|
|
03a7f6bbda | ||
|
|
a4705fa73a | ||
|
|
0a8d39cfe4 | ||
|
|
1d72436bfc | ||
|
|
598d23fc03 | ||
|
|
472a45ddec | ||
|
|
0863145c7f | ||
|
|
909323663e | ||
|
|
8212c8f6fc | ||
|
|
8df9bb6fb4 | ||
|
|
ff952fb221 | ||
|
|
9ead2635c5 | ||
|
|
4d50cad6ed | ||
|
|
120cbb0159 | ||
|
|
08ce024473 | ||
|
|
807c2f048d | ||
|
|
fafcdf7def | ||
|
|
92fab048d1 | ||
|
|
6884404957 | ||
|
|
88c917231d | ||
|
|
a054aff3c4 | ||
|
|
8fd809ac5e | ||
|
|
fff657cd5a | ||
|
|
4ef15e4dc8 | ||
|
|
c5f74cce80 | ||
|
|
35498c17d7 | ||
|
|
874e59b01a | ||
|
|
72f0e31b84 | ||
|
|
ba9a2956a8 | ||
|
|
3538eeda14 | ||
|
|
0c89534bfb | ||
|
|
47b15aacef | ||
|
|
3e0ab79977 | ||
|
|
344fa72357 | ||
|
|
617fc7659f | ||
|
|
0d91b6b74b | ||
|
|
335343642b | ||
|
|
bc7f5fb33a | ||
|
|
ca56fc709a | ||
|
|
a08ee68033 | ||
|
|
0d57cb0033 | ||
|
|
53804d39bb | ||
|
|
1e221cd9bb | ||
|
|
0c942f18c1 | ||
|
|
00d32f0a7d | ||
|
|
df3fef8bb1 | ||
|
|
5cc24c055b | ||
|
|
4064c32a7f | ||
|
|
6d7c5d51fe | ||
|
|
64c0059dd8 | ||
|
|
d0ece2e48d | ||
|
|
139f18b2e5 | ||
|
|
8eea0331bf | ||
|
|
62d6e02d6b | ||
|
|
a8601bb1fd | ||
|
|
fe452735be | ||
|
|
3b1128f8f3 | ||
|
|
0402323ef9 | ||
|
|
5bf85597ed | ||
|
|
e4b910fe87 | ||
|
|
24db573764 | ||
|
|
5befa533c6 | ||
|
|
15bc731f61 | ||
|
|
8fb4988fa1 | ||
|
|
ab378ed218 | ||
|
|
56bb053146 | ||
|
|
3c3cca8ec1 | ||
|
|
908586c93a | ||
|
|
2e83ce76ed | ||
|
|
2ab382eec5 | ||
|
|
2503978555 | ||
|
|
55886d6793 | ||
|
|
009c0ba31c | ||
|
|
ec53e1c74c | ||
|
|
7177fcfa61 | ||
|
|
fb56d5bc66 | ||
|
|
221805a63e | ||
|
|
da68968d75 | ||
|
|
ca795f729f | ||
|
|
ff4e6bd166 | ||
|
|
5ea30c8628 | ||
|
|
a54fcda781 | ||
|
|
7388fa3556 | ||
|
|
a966a4c8ac | ||
|
|
ebef48e472 | ||
|
|
26ca6b4a84 | ||
|
|
3da6f22479 | ||
|
|
d4789b7c9e | ||
|
|
5008526db1 | ||
|
|
009fc4f301 | ||
|
|
55f5ede970 | ||
|
|
5ddfde2214 | ||
|
|
9284e83270 | ||
|
|
a6b43b30e9 | ||
|
|
a311002141 | ||
|
|
505cb9cab8 | ||
|
|
d5c4a9d159 | ||
|
|
26ddd96e30 | ||
|
|
f0c83e168e | ||
|
|
885ea8a4d5 | ||
|
|
202a0a0e73 | ||
|
|
5bfd65b5fe | ||
|
|
7c74d2ca65 | ||
|
|
9adeed55fb | ||
|
|
12c7d83a91 | ||
|
|
dc1b7874ff | ||
|
|
c72a353733 | ||
|
|
35511cfdc1 | ||
|
|
099c446f38 | ||
|
|
705c352885 | ||
|
|
12d09e2274 | ||
|
|
b271fd32bd | ||
|
|
b3c2b78e8a | ||
|
|
97a89948c8 | ||
|
|
1e61fcb485 | ||
|
|
4cc9f2f67d | ||
|
|
52257467c3 | ||
|
|
4563749fd9 | ||
|
|
6d242ec348 | ||
|
|
d0e00162ed | ||
|
|
21f2e0b131 | ||
|
|
6ac8d41323 | ||
|
|
bb9e1ad857 | ||
|
|
98de88de90 | ||
|
|
c571aa68be | ||
|
|
091d860ae5 | ||
|
|
b5344b0aa7 | ||
|
|
17e0054941 | ||
|
|
1b5969a5ee | ||
|
|
3378287b0c | ||
|
|
077d692d6d | ||
|
|
5620fdc63e | ||
|
|
f7ca97d51f | ||
|
|
d400f92ee8 | ||
|
|
c1792653cc | ||
|
|
aebfb143e0 | ||
|
|
ef4ea06f5d | ||
|
|
85729f3df8 | ||
|
|
a2475ee501 | ||
|
|
71601aad39 | ||
|
|
c1c8b5e816 | ||
|
|
2296cdc222 | ||
|
|
070b41e694 | ||
|
|
d04626e75f | ||
|
|
68738e683a | ||
|
|
3f2c74f5e7 | ||
|
|
a58bbccfd3 | ||
|
|
b1e78fa3c4 | ||
|
|
0d3ff664b6 | ||
|
|
b0c0ad7c82 | ||
|
|
0ad613e6b4 | ||
|
|
75906f7591 | ||
|
|
c49d977379 | ||
|
|
6b9fa5e76f | ||
|
|
57a0cf0a33 | ||
|
|
f8ce67c69f | ||
|
|
d0295f089d | ||
|
|
f805b57778 | ||
|
|
3e79b9d26a | ||
|
|
c1639b7781 | ||
|
|
fca347e49e | ||
|
|
32623148dc | ||
|
|
68fbd9b017 | ||
|
|
11d67509e0 | ||
|
|
c96fc6e21a | ||
|
|
763d9b9cf7 | ||
|
|
bece1155ee | ||
|
|
cbe090cd3c | ||
|
|
c3a6a4520a | ||
|
|
67e427403f | ||
|
|
0d41d12267 | ||
|
|
efb7f151ec | ||
|
|
fe22a8d0af | ||
|
|
ed99158391 | ||
|
|
b0f7feefa8 | ||
|
|
fcd8e93e2e | ||
|
|
173c530fab | ||
|
|
0a87df48ab | ||
|
|
eef79e1443 | ||
|
|
91929aae1b | ||
|
|
3f13441a5d | ||
|
|
7b4f3e8261 | ||
|
|
d431efb7d4 | ||
|
|
4aa694f044 | ||
|
|
c3bd1881f5 | ||
|
|
a4aadf730c | ||
|
|
24ab082674 | ||
|
|
bceaa4a9a4 | ||
|
|
5386ed438e | ||
|
|
2ea95941e2 | ||
|
|
f632b5bc29 | ||
|
|
cea1e3d090 | ||
|
|
ce081a6e15 | ||
|
|
eb9538d6da | ||
|
|
e50eab2342 | ||
|
|
5517145ae3 | ||
|
|
e8e39dc5e3 | ||
|
|
b361cb00f2 | ||
|
|
3668aa21fe | ||
|
|
8881bba696 | ||
|
|
250bda2bf6 | ||
|
|
936e3424bb | ||
|
|
ab7b921641 | ||
|
|
c9d0dcecf3 | ||
|
|
86ef739c12 | ||
|
|
c14496d0c4 | ||
|
|
a208cbdf0b | ||
|
|
6a17be740b | ||
|
|
8e9a0eeef0 | ||
|
|
d746448d7d | ||
|
|
7daf1df22d | ||
|
|
78d43a5d66 | ||
|
|
939b5f2e29 | ||
|
|
0d18c296a9 | ||
|
|
98cce7eee4 | ||
|
|
e01c984c01 | ||
|
|
4522a285e0 | ||
|
|
a44c4d14e4 | ||
|
|
67fafb2b9d | ||
|
|
179abcc79d | ||
|
|
316c0b6168 | ||
|
|
ac27759250 | ||
|
|
c8c9f78829 | ||
|
|
61ac7c44ba | ||
|
|
43b2c36066 | ||
|
|
1a25f5a7f2 | ||
|
|
b9765b857d | ||
|
|
d0d2af4cab | ||
|
|
4b02d294ce | ||
|
|
d9b8bc0422 | ||
|
|
ace8fac2c1 | ||
|
|
ae95b159bc | ||
|
|
ff822743cc | ||
|
|
7897ebb2ed | ||
|
|
52f7ef4864 | ||
|
|
5879671971 | ||
|
|
2375d66f75 | ||
|
|
923c2728b3 | ||
|
|
4ba2579936 | ||
|
|
8274903985 | ||
|
|
03087e9d01 | ||
|
|
eafeaab014 | ||
|
|
c75315fda6 | ||
|
|
193435b554 | ||
|
|
d30d79b4e3 | ||
|
|
23155551d1 | ||
|
|
e6b018909d | ||
|
|
22228b58f1 | ||
|
|
35f2291edc | ||
|
|
c3f86456d6 | ||
|
|
585ea71d1a | ||
|
|
9929a05bfe | ||
|
|
f12199dcb5 | ||
|
|
bc7cf63958 | ||
|
|
db3b4505c1 | ||
|
|
943c644dc9 | ||
|
|
e0d538ad31 | ||
|
|
1849473469 | ||
|
|
084a68f6d1 | ||
|
|
6fefa3c7dd | ||
|
|
4629cda9ad | ||
|
|
3143f75a38 | ||
|
|
be716a3345 | ||
|
|
8de9f52151 | ||
|
|
0a11fc1221 | ||
|
|
ede576a2ae | ||
|
|
12cf69f7e1 | ||
|
|
2a4ccae113 | ||
|
|
77292050d4 | ||
|
|
e7ef142620 | ||
|
|
07d8476cf5 | ||
|
|
9b9e568446 | ||
|
|
8849f4b0a5 | ||
|
|
3c5346f60a | ||
|
|
8d547e9906 | ||
|
|
720bd87292 | ||
|
|
8306976b3e | ||
|
|
3bce8e9716 | ||
|
|
9c4f1d5795 | ||
|
|
93fa00b673 | ||
|
|
49a6332d37 | ||
|
|
5c5b9c95aa | ||
|
|
7abcc7acaa | ||
|
|
d0f127e575 | ||
|
|
73b35e72d8 | ||
|
|
00b50f9c65 | ||
|
|
46d0e88da3 | ||
|
|
1901f63b4c | ||
|
|
2662bd0ad8 | ||
|
|
27d70b6b51 | ||
|
|
011280b0bf | ||
|
|
4e4a05d3b9 | ||
|
|
4abd3866ab | ||
|
|
7cfdc5188c | ||
|
|
265d5c87e7 | ||
|
|
724d3b8894 | ||
|
|
8ec0ad96bd | ||
|
|
c22024b618 | ||
|
|
7a548e806d | ||
|
|
47962ea732 | ||
|
|
eb4c2e5d7f | ||
|
|
ca035a72bd | ||
|
|
deb653cbf3 | ||
|
|
a13bddde58 | ||
|
|
66330418cb | ||
|
|
151943bfbc | ||
|
|
35cbee5107 | ||
|
|
c6473d654d | ||
|
|
096814dc33 | ||
|
|
45b66b174c | ||
|
|
0ec091ffe1 | ||
|
|
f24e7652a8 | ||
|
|
9f58c27fcf | ||
|
|
d3463b596a | ||
|
|
66d5cc47a5 | ||
|
|
9694bacb69 | ||
|
|
fcba2baf42 | ||
|
|
629712142f | ||
|
|
cdecf93f00 | ||
|
|
fe402331f2 | ||
|
|
fcbbb36afc | ||
|
|
6ce38ffa0f | ||
|
|
09faaff849 | ||
|
|
06398a9ac6 | ||
|
|
bed08a7b07 | ||
|
|
2e69037c29 | ||
|
|
8f86244b4f | ||
|
|
0a5eecd0e3 | ||
|
|
0ab19d723d | ||
|
|
9128435113 | ||
|
|
1b26afdfbb | ||
|
|
7b517abdb6 | ||
|
|
2445d1896b | ||
|
|
72d1fe0cd7 | ||
|
|
b7e71f9f39 | ||
|
|
f41564b578 | ||
|
|
aa56c020ab | ||
|
|
ba6df87d10 | ||
|
|
5e7fbc4e42 | ||
|
|
f826e15603 | ||
|
|
b7dea5a9f7 | ||
|
|
ddd9f86031 | ||
|
|
1c13a79961 | ||
|
|
03436b729d | ||
|
|
d123664503 | ||
|
|
bdfead6265 | ||
|
|
77c8bcef6d | ||
|
|
2684f86594 | ||
|
|
10917123fd | ||
|
|
b06bed368b | ||
|
|
e13d4ffe60 | ||
|
|
2581a55214 | ||
|
|
aa4b89f751 | ||
|
|
838aaffc4b | ||
|
|
9dfd0e5b40 | ||
|
|
3357c050c4 | ||
|
|
60c5418516 | ||
|
|
48b4695ebe | ||
|
|
737b05d12b | ||
|
|
1d0546b3d1 | ||
|
|
a7a166a9cb | ||
|
|
74e1c08324 | ||
|
|
007de40ada | ||
|
|
e184eb3521 | ||
|
|
e421c15bdd | ||
|
|
469a088874 | ||
|
|
63dbee16cc | ||
|
|
5f3f21215a | ||
|
|
cdd7ed21ee | ||
|
|
255d12309a | ||
|
|
856d14aaa6 | ||
|
|
134cf38a84 | ||
|
|
1a56a5561c | ||
|
|
eb7fbe4b3a | ||
|
|
9d3215e806 | ||
|
|
9e855ac6cd | ||
|
|
a6fde3168b | ||
|
|
939a7bbe50 | ||
|
|
c6d18da2eb | ||
|
|
606f3dacbb | ||
|
|
aa73a7ad02 | ||
|
|
a4687be5e5 | ||
|
|
302f87e108 | ||
|
|
439fa731ba | ||
|
|
c6eb40daa8 | ||
|
|
f15cde0275 | ||
|
|
83427d5585 | ||
|
|
b11224a8b4 | ||
|
|
8b02cd47fb | ||
|
|
f052b90ec3 | ||
|
|
d3f278400e | ||
|
|
295d4f0394 | ||
|
|
8aad11b8d2 | ||
|
|
0a1dd64b94 | ||
|
|
f220b3f128 | ||
|
|
1c0e0fec4c | ||
|
|
5369aef971 | ||
|
|
9f569d4b1b | ||
|
|
c0a3285b8b | ||
|
|
a30e50ecc4 | ||
|
|
42962db263 | ||
|
|
c31c8b1a25 | ||
|
|
e05cecb481 | ||
|
|
604924231a | ||
|
|
ea91e09a1b | ||
|
|
0f1518e4c5 | ||
|
|
4cb1facb6a | ||
|
|
e640f413ab | ||
|
|
9f68f8d1a6 | ||
|
|
a2d5aca1d9 | ||
|
|
89e6de3652 | ||
|
|
fecbb60c36 | ||
|
|
26ebed0182 | ||
|
|
2c0f321456 | ||
|
|
8f91e9b079 | ||
|
|
2949bfaaa7 | ||
|
|
c0f1910493 | ||
|
|
c8997868ce | ||
|
|
02cf39c85b | ||
|
|
3eb2d45e8d | ||
|
|
4556eac780 | ||
|
|
c955aeebeb | ||
|
|
8bd67b2c17 | ||
|
|
4073dedff8 | ||
|
|
bc696f2e11 | ||
|
|
c28684a8b3 | ||
|
|
215b4d0b3f | ||
|
|
d9437a08f0 | ||
|
|
f81e7d30e2 | ||
|
|
09bee75cb3 | ||
|
|
9c4ab79bea | ||
|
|
f8dad1744c | ||
|
|
b98ac64ac2 | ||
|
|
88267e9d05 | ||
|
|
caf7d02637 | ||
|
|
aefe2b4196 | ||
|
|
fdf8211e9a | ||
|
|
73d1a2df3d | ||
|
|
0893d32665 | ||
|
|
c5ec470a00 | ||
|
|
28350d84f9 | ||
|
|
1055faf734 | ||
|
|
351a6e005e | ||
|
|
e5ebe6cebc | ||
|
|
0053aa2d2e | ||
|
|
dda9a2ee1c | ||
|
|
1ea820a50e | ||
|
|
c202c1325b | ||
|
|
49f027fae7 | ||
|
|
deec10efe7 | ||
|
|
826f4d313d | ||
|
|
685cf50268 | ||
|
|
e0ea5b0e0b | ||
|
|
201416ba52 | ||
|
|
9d846d7b87 | ||
|
|
a7e87eeadc | ||
|
|
b538495a29 | ||
|
|
8df53eac91 | ||
|
|
857e04e90b | ||
|
|
3f37cc461d | ||
|
|
823e1280d2 | ||
|
|
a9e1e7fc78 | ||
|
|
f27e06e619 | ||
|
|
c084547dca | ||
|
|
6959785cd1 | ||
|
|
26a257b794 | ||
|
|
2615906526 | ||
|
|
d96f474a5f | ||
|
|
d33e10b4ce | ||
|
|
e536f363f9 | ||
|
|
e10333bf2b | ||
|
|
9d0da0f45a | ||
|
|
7b8e82f321 | ||
|
|
5c047faa1d | ||
|
|
d075bf5882 | ||
|
|
8f636d9636 | ||
|
|
ce0e351d76 | ||
|
|
f170a579de | ||
|
|
83ee83142a | ||
|
|
865e3e7c9f | ||
|
|
2f28dec891 | ||
|
|
0dad9f8901 | ||
|
|
a8d9fe799b | ||
|
|
473d67354f | ||
|
|
5d7af0fae9 | ||
|
|
946779000f | ||
|
|
c3c3000a53 | ||
|
|
66daeda85f | ||
|
|
0fd0e76183 | ||
|
|
cf480375f6 | ||
|
|
736cd709d9 | ||
|
|
0f42219b4b | ||
|
|
b64f4b93eb | ||
|
|
32ffc1b54b | ||
|
|
608006ee77 | ||
|
|
3d78a67343 | ||
|
|
2f98f133bb | ||
|
|
fe0fbeab49 | ||
|
|
e3aacb183b | ||
|
|
49fa243b4f | ||
|
|
a2308b9c99 | ||
|
|
422c6bad5b | ||
|
|
834fd408bd | ||
|
|
db57d3830f | ||
|
|
b7e78028ce | ||
|
|
ca13045515 | ||
|
|
2e9f21e222 | ||
|
|
9f627fd0d3 | ||
|
|
509a115f68 | ||
|
|
69a696a8d6 | ||
|
|
830a51d9f5 | ||
|
|
3c247ac47d | ||
|
|
123a58bf7d | ||
|
|
f20d16f188 | ||
|
|
9399652dd0 | ||
|
|
f4514034b8 | ||
|
|
6bc8f2e50b | ||
|
|
fc1245c49d | ||
|
|
de1355e6bc | ||
|
|
37322fc100 | ||
|
|
4be7ca0c78 | ||
|
|
cb91c9231d | ||
|
|
f1d5e28f13 | ||
|
|
03b22594e8 | ||
|
|
a5413a5484 | ||
|
|
71120d9899 | ||
|
|
acb66c7dc0 | ||
|
|
2eba84dad5 | ||
|
|
fe89982d4e | ||
|
|
528b345f57 | ||
|
|
e3807a8937 | ||
|
|
da0ac4ff1e | ||
|
|
49a6a36f4c | ||
|
|
a77fadd114 | ||
|
|
15e1f62919 | ||
|
|
83c0d1ef44 | ||
|
|
97654b7585 | ||
|
|
0767de205e | ||
|
|
847cf9d038 | ||
|
|
0296aa240a | ||
|
|
d88b3456c4 | ||
|
|
789cf827f2 | ||
|
|
6c19c88e99 | ||
|
|
c1ed2b6068 | ||
|
|
790cfd7b5b | ||
|
|
dc5f5efcfe | ||
|
|
4eacc57522 | ||
|
|
0527626709 | ||
|
|
a2ead6af94 | ||
|
|
1e740a70f7 | ||
|
|
94a7d8e493 | ||
|
|
883655ce71 | ||
|
|
1d3651e255 | ||
|
|
fe490d144a | ||
|
|
40fe6666e3 | ||
|
|
2a2bc66841 | ||
|
|
6019260374 | ||
|
|
e5c5a1a101 | ||
|
|
c13b9d8798 | ||
|
|
03b10b6f73 | ||
|
|
67f4d8fab5 | ||
|
|
7e0073d6f5 | ||
|
|
c66dca399b | ||
|
|
9d085ad83a | ||
|
|
ad565e55f1 | ||
|
|
46c712e735 | ||
|
|
989d6f5af3 | ||
|
|
86865b91f8 | ||
|
|
b53480dd6a | ||
|
|
581ed52b24 | ||
|
|
472486acd6 | ||
|
|
92ec4bd22f | ||
|
|
959a0da0ed | ||
|
|
b23eaeca54 | ||
|
|
4f9271e9ff | ||
|
|
094553dbe7 | ||
|
|
60e4812b32 | ||
|
|
40625d1299 | ||
|
|
c9ec8b71e0 | ||
|
|
73e456495f | ||
|
|
54227ca9c7 | ||
|
|
f3b323536e | ||
|
|
6537f35176 | ||
|
|
b36d0ca3fc | ||
|
|
99809109ab | ||
|
|
1cdbfd6d60 | ||
|
|
4030e5ec24 | ||
|
|
4151e52802 | ||
|
|
b1e8145ffb | ||
|
|
c04d8ca5a7 | ||
|
|
e312c30822 | ||
|
|
40c30baffa | ||
|
|
bca7435a5a | ||
|
|
396bb28967 | ||
|
|
eb40275427 | ||
|
|
8519f546a6 | ||
|
|
e9b2ad9f5c | ||
|
|
39fba4f05d | ||
|
|
38c16d71b4 | ||
|
|
8fef6edb27 | ||
|
|
5cac900380 | ||
|
|
f49467bcb5 | ||
|
|
98a66f7fbe | ||
|
|
ce8d470860 | ||
|
|
dc475f4755 | ||
|
|
a7982bb0e1 | ||
|
|
ea05b5b606 | ||
|
|
996d49de67 | ||
|
|
74997a18a5 | ||
|
|
832fd49339 | ||
|
|
acb2f32304 | ||
|
|
32f39e10c9 | ||
|
|
190e683654 | ||
|
|
770f4c962c | ||
|
|
227921e0a0 | ||
|
|
39d0261d8a | ||
|
|
f267a532f6 | ||
|
|
e7ee4486a5 | ||
|
|
6a3cd83efc | ||
|
|
a7ec0c14f7 | ||
|
|
05bfe94d3e | ||
|
|
8d0aaa4ec1 | ||
|
|
4b5c4b7be5 | ||
|
|
18333973aa | ||
|
|
07a1baef13 | ||
|
|
15545b70d6 | ||
|
|
cfb8b3cf56 | ||
|
|
206732eb62 | ||
|
|
258cc4b50e | ||
|
|
d1f81783ef | ||
|
|
9bd2af48a3 | ||
|
|
d4df965f46 | ||
|
|
7dddd4734c | ||
|
|
c45daca5f2 | ||
|
|
067af26892 | ||
|
|
792f38334a | ||
|
|
dba40cd6bc | ||
|
|
4b19073b8b | ||
|
|
28eca9a026 | ||
|
|
3556051d14 | ||
|
|
e1d1f522ff | ||
|
|
04f3e58ab4 | ||
|
|
1f175031bd | ||
|
|
e1c61c5019 | ||
|
|
1c0de0093b | ||
|
|
9d8ab81e3a | ||
|
|
6e49a0ba6e | ||
|
|
fa55571503 | ||
|
|
feb04f0401 | ||
|
|
5c07b6dc1d | ||
|
|
e3b448b7ad | ||
|
|
57f199f899 | ||
|
|
b38bb64c81 | ||
|
|
1d63a30b7a | ||
|
|
c2dc243c7c | ||
|
|
25c3c1b431 | ||
|
|
156fbae7d3 | ||
|
|
a0ae7a227d | ||
|
|
9ef3e68479 | ||
|
|
435d248645 | ||
|
|
53db5090c1 | ||
|
|
caa062c8ba | ||
|
|
240bbc2944 | ||
|
|
a3861ed492 | ||
|
|
82c70302fd | ||
|
|
80d1f80b61 | ||
|
|
d3c6caf8a8 | ||
|
|
a707204f98 | ||
|
|
523a1388db | ||
|
|
970586b07b | ||
|
|
28ae6849b4 | ||
|
|
8e3a371688 | ||
|
|
2a219eff23 | ||
|
|
f81641ae96 | ||
|
|
4f0d3e6b32 | ||
|
|
77d1ac8b07 | ||
|
|
5d0ac02704 | ||
|
|
fc5d07bb13 | ||
|
|
395f23e1d3 | ||
|
|
dd85448451 | ||
|
|
6a7af22dea | ||
|
|
37bc17d3a2 | ||
|
|
ca131e5b2a | ||
|
|
c75795ceda | ||
|
|
7dc0591e3e | ||
|
|
cfa078c929 | ||
|
|
57ea73db46 | ||
|
|
7ad9e8a2fb | ||
|
|
1a57120b78 | ||
|
|
d267aeb621 | ||
|
|
a110b0badb | ||
|
|
242ae9eb91 | ||
|
|
53625e0dea | ||
|
|
aa4f73ffbf | ||
|
|
8c7b0cf670 | ||
|
|
05570ae4ad | ||
|
|
0cf94cff16 | ||
|
|
b5455ed882 | ||
|
|
8a4293a4cc | ||
|
|
f649b9f04f | ||
|
|
5caa04ef2b | ||
|
|
f2c49063f8 | ||
|
|
ea2351e902 | ||
|
|
8effb54c89 | ||
|
|
66c99acb9e | ||
|
|
2e5a326315 | ||
|
|
b5177c608d | ||
|
|
be7d5a2310 | ||
|
|
65444899af | ||
|
|
5230127fde | ||
|
|
405320d8ab | ||
|
|
2f2e193cf9 | ||
|
|
1fc206b9c5 | ||
|
|
44e1a477f2 | ||
|
|
e62302c979 | ||
|
|
51b0fe4596 | ||
|
|
7399aa0c5e | ||
|
|
aa4588f9ba | ||
|
|
4c2e2e0fa3 | ||
|
|
6dea8ddbce | ||
|
|
e6623a6ca8 | ||
|
|
020e485196 | ||
|
|
0c5f535689 | ||
|
|
ae9d0d894a | ||
|
|
14401c30b6 | ||
|
|
fbb93c72d0 | ||
|
|
280f31955a | ||
|
|
5fedcd1f4e | ||
|
|
adeee0bf5c | ||
|
|
84a2b726f5 | ||
|
|
407a60dcc4 | ||
|
|
d31507985b | ||
|
|
0174c9747b | ||
|
|
55b503da5b | ||
|
|
aff4ad0f97 | ||
|
|
50df3acd26 | ||
|
|
e53e1e31de | ||
|
|
70b09446b6 | ||
|
|
3a18d1df8c | ||
|
|
01883f92d9 | ||
|
|
1acdf58a4b | ||
|
|
8acd3d0a72 | ||
|
|
1d1cb867cd | ||
|
|
b46bfaebc1 | ||
|
|
a22c7c1539 | ||
|
|
ea51aa97b7 | ||
|
|
6a6959d041 | ||
|
|
462cede863 | ||
|
|
85c11bbd83 | ||
|
|
77e0564d13 | ||
|
|
85563e21db | ||
|
|
9352867cec | ||
|
|
93837c5b9e | ||
|
|
aaf5523378 | ||
|
|
8a22f83bc0 | ||
|
|
7550d53d02 | ||
|
|
821cd58825 | ||
|
|
526412a1ba | ||
|
|
fae2469dd7 | ||
|
|
27fd351fc2 | ||
|
|
ea5c9df095 | ||
|
|
5aa17bc42a | ||
|
|
7bbd9be389 | ||
|
|
dbf9a2b452 | ||
|
|
e4b8ea8905 | ||
|
|
fd8913f09b | ||
|
|
645383509b | ||
|
|
77a5f6ef81 | ||
|
|
2ec7259a69 | ||
|
|
b6f8c248de | ||
|
|
b16be577e3 | ||
|
|
590bbbce7f | ||
|
|
577b4593de | ||
|
|
44e5a63a2a | ||
|
|
19363add30 | ||
|
|
fd88ba65b2 | ||
|
|
ce4a5a38a3 | ||
|
|
05938d60f0 | ||
|
|
8b189abd58 | ||
|
|
7f788eaa06 | ||
|
|
9f204f72ef | ||
|
|
e02ac133eb | ||
|
|
c09aefd509 | ||
|
|
e0c81fd837 | ||
|
|
9a8c8012be | ||
|
|
f1e75b0fbb | ||
|
|
b4d724b5ae | ||
|
|
f7a1595ce5 | ||
|
|
378883df2b | ||
|
|
dafa2513e3 | ||
|
|
3b03d68ac7 | ||
|
|
5710f297f1 | ||
|
|
b57d64c72d | ||
|
|
3b76e0203a | ||
|
|
0d8fd45587 | ||
|
|
01b6e73f9b | ||
|
|
b0fb474aa2 | ||
|
|
0787713298 | ||
|
|
6221bc8f43 | ||
|
|
a6904dc5d5 | ||
|
|
3d5fb2491a | ||
|
|
24bdd10b4f | ||
|
|
7845d9b25f | ||
|
|
1f288175e4 | ||
|
|
f0a6c881bc | ||
|
|
9452cebc6a | ||
|
|
3c36bec298 | ||
|
|
425670f52a | ||
|
|
6a2651991a | ||
|
|
12657ebd7c | ||
|
|
d8dd5f00c1 | ||
|
|
1ec191db92 | ||
|
|
20c8abe8da | ||
|
|
086813fc3e | ||
|
|
606a73a547 | ||
|
|
f25e2a1922 | ||
|
|
740cc8b601 | ||
|
|
5ac4a3ba79 | ||
|
|
2e37b19e9f | ||
|
|
a8dd060e32 | ||
|
|
95edec5448 | ||
|
|
b0adce998b | ||
|
|
6fe1b9b37c | ||
|
|
44b042e3fc | ||
|
|
e5b49e25b9 | ||
|
|
b54a05d255 | ||
|
|
66b6f586f1 | ||
|
|
82819d5429 | ||
|
|
bc859c6139 | ||
|
|
e1fdc7773a | ||
|
|
5d5b7e0dd9 | ||
|
|
77890ad775 | ||
|
|
1a9b9f50d8 | ||
|
|
808f5c95e3 | ||
|
|
d11de6d021 | ||
|
|
88c7d95b08 | ||
|
|
2956eff051 | ||
|
|
b05566e96f | ||
|
|
446acbdf82 | ||
|
|
f2076c9572 | ||
|
|
d71e6698f4 | ||
|
|
9b26225fdd | ||
|
|
f8c5ca942a | ||
|
|
47fefbec07 | ||
|
|
45917f8014 | ||
|
|
dd3e7397a4 | ||
|
|
7518174374 | ||
|
|
02a009b7a7 | ||
|
|
16353ce63c | ||
|
|
7a4b202064 | ||
|
|
a97ebc6d4c | ||
|
|
9e765b1704 | ||
|
|
ec9443edb8 | ||
|
|
dcb2c4722c | ||
|
|
b0c0adf6e7 | ||
|
|
17898a4c57 | ||
|
|
edbf562803 | ||
|
|
5d772d7055 | ||
|
|
8cbd2f5c2d | ||
|
|
89e720cb77 | ||
|
|
2583823e5f | ||
|
|
33890e6b97 | ||
|
|
a2b0da2608 | ||
|
|
2bcbcd3458 | ||
|
|
8efde811e9 | ||
|
|
4e1ee270cf | ||
|
|
7a3c725f51 | ||
|
|
fe2c682dc3 | ||
|
|
adb25fd7d7 | ||
|
|
bfea77baa5 | ||
|
|
3ff22bea56 | ||
|
|
ca11b9a2f5 | ||
|
|
1048d3909b | ||
|
|
4ecbfc4e5e | ||
|
|
213bd1555a | ||
|
|
14a7a33cc2 | ||
|
|
ba8f324b12 | ||
|
|
929c0648d0 | ||
|
|
21fe5902a8 | ||
|
|
b2caaa6733 | ||
|
|
15722c1871 | ||
|
|
1d18948307 | ||
|
|
8c7f6c62b0 | ||
|
|
2dc07ca30d | ||
|
|
bb8b012397 | ||
|
|
62494f295e | ||
|
|
9872a46583 | ||
|
|
4846557d61 | ||
|
|
79a40e22c9 | ||
|
|
dead5b42be | ||
|
|
bcc34f6099 | ||
|
|
6a451e0c0e | ||
|
|
5c95927a43 | ||
|
|
3fa4ceadb0 | ||
|
|
f93cd17fee | ||
|
|
5f5081f719 | ||
|
|
180d3d0029 | ||
|
|
4e2863e4ec | ||
|
|
b46e52eccc | ||
|
|
f3a41df395 | ||
|
|
afd82fd9d3 | ||
|
|
fbd12e1887 | ||
|
|
4f0d82ac16 | ||
|
|
88b8cf3360 | ||
|
|
a8db07e0a8 | ||
|
|
c79c29e769 | ||
|
|
e1e09bff9b | ||
|
|
07aa036fe8 | ||
|
|
8d27b62114 | ||
|
|
62b45494b6 | ||
|
|
de986ec392 | ||
|
|
4b415caad2 | ||
|
|
bfede60f3d | ||
|
|
03b8759597 | ||
|
|
bdd623f82c | ||
|
|
3c8083ed7f | ||
|
|
5904f1f8ee | ||
|
|
cc848a3f01 | ||
|
|
1aaa101fb5 | ||
|
|
0319450643 | ||
|
|
099774d667 | ||
|
|
e09ad6915f | ||
|
|
a2a6b754be | ||
|
|
d392982fe7 | ||
|
|
8cb7eb0382 | ||
|
|
48dcd2d2b9 | ||
|
|
6ccaa0d9bd | ||
|
|
b1761f7856 | ||
|
|
1bc38f66ae | ||
|
|
b4433a8471 | ||
|
|
053f49c76a | ||
|
|
fbde6187ea | ||
|
|
5eb5c4bac5 | ||
|
|
fb4283ed53 | ||
|
|
bbd65988f9 | ||
|
|
a11fa44170 | ||
|
|
99a542e4e4 | ||
|
|
a6f2d5b414 | ||
|
|
7f779e3942 | ||
|
|
7306d56902 | ||
|
|
b8f1585976 | ||
|
|
a2a83a4a4c | ||
|
|
9f7313e492 | ||
|
|
f6fbf66c8c | ||
|
|
3deedfd177 | ||
|
|
e9d5ff095c | ||
|
|
43d6bfa15f | ||
|
|
875e09013c | ||
|
|
ee854eff2c | ||
|
|
b176e0fafd | ||
|
|
fb24a4d420 | ||
|
|
391c42300e | ||
|
|
2a8fa01a57 | ||
|
|
bd4b496d14 | ||
|
|
cf5c24ee2d | ||
|
|
66f4aac0e8 | ||
|
|
267caa348e | ||
|
|
7bf09a3085 | ||
|
|
a0de0696c5 | ||
|
|
a63383dc08 | ||
|
|
0ad19081ac | ||
|
|
aa6b2b8407 | ||
|
|
3e6726ff97 | ||
|
|
bb30f64252 | ||
|
|
c4dd76a748 | ||
|
|
56a248e601 | ||
|
|
0f65cf23a5 | ||
|
|
fd3f718a0a | ||
|
|
93d28e6a72 | ||
|
|
60ec3fde9d | ||
|
|
1cfb8aea23 | ||
|
|
846acf7e9d | ||
|
|
fb9279cc74 | ||
|
|
d2aa9b8e79 | ||
|
|
eaeb52de20 | ||
|
|
fdbf41e9fd | ||
|
|
092346c819 | ||
|
|
5a5f51fe48 | ||
|
|
800df1ebbe | ||
|
|
8eec67e73a | ||
|
|
33b420652d | ||
|
|
42b679d9a3 | ||
|
|
ae4f17264f | ||
|
|
c7d8083ac6 | ||
|
|
95fec1a87c | ||
|
|
657a7aef42 | ||
|
|
ea0d232169 | ||
|
|
7467347af1 | ||
|
|
0ebc2e4ac0 | ||
|
|
ccb9f7bfe2 | ||
|
|
766b5dff24 | ||
|
|
68e0329c1b | ||
|
|
fd99994fdb | ||
|
|
f21a63382c | ||
|
|
6f0581598b | ||
|
|
244e85e836 | ||
|
|
1df6713ad5 | ||
|
|
c6893731ad | ||
|
|
2ffbced47e | ||
|
|
bfce177a07 | ||
|
|
8ca182571c | ||
|
|
801dd384d8 | ||
|
|
adc96702db | ||
|
|
af73ce75ce | ||
|
|
f08968da49 | ||
|
|
18e0bd8937 | ||
|
|
24344ccfaf | ||
|
|
91f045a2e4 | ||
|
|
050dfb279d | ||
|
|
f9b7f18be6 | ||
|
|
a7380ba353 | ||
|
|
b8feba1070 | ||
|
|
64575fec42 | ||
|
|
c7d9bf839e | ||
|
|
0d15ac15ae | ||
|
|
b013a60b12 | ||
|
|
8480c0da53 | ||
|
|
5e88313276 | ||
|
|
09d7d38b04 | ||
|
|
4cc29729f9 | ||
|
|
d787c353f3 | ||
|
|
553fe0fe97 | ||
|
|
aeeb49a6a7 | ||
|
|
b25faec159 | ||
|
|
c2b1556d68 | ||
|
|
81acf57518 | ||
|
|
abbc44a7d1 | ||
|
|
74c259af2e | ||
|
|
465304588e | ||
|
|
70ad705380 | ||
|
|
4e6b60b0f4 | ||
|
|
d849a49842 | ||
|
|
4c7c40a09d | ||
|
|
521d6941fa | ||
|
|
e223c88548 | ||
|
|
52e9369af4 | ||
|
|
bdb3838d71 | ||
|
|
0a921d37f8 | ||
|
|
896d58fc3f | ||
|
|
c770b13903 | ||
|
|
6cdeb0ed95 | ||
|
|
99f7cfcbd3 | ||
|
|
d402b6c3e5 | ||
|
|
738368a6a1 | ||
|
|
3dbf94146a | ||
|
|
7a65930361 | ||
|
|
6068b1a275 | ||
|
|
4c677e7fe6 | ||
|
|
c668b990e1 | ||
|
|
a9d3d38a41 | ||
|
|
f04c321aab | ||
|
|
ed785098a6 | ||
|
|
9198d6924e | ||
|
|
4ab6aca2ec | ||
|
|
3262805938 | ||
|
|
04d9889127 | ||
|
|
a3b9bdaff1 | ||
|
|
6f83fca216 | ||
|
|
9f52cdeee9 | ||
|
|
26071903c1 | ||
|
|
8a5ee6f8ea | ||
|
|
0ec8476b4d | ||
|
|
807d849657 | ||
|
|
6892b79366 | ||
|
|
88d61db384 | ||
|
|
ee4e68b082 | ||
|
|
63ad93afd0 | ||
|
|
60e03eb841 | ||
|
|
b2ac81a78f | ||
|
|
edc1b52f65 | ||
|
|
aa9d034b5d | ||
|
|
4889c8ff9b | ||
|
|
d2ab41abfb | ||
|
|
56ddf79ae7 | ||
|
|
36d4f0d259 | ||
|
|
5f3528cf74 | ||
|
|
47f1febfc9 | ||
|
|
93154abb31 | ||
|
|
778e5bed3c | ||
|
|
ef1fa55902 | ||
|
|
963991e246 | ||
|
|
3e4cd59fc0 | ||
|
|
874247c7ab | ||
|
|
b7b04045de | ||
|
|
a84dbbf482 | ||
|
|
f54774f6a1 | ||
|
|
a359d88897 | ||
|
|
458251683c | ||
|
|
eeb3434349 | ||
|
|
d183a9e7b5 | ||
|
|
86cef1c502 | ||
|
|
b8d8cb33ff | ||
|
|
0615d368f2 | ||
|
|
30ee232654 | ||
|
|
a4690ec5ce | ||
|
|
2621f17cde | ||
|
|
15b2a7eab0 | ||
|
|
d0597cd289 | ||
|
|
fe85dc1186 | ||
|
|
51baaab74b | ||
|
|
35fc0d6847 | ||
|
|
ffc6eec483 | ||
|
|
17ec9aa170 | ||
|
|
6fdd35785e | ||
|
|
fb34507def | ||
|
|
8996c530c9 | ||
|
|
b0724dfd14 | ||
|
|
a17060c060 | ||
|
|
f8e10f66e1 | ||
|
|
5049c6c0a1 | ||
|
|
60b70b6c7b | ||
|
|
5266fc67c9 | ||
|
|
0798533201 | ||
|
|
56dcadb69b | ||
|
|
a1216fc1b7 | ||
|
|
353195850f | ||
|
|
b8dd379cef | ||
|
|
be2417d808 | ||
|
|
d4b263dd0c | ||
|
|
37aaf6f4ab | ||
|
|
51fb0b59ec | ||
|
|
a0545568cd | ||
|
|
84208d5429 | ||
|
|
7264a4ffb6 | ||
|
|
e8ee6f1bc5 | ||
|
|
a742d897d7 | ||
|
|
0903362334 | ||
|
|
f8fdca4968 | ||
|
|
0601619f50 | ||
|
|
1a1f6aff7b | ||
|
|
5962e7c942 | ||
|
|
57d35181f0 | ||
|
|
73065fa6e7 | ||
|
|
a8ca536d44 | ||
|
|
062c65fd67 | ||
|
|
f533530693 | ||
|
|
355910e182 | ||
|
|
e67d4fb2e5 | ||
|
|
050f2478d3 | ||
|
|
9c6dbd7337 | ||
|
|
9e258dd31e | ||
|
|
8f5e73a598 | ||
|
|
480db83f39 | ||
|
|
cc0f0c4843 | ||
|
|
2ce0ff505a | ||
|
|
a4d8b92cb1 | ||
|
|
143a158e4a | ||
|
|
4213454234 | ||
|
|
559beffd24 | ||
|
|
5f4bac6076 | ||
|
|
8ff3d2cbf6 | ||
|
|
273a9793db | ||
|
|
5a911aa5a1 | ||
|
|
3078e366e2 | ||
|
|
22b8a45a71 | ||
|
|
4756353fbd | ||
|
|
3e8799b5c7 | ||
|
|
a3d9e633c1 | ||
|
|
6e66f8d68a | ||
|
|
03ac2721bc | ||
|
|
456621695a | ||
|
|
9a9660a765 | ||
|
|
6568653d13 | ||
|
|
5248fc7c7c | ||
|
|
6a8f256a56 | ||
|
|
46bedc6156 | ||
|
|
63c3f423c2 | ||
|
|
3d2a738f44 | ||
|
|
f0f1ef2ef2 | ||
|
|
c359ac5737 | ||
|
|
a4936ad0dd | ||
|
|
a02ded6b01 | ||
|
|
2d2bb3ec0c | ||
|
|
eb6e95ae9b | ||
|
|
f56a0aebdb | ||
|
|
c54f2e3e40 | ||
|
|
ade844f7a7 | ||
|
|
2929621651 | ||
|
|
de770faf6a | ||
|
|
99394de14e | ||
|
|
305d330391 | ||
|
|
9c41984f6d | ||
|
|
aa858fea03 | ||
|
|
6e5d527fec | ||
|
|
b11d3dde46 | ||
|
|
3df8ccb92f | ||
|
|
0b95cab47b | ||
|
|
a6511632ad | ||
|
|
cb0dbc0769 | ||
|
|
47d60dbb20 | ||
|
|
f8326ef6df | ||
|
|
434e656e27 | ||
|
|
8bd1fad7d0 | ||
|
|
7f65e009a8 | ||
|
|
11e5e1c490 | ||
|
|
9c079ead4c | ||
|
|
c562af3a13 | ||
|
|
30e14db881 | ||
|
|
dab30f50d3 | ||
|
|
3d6a583ce4 | ||
|
|
44fd0ebb2d | ||
|
|
0d289d660d | ||
|
|
3e75da4307 | ||
|
|
19eb4c510c | ||
|
|
dd4dafa7be | ||
|
|
116c395948 | ||
|
|
ab504439fb | ||
|
|
463c636301 | ||
|
|
950a09895b | ||
|
|
c62a9f1b3f | ||
|
|
3f7f3f88f3 | ||
|
|
4fc19742ec | ||
|
|
9d054fb345 | ||
|
|
a25a27f31f | ||
|
|
15b55f5e62 | ||
|
|
dccda62f2d | ||
|
|
ef432754ee | ||
|
|
f18c3be745 | ||
|
|
0516aecb03 | ||
|
|
605be30fb2 | ||
|
|
86cd044a68 | ||
|
|
068a0e2257 | ||
|
|
3a2fc43542 | ||
|
|
7fc60cd667 | ||
|
|
c90baaa807 | ||
|
|
ea9492d4bd | ||
|
|
025f77dcdc | ||
|
|
eb19b1a39e | ||
|
|
25748efd54 | ||
|
|
2215a095c8 | ||
|
|
a32d185ff0 | ||
|
|
ea32853ab3 | ||
|
|
a6c41e0be5 | ||
|
|
f223f9b9c1 | ||
|
|
bcc7daeac7 | ||
|
|
890ba3ea94 | ||
|
|
cab3c50ae6 | ||
|
|
86b6b9bf8b | ||
|
|
71551893b1 | ||
|
|
0431b296c4 | ||
|
|
376eae748c | ||
|
|
f2a45c5892 | ||
|
|
88b176ae15 | ||
|
|
f1744ef4db | ||
|
|
892ff0c1ca | ||
|
|
647163e2b2 | ||
|
|
8e043b00b8 | ||
|
|
154b9e1faf | ||
|
|
30ef4b208c | ||
|
|
6276f5f7b9 | ||
|
|
118ec358c0 | ||
|
|
3da9af5a9f | ||
|
|
ddced4fc2b | ||
|
|
7a41b02fdd | ||
|
|
6c3c6fba62 | ||
|
|
2bb9464905 | ||
|
|
821924f57f | ||
|
|
74f14c5535 | ||
|
|
80c8c4c4b2 | ||
|
|
d219c3ea88 | ||
|
|
954ba91c86 | ||
|
|
7effb7e8d4 | ||
|
|
3fdb655a92 | ||
|
|
cf770bf40c | ||
|
|
9f50ced6fc | ||
|
|
4dd97eab0c | ||
|
|
5de242fe53 | ||
|
|
251ba08e09 | ||
|
|
653770ede9 | ||
|
|
70ef6a69ee | ||
|
|
5a6c928a7c | ||
|
|
bd9ef9951b | ||
|
|
c067549f21 | ||
|
|
94ca3abefc | ||
|
|
86d5b48007 | ||
|
|
2b7e8c4b9f | ||
|
|
f888d50a15 | ||
|
|
dfcd2c247d | ||
|
|
1c54d7ed55 | ||
|
|
7cb618df5e | ||
|
|
6778d1398f | ||
|
|
1dd3e9dab1 | ||
|
|
99f6b3a3bd | ||
|
|
b626387b38 | ||
|
|
dd554ee7b5 | ||
|
|
fe28e5befe | ||
|
|
21856c6f0c | ||
|
|
b745401817 | ||
|
|
625a09785a | ||
|
|
1a5aaf54dd | ||
|
|
ce9f7a8ddc | ||
|
|
9747cae773 | ||
|
|
948286aa32 | ||
|
|
8da660f5da | ||
|
|
b884341d73 | ||
|
|
c9afe96324 | ||
|
|
d529ebc172 | ||
|
|
d25dd52ec9 | ||
|
|
97a5f3ea0e | ||
|
|
2eeffce924 | ||
|
|
438b01815a | ||
|
|
8b3ec625f6 | ||
|
|
50cbfb9360 | ||
|
|
90f7122fde | ||
|
|
e89343e100 | ||
|
|
3bb3b85fa2 | ||
|
|
f9dba8a75c | ||
|
|
1a97a1c9d2 | ||
|
|
893e327ac6 | ||
|
|
814c50f461 | ||
|
|
1958c0b118 | ||
|
|
a11b33d214 | ||
|
|
7d053f8ba4 | ||
|
|
1e1aba73ef | ||
|
|
b9b009c0b5 | ||
|
|
a6ff6505c6 | ||
|
|
823257ca72 | ||
|
|
0804c1acbd | ||
|
|
28facca291 | ||
|
|
a7ca49c44d | ||
|
|
5639fc9791 | ||
|
|
8b00513175 | ||
|
|
00ffa358b2 | ||
|
|
1ff7e1149c | ||
|
|
2c7bad9fff | ||
|
|
c4f481d705 | ||
|
|
99a3a216c3 | ||
|
|
87f5dd05f5 | ||
|
|
cc87d99017 | ||
|
|
1366730a3f | ||
|
|
ab07f721cf | ||
|
|
3c83a18291 | ||
|
|
8bbb3031e5 | ||
|
|
473dafc2c8 | ||
|
|
38d5a8fdc0 | ||
|
|
b114b9d396 | ||
|
|
f9cd89a4a4 | ||
|
|
7ba9675f02 | ||
|
|
d0e7b052a8 | ||
|
|
4313a717c4 | ||
|
|
cbace6f831 | ||
|
|
edabc8eee9 | ||
|
|
9b47e57e8e | ||
|
|
2f32488c25 | ||
|
|
62d497dd0b | ||
|
|
e19feb92ea | ||
|
|
fbde6282b2 | ||
|
|
7895ccfae1 | ||
|
|
c24fb8df84 | ||
|
|
53b5fed8ae | ||
|
|
dfffd1ea94 | ||
|
|
ffa34c6133 | ||
|
|
8e8c9822ea | ||
|
|
205adeb2e9 | ||
|
|
3d616baf75 | ||
|
|
6cb5173e27 | ||
|
|
dfd4a712c9 | ||
|
|
b97339017b | ||
|
|
1b862045e3 | ||
|
|
244c07e5f7 | ||
|
|
eb41bc66a4 | ||
|
|
01c5d9e909 | ||
|
|
a8c57313d3 | ||
|
|
5f5e4ce1a1 | ||
|
|
d50acb39dd | ||
|
|
25c8007b66 | ||
|
|
d4db04c649 | ||
|
|
250f310a98 | ||
|
|
ee4a3bcb02 | ||
|
|
d4d355dce6 | ||
|
|
346b00e215 | ||
|
|
ceeac9bae3 | ||
|
|
49446ffb74 | ||
|
|
5487ab40af | ||
|
|
5a8ba159f2 | ||
|
|
cb93303f56 | ||
|
|
088903218d | ||
|
|
73927d2d56 | ||
|
|
f9a74b68c1 | ||
|
|
22e5834d8b | ||
|
|
2a2026a2cc | ||
|
|
63b71d43da | ||
|
|
560c8d6f01 | ||
|
|
4c5603e6ff | ||
|
|
99f0e7b939 | ||
|
|
7b5c1964b9 | ||
|
|
b7a5afa797 | ||
|
|
66f90f46de | ||
|
|
4d2ac1ca53 | ||
|
|
05a21369ae | ||
|
|
9b404facab | ||
|
|
f31d6c55be | ||
|
|
37c2c4b4a2 | ||
|
|
d5dcb77d99 | ||
|
|
2b93510c45 | ||
|
|
9717c6f825 | ||
|
|
92c227d103 | ||
|
|
1491222642 | ||
|
|
39fceeb455 | ||
|
|
3562b5552b | ||
|
|
6d778f686d | ||
|
|
245a97176a | ||
|
|
ca56871aaa | ||
|
|
bd4086cb50 | ||
|
|
d8c9b1af27 | ||
|
|
19d2850b29 | ||
|
|
2c730b08e4 | ||
|
|
e1bca52d57 | ||
|
|
06245f6422 | ||
|
|
f057a2c016 | ||
|
|
f4636537ad | ||
|
|
a026ec45b8 | ||
|
|
695a07daf4 | ||
|
|
c2d0e8fd95 | ||
|
|
1be5cf8184 | ||
|
|
f4aec1e7d0 | ||
|
|
e4c06700bb | ||
|
|
46b3512c45 | ||
|
|
017a5011ec | ||
|
|
f4bbdf30e8 | ||
|
|
7d41a9ccdb | ||
|
|
074d0349a1 | ||
|
|
6ab56c3978 | ||
|
|
5303d2c16d | ||
|
|
30da4594cd | ||
|
|
92567137a5 | ||
|
|
7b6c104768 | ||
|
|
d27d347d21 | ||
|
|
16b4ffa3fa | ||
|
|
8b75969d1d | ||
|
|
a5e1088f1f | ||
|
|
92a450e59c | ||
|
|
2f3c39295c | ||
|
|
000fde25c6 | ||
|
|
cd3924520d | ||
|
|
c7778db7f2 | ||
|
|
2580b026fe | ||
|
|
eb86053a53 | ||
|
|
fd4c5031c7 | ||
|
|
655e48823a | ||
|
|
a108807534 | ||
|
|
dbe0e9506d | ||
|
|
75b4ba2c3a | ||
|
|
de7207de55 | ||
|
|
bf2f314cd4 | ||
|
|
6034265dfd | ||
|
|
48fe5470d2 | ||
|
|
2b2de8f8a5 | ||
|
|
dd58e78fde | ||
|
|
2ec7ac1ea3 | ||
|
|
f342a37362 | ||
|
|
a411e32a9f | ||
|
|
1877afc760 | ||
|
|
6f055792df | ||
|
|
4536754b20 | ||
|
|
351736cc6d | ||
|
|
4723ddb5ce | ||
|
|
20670c546d | ||
|
|
cdff29c7d5 | ||
|
|
c11abbe8ca | ||
|
|
f0505477b8 | ||
|
|
c484b27a35 | ||
|
|
04c1945abc | ||
|
|
ad4d23fa20 | ||
|
|
a46b43bff6 | ||
|
|
b1c160f9d4 | ||
|
|
533520ec1f | ||
|
|
4acd842237 | ||
|
|
778d56ac12 | ||
|
|
1a2c9e3bba | ||
|
|
067c788df7 | ||
|
|
78c90ba24b | ||
|
|
573af6a236 | ||
|
|
b29944d5d7 | ||
|
|
dfa26cc5e2 | ||
|
|
8c5d544734 | ||
|
|
df0686a1bd | ||
|
|
3e818cde69 | ||
|
|
43a569d18a | ||
|
|
e710ccb0e6 | ||
|
|
ea6815b9bb | ||
|
|
3b06251720 | ||
|
|
bfa07aec39 | ||
|
|
05c19af2a3 | ||
|
|
b22fd2bc44 | ||
|
|
ac3e899f5e | ||
|
|
3d5f85c0ca | ||
|
|
0ddd71fc36 | ||
|
|
6fa54bed73 | ||
|
|
6e8e6809f3 | ||
|
|
8230ea1c83 | ||
|
|
a91a79681f | ||
|
|
c1127148e2 | ||
|
|
ef867e789d | ||
|
|
cd655d289b | ||
|
|
f1d1e8b537 | ||
|
|
71b674d11a | ||
|
|
4f9b666eee | ||
|
|
8d79353d9b | ||
|
|
f3fffc6161 | ||
|
|
a8d20e13a8 | ||
|
|
9a91bdbdb2 | ||
|
|
6f8591f769 | ||
|
|
7f6d79362e | ||
|
|
c032413201 | ||
|
|
e556c78599 | ||
|
|
1b389d662b | ||
|
|
090efde21a | ||
|
|
74c03e3295 | ||
|
|
858be6d216 | ||
|
|
1e160fd9e9 | ||
|
|
4884f3ac77 | ||
|
|
0e5dff212e | ||
|
|
e0085ec819 | ||
|
|
07bfd7c8e5 | ||
|
|
c8cccc30d1 | ||
|
|
7c6d2a6281 | ||
|
|
fdf168934e | ||
|
|
738a20ad34 | ||
|
|
3602d5a84c | ||
|
|
d23ca041cf | ||
|
|
110387e81b | ||
|
|
498f132cad | ||
|
|
dff3165402 | ||
|
|
3f5f75c71f | ||
|
|
2e1887eb0e | ||
|
|
2170eedf08 | ||
|
|
a208cd156d | ||
|
|
3acc8ca3ab | ||
|
|
fc76c8eb0f | ||
|
|
681e20133a | ||
|
|
7d1ee2e94e | ||
|
|
3cea92384c | ||
|
|
6ba3d611af | ||
|
|
f6345b9a5d | ||
|
|
044f7395bb | ||
|
|
8bda6be65a | ||
|
|
e544705256 | ||
|
|
f88099eb3b | ||
|
|
5f40be4bd5 | ||
|
|
1bf04f2e30 | ||
|
|
7edad4eba9 | ||
|
|
dd7249d2ef | ||
|
|
aab84ba6f3 | ||
|
|
520af82f05 | ||
|
|
9292534324 | ||
|
|
61efe6102e | ||
|
|
705f82e416 | ||
|
|
e06dece00c | ||
|
|
3b9c0e4c67 | ||
|
|
5b753923b6 | ||
|
|
0b95016e00 | ||
|
|
0022a5a6e2 | ||
|
|
332487efcd | ||
|
|
28331dfd53 | ||
|
|
d112b6027a | ||
|
|
88933a3120 | ||
|
|
e05871b467 | ||
|
|
7e70bfaacc | ||
|
|
f4b85751bb | ||
|
|
ea11e70e3f | ||
|
|
bd8b239e15 | ||
|
|
d9c8c0cbc1 | ||
|
|
7a8fc8dfd5 | ||
|
|
4334f1bc65 | ||
|
|
1995091169 | ||
|
|
ef089d3722 | ||
|
|
1d904b1722 | ||
|
|
ab02f26a0e | ||
|
|
f35b4bf768 | ||
|
|
f2382dd255 | ||
|
|
8df169b170 | ||
|
|
88aeaaffb0 | ||
|
|
e9546b810c | ||
|
|
c208d8fc2e | ||
|
|
8a1d7fdb37 | ||
|
|
c52d077f92 | ||
|
|
7294f43fa3 | ||
|
|
0572c66c17 | ||
|
|
6406e213bd | ||
|
|
cfb56f7cfe | ||
|
|
bd65e782bb | ||
|
|
37811d3f7e | ||
|
|
3bb1cbcdb0 | ||
|
|
5fcd673f9f | ||
|
|
b4d7f9ea43 | ||
|
|
66d9d9d9cb | ||
|
|
b9f4a9e57b | ||
|
|
80b3a5ffc4 | ||
|
|
0c142f2078 | ||
|
|
7295c3554e | ||
|
|
78725b8483 | ||
|
|
e97ad3f066 | ||
|
|
3a62e9a322 | ||
|
|
4d18d9661b | ||
|
|
11976f8968 | ||
|
|
5991bd368c | ||
|
|
b381bdec27 | ||
|
|
231a5aa9fd | ||
|
|
6f5c35c278 | ||
|
|
3e6033e9ff | ||
|
|
32f63a18ff | ||
|
|
00aaf500de | ||
|
|
f2471aedb2 | ||
|
|
beff774295 | ||
|
|
679aa0f764 | ||
|
|
8683efe54a | ||
|
|
f78c228c75 | ||
|
|
8dfef83f1a | ||
|
|
d707844c30 | ||
|
|
6a8c935380 | ||
|
|
00c4d3dd92 | ||
|
|
3ffea43253 | ||
|
|
8e548605c8 | ||
|
|
de52f21905 | ||
|
|
b9d11aa4ca | ||
|
|
77c387a559 | ||
|
|
ac1e4b8e8f | ||
|
|
36101f50c3 | ||
|
|
08dad7f7af | ||
|
|
298152bc50 | ||
|
|
993e94c00c | ||
|
|
fba6d28603 | ||
|
|
bb6fb81fc0 | ||
|
|
4c3a7b84c1 | ||
|
|
8961a54a03 | ||
|
|
2184a9402f | ||
|
|
b9f1d14d4e | ||
|
|
fba154386e | ||
|
|
c8366eff8f | ||
|
|
161d9ed512 | ||
|
|
fadc9521f0 | ||
|
|
40cb47868f | ||
|
|
0a06d92c2e | ||
|
|
fc2bb724fa | ||
|
|
e521508de9 | ||
|
|
bd573fd5cf | ||
|
|
9d055ff4fd | ||
|
|
9d69f14faa | ||
|
|
8e3ea6c878 | ||
|
|
971f3cd63c | ||
|
|
a9d7a7e306 | ||
|
|
8797298a71 | ||
|
|
3bc182e453 | ||
|
|
7a0ab3aa15 | ||
|
|
fdbef8ee71 | ||
|
|
d95b127378 | ||
|
|
008138cd02 | ||
|
|
2a1630e068 | ||
|
|
31611203eb | ||
|
|
1ee6d16d78 | ||
|
|
0e8c3a8efe | ||
|
|
d084d19675 | ||
|
|
77954a3796 | ||
|
|
8152dc4b04 | ||
|
|
109b233e14 | ||
|
|
cc3b26998b | ||
|
|
95dea1faaa | ||
|
|
57fecdbf17 | ||
|
|
3b4bcc881f | ||
|
|
dfa4dfa4a4 | ||
|
|
8d86e97247 | ||
|
|
5da9d6b46b | ||
|
|
100809f11a | ||
|
|
5256077a3c | ||
|
|
375e66047d | ||
|
|
42d1d6e1b0 | ||
|
|
ca51fab4d8 | ||
|
|
73c983516d | ||
|
|
f733d5a4da | ||
|
|
3d2948daf3 | ||
|
|
69a5d3644a | ||
|
|
2f1018c742 | ||
|
|
d5fc37282f | ||
|
|
525ed359cd | ||
|
|
fe00db62d6 | ||
|
|
bcfa760cf9 | ||
|
|
613e8f05c2 | ||
|
|
59f8f0c7ea | ||
|
|
ae0c8deec2 | ||
|
|
b508415983 | ||
|
|
a98d014763 | ||
|
|
51e5e49d3b | ||
|
|
0eced489da | ||
|
|
5138d12942 | ||
|
|
fe30276db2 | ||
|
|
e51e8b5c8a | ||
|
|
170900e80f | ||
|
|
6726403de9 | ||
|
|
f6d18d243e | ||
|
|
8bd9b258a8 | ||
|
|
0256448dd8 | ||
|
|
dc70fdbe03 | ||
|
|
ce1a2875bc | ||
|
|
b4c9ec27e0 | ||
|
|
8977ded7b6 | ||
|
|
afb4c636fe | ||
|
|
ff40a13f29 | ||
|
|
9991985170 | ||
|
|
61a48320af | ||
|
|
d53249060d | ||
|
|
22eebbbc71 | ||
|
|
4227c6b806 | ||
|
|
14695037da | ||
|
|
0d717cdc82 | ||
|
|
ae8c5ae7b8 | ||
|
|
fb0ed3db2f | ||
|
|
c69fad7429 | ||
|
|
92a2f529e3 | ||
|
|
bd74e2f30b | ||
|
|
a950c95416 | ||
|
|
dc9e9fd08f | ||
|
|
1abbaf99dc | ||
|
|
af6bb53a01 | ||
|
|
2d7e5a57e7 | ||
|
|
b6737aff59 | ||
|
|
c5f2cbf9fa | ||
|
|
d6d8b078b9 | ||
|
|
1d7a7e2d1d | ||
|
|
4a290f3834 | ||
|
|
9e492cbb4d | ||
|
|
e17d79e10f | ||
|
|
28a2981a4f | ||
|
|
d356e288a2 | ||
|
|
dd5f37391f | ||
|
|
17d6584ef4 | ||
|
|
ad4fb3ce8b | ||
|
|
5f1f8ee73b | ||
|
|
60224be272 | ||
|
|
6dcd48fef1 | ||
|
|
951e7a68e9 | ||
|
|
86bafbb760 | ||
|
|
a6564c49e2 | ||
|
|
c89735cd4e | ||
|
|
f3216abebf | ||
|
|
5676bd15dd | ||
|
|
bf8d57c7d1 | ||
|
|
0d415d94a5 | ||
|
|
73a1d6a7ba | ||
|
|
72d5c6fd1b | ||
|
|
6d5d9c8af3 | ||
|
|
c27cea981c | ||
|
|
f7f6704fc1 | ||
|
|
fca97f9768 | ||
|
|
7a5a73ce34 | ||
|
|
170e01b549 | ||
|
|
99dc46a89e | ||
|
|
848aa0b098 | ||
|
|
81a0889568 | ||
|
|
0a820d9c98 | ||
|
|
209a9f0ffc | ||
|
|
3101a86381 | ||
|
|
27ca0d0930 | ||
|
|
6ca045e1a9 | ||
|
|
0c86693dc4 | ||
|
|
5285b6926f | ||
|
|
f3cfc17a52 | ||
|
|
c58166137c | ||
|
|
28a02e9943 | ||
|
|
c6d9206dd1 | ||
|
|
d144d3a584 | ||
|
|
8cf8710130 | ||
|
|
3705e37678 | ||
|
|
ebe5193348 | ||
|
|
a3097d254e | ||
|
|
38276d9539 | ||
|
|
91a2168952 | ||
|
|
4a10b4ece0 | ||
|
|
853b1fad15 | ||
|
|
7acbeb55bc | ||
|
|
8498e0088b | ||
|
|
aae10f7d71 | ||
|
|
6b19a2b101 | ||
|
|
b44a76e6bd | ||
|
|
7f71fc1d42 | ||
|
|
ba9fe408bc | ||
|
|
40cb576e11 | ||
|
|
2f1db2fdf3 | ||
|
|
f4a22e5af3 | ||
|
|
aca57ec281 | ||
|
|
68cb8b6895 | ||
|
|
82e8c0152e | ||
|
|
f499f2dd66 | ||
|
|
d4a9318826 | ||
|
|
27a893a9a1 | ||
|
|
9f1fcca5ea | ||
|
|
bb564363d5 | ||
|
|
dd2a6a41da | ||
|
|
a6c8c615eb | ||
|
|
0d3b1bfca4 | ||
|
|
edd763b1aa | ||
|
|
2418fed65b | ||
|
|
785cdcefd6 | ||
|
|
3480832bf5 | ||
|
|
ee038bd77b | ||
|
|
6460c95e00 | ||
|
|
b0a6781623 | ||
|
|
8364e56e86 | ||
|
|
b8a4316297 | ||
|
|
24d1707693 | ||
|
|
b4f79f1667 | ||
|
|
064dd9bef2 | ||
|
|
b697c30941 | ||
|
|
93c95fdfa8 | ||
|
|
8863a3126d | ||
|
|
acbe5f6418 | ||
|
|
4e6652d811 | ||
|
|
7d4fa69595 | ||
|
|
baeb7937fc | ||
|
|
2bd9f8a11f | ||
|
|
44a2919a29 | ||
|
|
77fbc42f75 | ||
|
|
65edffea63 | ||
|
|
bf0083552d | ||
|
|
869194354c | ||
|
|
aa8c836b94 | ||
|
|
9689ba2c4f | ||
|
|
703be259fd | ||
|
|
45a1dfbd8a | ||
|
|
360303f86c | ||
|
|
64d37cd450 | ||
|
|
71dee2758b | ||
|
|
870edbb44a | ||
|
|
2a07e8f3f0 | ||
|
|
686a65880e | ||
|
|
ab4cb46d94 | ||
|
|
d3d6c83fbb | ||
|
|
4e3567659a | ||
|
|
f0874f4be0 | ||
|
|
dffa2d3556 | ||
|
|
7bbf33ee39 | ||
|
|
90e7080b63 | ||
|
|
e6ee26cf0e | ||
|
|
0dcab07519 | ||
|
|
a3ade01224 | ||
|
|
232e6f5076 | ||
|
|
d1cd366dc9 | ||
|
|
a1a9396287 | ||
|
|
ca0248c3a2 | ||
|
|
a43fc0d3d3 | ||
|
|
08b4b24296 | ||
|
|
5acd429c55 | ||
|
|
6c2a9107dd | ||
|
|
879d879e56 | ||
|
|
c6d048ca51 | ||
|
|
112aaea51f | ||
|
|
c3cdf8e97e | ||
|
|
d2744700c6 | ||
|
|
5d07a5a670 | ||
|
|
4da755e75f | ||
|
|
bd7aee7c1f | ||
|
|
f3aef37163 | ||
|
|
7d262296e1 | ||
|
|
3f1b42d466 | ||
|
|
90a4b62976 | ||
|
|
7346083b26 | ||
|
|
f052bbc36e | ||
|
|
7d8ae5e763 | ||
|
|
2bae50f501 | ||
|
|
a46f68c6e4 | ||
|
|
d59be2912e | ||
|
|
240d22696f | ||
|
|
2b1516ea79 | ||
|
|
89622f1ddf | ||
|
|
874acab90f | ||
|
|
8d4329197a | ||
|
|
34bfb899d1 | ||
|
|
55c153c5a9 | ||
|
|
c29ae9b785 | ||
|
|
5ce955a719 | ||
|
|
8c3a294384 | ||
|
|
55cc327e05 | ||
|
|
a324638f1f | ||
|
|
3366a6ae3d | ||
|
|
7dde370ee1 | ||
|
|
dfe6ba5603 | ||
|
|
fd9b2f2fda | ||
|
|
3c0181ef35 | ||
|
|
641254b23a | ||
|
|
63bd48003e | ||
|
|
23cde65add | ||
|
|
408f632636 | ||
|
|
83be0b5db4 | ||
|
|
7bed48f5fe | ||
|
|
2fce7ebd8f | ||
|
|
f8e6cfbeba | ||
|
|
fc41359df6 | ||
|
|
5649024d93 | ||
|
|
65bc8f0254 | ||
|
|
7887a70b70 | ||
|
|
8a6913fe19 | ||
|
|
7cd0e0b244 | ||
|
|
9543b5e716 | ||
|
|
bc8dbfde7c | ||
|
|
0c33af2140 | ||
|
|
b6a256dc5d | ||
|
|
5785fb6ba2 | ||
|
|
59589fdd29 | ||
|
|
75f0d8ee90 | ||
|
|
04ae6ec7af | ||
|
|
3bbf4a3352 | ||
|
|
0316072863 | ||
|
|
845d467fd9 | ||
|
|
be5bf6b711 | ||
|
|
788847edaa | ||
|
|
61ca7ee7c2 | ||
|
|
30f8fb4c11 | ||
|
|
3e92aa9fe7 | ||
|
|
bb5432de7d | ||
|
|
21fd889810 | ||
|
|
a228f1e1c2 | ||
|
|
4b5181d640 | ||
|
|
0dee55885b | ||
|
|
1e36a884fa | ||
|
|
d4e266d48c | ||
|
|
69d829ce8d | ||
|
|
c1838104ae | ||
|
|
c716ca1e87 | ||
|
|
c063961e4a | ||
|
|
f61cea695b | ||
|
|
e806b58ac9 | ||
|
|
338ce737c8 | ||
|
|
f41f141130 | ||
|
|
9f0169286b | ||
|
|
60452a7b0c | ||
|
|
6140dd955a | ||
|
|
5e06c5a9ea | ||
|
|
ad4e1f01aa | ||
|
|
bb114ea66b | ||
|
|
ce00226bc6 | ||
|
|
8bad25b860 | ||
|
|
cb83eb204b | ||
|
|
99edb8b8d5 | ||
|
|
b4998f4b01 | ||
|
|
51295389c6 | ||
|
|
5baf86dc89 | ||
|
|
fd4a9db13e | ||
|
|
e243234c4e | ||
|
|
817dc89279 | ||
|
|
798a87b31e | ||
|
|
4d47d848c5 | ||
|
|
bd3ccfe020 | ||
|
|
ded90df01b | ||
|
|
ce7930abfd | ||
|
|
82b4aad585 | ||
|
|
f321e2c705 | ||
|
|
0c86fd89ca | ||
|
|
01628cdd31 | ||
|
|
e57b3bc4ab | ||
|
|
82076d3ca6 | ||
|
|
46e594f1f1 | ||
|
|
e8caa46484 | ||
|
|
1847e82d04 | ||
|
|
045856c9ac | ||
|
|
53b6a07a41 | ||
|
|
976388f29c | ||
|
|
e5f12109c5 | ||
|
|
319869c22e | ||
|
|
66ef5c726c | ||
|
|
f8a961b568 | ||
|
|
521a989d23 | ||
|
|
0a71c63583 | ||
|
|
b05171b126 | ||
|
|
9804db4551 | ||
|
|
516faac73f | ||
|
|
29d546a3f1 | ||
|
|
bb5c0989f3 | ||
|
|
3ea2978df4 | ||
|
|
cf9c8f35a0 | ||
|
|
cefec1be60 | ||
|
|
16d8308fa8 | ||
|
|
af95ba48aa | ||
|
|
43446cc642 | ||
|
|
c60c5502f6 | ||
|
|
4ffe1866c5 | ||
|
|
d4ec309d68 | ||
|
|
fa6c4db13b | ||
|
|
91ce6c2420 | ||
|
|
62da0778ee | ||
|
|
7ffb5f16dd | ||
|
|
623de7d210 | ||
|
|
1119209fa0 | ||
|
|
c3db7191d2 | ||
|
|
2af3685dae | ||
|
|
841ddd5d83 | ||
|
|
a5f0deaea3 | ||
|
|
105f9365bf | ||
|
|
903dfb6f07 | ||
|
|
571a3e9677 | ||
|
|
79c110df39 | ||
|
|
ad03a0925b | ||
|
|
5e7fccb64e | ||
|
|
3bc6fc5e24 | ||
|
|
849db8fe44 | ||
|
|
55c632ace7 | ||
|
|
cd243a90d0 | ||
|
|
4e9ace39ce | ||
|
|
18628166dc | ||
|
|
f7e23d912c | ||
|
|
121a6afb45 | ||
|
|
c2656c4ce1 | ||
|
|
d22c23290f | ||
|
|
8992c57039 | ||
|
|
939a52dcbd | ||
|
|
6f788fcd23 | ||
|
|
f2f9ff5cbd | ||
|
|
470aabe1d7 | ||
|
|
669fe1f192 | ||
|
|
62ca511619 | ||
|
|
10492de50d | ||
|
|
e1e9a451da | ||
|
|
60f5371b31 | ||
|
|
aad4f58633 | ||
|
|
2fa1c81070 | ||
|
|
3420b5fbdf | ||
|
|
4df74780b8 | ||
|
|
cbfb25f003 | ||
|
|
e3dc12338b | ||
|
|
e75ef5fd2d | ||
|
|
8ebf7a7ad0 | ||
|
|
d7766b9828 | ||
|
|
427226de8c | ||
|
|
cb1bdccf51 | ||
|
|
1ab4344537 | ||
|
|
17a71d3e26 | ||
|
|
05431aa83b | ||
|
|
e21b23cd98 | ||
|
|
dc67028bd9 | ||
|
|
8f8df2b8e8 | ||
|
|
8573c8b8cb | ||
|
|
33cdecbc52 | ||
|
|
0c7510c1a8 | ||
|
|
94946c5854 | ||
|
|
83dec3b587 | ||
|
|
3518d023dc | ||
|
|
4ad7882762 | ||
|
|
957de0cd98 | ||
|
|
6bea8cc546 | ||
|
|
2d90fc608e | ||
|
|
f134a6ec63 | ||
|
|
266429101b | ||
|
|
b19e2037af | ||
|
|
e79a156e1f | ||
|
|
35f80f5085 | ||
|
|
47c523a40b | ||
|
|
cca44d44f7 | ||
|
|
54c917beff | ||
|
|
9985f2cb82 | ||
|
|
f30367e094 | ||
|
|
2ec8dc8319 | ||
|
|
1595a5ecd7 | ||
|
|
ea0de629df | ||
|
|
471bddea09 | ||
|
|
e97708ada0 | ||
|
|
a36b120c8b | ||
|
|
4cfe9fe182 | ||
|
|
59af8cc924 | ||
|
|
d908dffab7 | ||
|
|
ea5121ffe1 | ||
|
|
0bb5d229e8 | ||
|
|
409a9256a1 | ||
|
|
2c37e85a4c | ||
|
|
0ae2dfbff3 | ||
|
|
df5d105f29 | ||
|
|
219c9e7d95 | ||
|
|
6832df4699 | ||
|
|
22ed4f1b53 | ||
|
|
c31c7b50b7 | ||
|
|
7d1f6b7049 | ||
|
|
74d525364a | ||
|
|
c2f4cf3407 | ||
|
|
83f3dc99ce | ||
|
|
44d3606ce1 | ||
|
|
470d22c835 | ||
|
|
4c37628784 | ||
|
|
1daf7f8e2b | ||
|
|
841db3b0c2 | ||
|
|
5d10d8418e | ||
|
|
2fee977b4c | ||
|
|
52f1b1c3bf | ||
|
|
ab53d0e863 | ||
|
|
259da2d18a | ||
|
|
bf47e7cae3 | ||
|
|
db2721c581 | ||
|
|
1b2e9a6d06 | ||
|
|
99848aab6a | ||
|
|
3eddeeadc5 | ||
|
|
364bbdeab8 | ||
|
|
7583912de7 | ||
|
|
125975832b | ||
|
|
20fed375d1 | ||
|
|
fc1b3d6927 | ||
|
|
aed2a3cd1b | ||
|
|
15babeb584 | ||
|
|
020b5ea870 | ||
|
|
2ee5b2344e | ||
|
|
7616bcad3d | ||
|
|
f76ce980e3 | ||
|
|
9440ac7640 | ||
|
|
0e18997c79 | ||
|
|
95464772ac | ||
|
|
b4445dfdf8 | ||
|
|
fb5dca2711 | ||
|
|
6cdff955dc | ||
|
|
4039753b2f | ||
|
|
9df33cef8b | ||
|
|
e3e9211e8a | ||
|
|
0da113b723 | ||
|
|
e965adad7c | ||
|
|
57b225b680 | ||
|
|
b97597c645 | ||
|
|
162828da90 | ||
|
|
292647da14 | ||
|
|
3a88e43103 | ||
|
|
2ac60bdf48 | ||
|
|
010765e131 | ||
|
|
bcf22831e2 | ||
|
|
cde6e9757b | ||
|
|
f2d9a3e0a1 | ||
|
|
b917e8d3b0 | ||
|
|
3b26ce6501 | ||
|
|
1b2d3bf08b | ||
|
|
492bc9f86e | ||
|
|
a457a73826 | ||
|
|
ac36339491 | ||
|
|
dbbf7ab664 | ||
|
|
66400a98f1 | ||
|
|
aa50e2e385 | ||
|
|
118b8db209 | ||
|
|
967feb6931 | ||
|
|
e1e41a768a | ||
|
|
c333af33dc | ||
|
|
9e5b482b1d | ||
|
|
771747147c | ||
|
|
bc49979243 | ||
|
|
d46b3e2446 | ||
|
|
2804d89c5e | ||
|
|
19b737a534 | ||
|
|
29380b1120 | ||
|
|
fd32a71131 | ||
|
|
1556fd0e92 | ||
|
|
c4be440cd1 | ||
|
|
5dce7c4e48 | ||
|
|
4bfc32ec99 | ||
|
|
ff65f7fd7b | ||
|
|
7145f86a6e | ||
|
|
7ec4155845 | ||
|
|
6dd62dc891 | ||
|
|
5f66710fcd | ||
|
|
980d62d579 | ||
|
|
ac546a9711 | ||
|
|
cd2aee3053 | ||
|
|
f224ad2959 | ||
|
|
9d9318f38a | ||
|
|
f43d861b50 | ||
|
|
17714b0c12 | ||
|
|
9914576eaa | ||
|
|
bf8eff11ea | ||
|
|
a6c78b99c4 | ||
|
|
6a56ffc650 | ||
|
|
05059606c5 | ||
|
|
a2ff21fab9 | ||
|
|
134370f48d | ||
|
|
c7fa610842 | ||
|
|
242cb7c7cb | ||
|
|
edb49c7f0a | ||
|
|
3e0a7e7f8a | ||
|
|
cfab9a6a0a | ||
|
|
91b5f6d799 | ||
|
|
d5488ca7da | ||
|
|
f9911bff0d | ||
|
|
d5239191fe | ||
|
|
db7148350e | ||
|
|
c51c20a301 | ||
|
|
f4485dc72a | ||
|
|
f59682a7c9 | ||
|
|
507a023f41 | ||
|
|
ea7386b04b | ||
|
|
81479ac177 | ||
|
|
c7acddbc5c | ||
|
|
1905516536 | ||
|
|
64f34d9cd7 | ||
|
|
98bdb0cb3c | ||
|
|
bba88b2be4 | ||
|
|
12dfd4b6e0 | ||
|
|
209e721219 | ||
|
|
7a27dbb374 | ||
|
|
d039b9e23d | ||
|
|
af796871aa | ||
|
|
d8580d6174 | ||
|
|
24520717e4 | ||
|
|
bd5e860be0 | ||
|
|
1bdfcd1dbe | ||
|
|
b4f29978b3 | ||
|
|
f1bc88fc0c | ||
|
|
aee01af2a1 | ||
|
|
ab37264ae1 | ||
|
|
78b8a582f8 | ||
|
|
42a970e452 | ||
|
|
8f127e86ac | ||
|
|
33e45a5292 | ||
|
|
475e0e6c1e | ||
|
|
5e97f87a64 | ||
|
|
4ae7f2337a | ||
|
|
5e5b9683f9 | ||
|
|
0b971aaf84 | ||
|
|
2f33e9724d | ||
|
|
5f7e21faa0 | ||
|
|
d4ccaf60cf | ||
|
|
27e8841a6d | ||
|
|
45ab08aa76 | ||
|
|
c5339c255a | ||
|
|
d6ce4fc9f3 | ||
|
|
5ea41fa7f9 | ||
|
|
249c3d0e81 | ||
|
|
722d0d5554 | ||
|
|
9876a2efcd | ||
|
|
f7aa259995 | ||
|
|
f664998d9b | ||
|
|
c2416411c1 | ||
|
|
524da5a2ff | ||
|
|
838af2b2d8 | ||
|
|
64e86013bf | ||
|
|
a1e8397b6b | ||
|
|
7476f522e1 | ||
|
|
acb06ee4f1 | ||
|
|
674a0d481e | ||
|
|
40efa55ec7 | ||
|
|
3166d12994 | ||
|
|
58a97b4e39 | ||
|
|
7b8051d42f | ||
|
|
55f93184d3 | ||
|
|
684a0d9e36 | ||
|
|
a85e6370a8 | ||
|
|
0497539ef2 | ||
|
|
431361efad | ||
|
|
e82bf66a76 | ||
|
|
c8a73b5b15 | ||
|
|
b518258e6d | ||
|
|
a1d45023ab | ||
|
|
b7c2a26155 | ||
|
|
86a67e7f32 | ||
|
|
ba3ae0d80a | ||
|
|
beac676a6e | ||
|
|
97b6038be2 | ||
|
|
0907a6ce5b | ||
|
|
9eb433a4ef | ||
|
|
d04727f4b5 | ||
|
|
206c465e02 | ||
|
|
688c421c55 | ||
|
|
93ce0ce670 | ||
|
|
c2573774bf | ||
|
|
6e037e91d3 | ||
|
|
d665d4d62a | ||
|
|
29d9b32b67 | ||
|
|
00d218118c | ||
|
|
02b6ffd59a | ||
|
|
aa0e4406eb | ||
|
|
d0349f00ad | ||
|
|
d77214fef6 | ||
|
|
8937362433 | ||
|
|
df6c5dfac5 | ||
|
|
5cf38b5ce9 | ||
|
|
6cc9ceb198 | ||
|
|
0c0799f3bf | ||
|
|
9e2ac7b3f4 | ||
|
|
8bc8cf5e2d | ||
|
|
277197edd4 | ||
|
|
69ddf046b0 | ||
|
|
ea09023616 | ||
|
|
92de67a2ae | ||
|
|
57487f38de | ||
|
|
d334bd4477 | ||
|
|
d7e40de9da | ||
|
|
786f389be8 | ||
|
|
09a03565d7 | ||
|
|
456b058462 | ||
|
|
ecaba5b32e | ||
|
|
9f4c77d6d7 | ||
|
|
1fb67b791f | ||
|
|
81b1d54859 | ||
|
|
67dbe02deb | ||
|
|
85efdf8e00 | ||
|
|
bbaa3a2058 | ||
|
|
931c58bc9a | ||
|
|
abd5f17916 | ||
|
|
50f4c74688 | ||
|
|
f7f7764a6e | ||
|
|
f048cf36ce | ||
|
|
a26d1812c2 | ||
|
|
b6e354085e | ||
|
|
484a74defd | ||
|
|
43ed38a6e9 | ||
|
|
0c4495eb39 | ||
|
|
864d49f54d | ||
|
|
bd2219276f | ||
|
|
df1f33992a | ||
|
|
663bbd025e | ||
|
|
4802e516e5 | ||
|
|
f2512c4fdc | ||
|
|
29172d045d | ||
|
|
289a762bf1 | ||
|
|
208409110f | ||
|
|
e27765d965 | ||
|
|
96d81d7074 | ||
|
|
edf53d4516 | ||
|
|
108e9722fa | ||
|
|
72cb1cbfff | ||
|
|
ed84c4b210 | ||
|
|
77518eaf69 | ||
|
|
4bd36f0ea9 | ||
|
|
b19bf791a4 | ||
|
|
f70b7cab21 | ||
|
|
9eb9715e05 | ||
|
|
49ecf5aa8a | ||
|
|
3ad8850ada | ||
|
|
d1c9a18d04 | ||
|
|
89e196e86d | ||
|
|
25b36d6d42 | ||
|
|
6ddbd79fe6 | ||
|
|
d70ef4d3b3 | ||
|
|
d0308e0f58 | ||
|
|
b10635a9b1 | ||
|
|
104bd1b45f | ||
|
|
302c14186a | ||
|
|
6159994552 | ||
|
|
398041c607 | ||
|
|
6ce9f8f291 | ||
|
|
c2c8a139f3 | ||
|
|
698c0decb4 | ||
|
|
ef61c70a9d | ||
|
|
97863115ba | ||
|
|
fa5493a5d8 | ||
|
|
cd56e51a61 | ||
|
|
3e9cec3e8e | ||
|
|
943ec0b64b | ||
|
|
8008015082 | ||
|
|
af54d96d30 | ||
|
|
d98aa03e9d | ||
|
|
8d4c686ae2 | ||
|
|
982b9454f8 | ||
|
|
28a2a37ed2 | ||
|
|
acfbe9c1b1 | ||
|
|
4824c75563 | ||
|
|
3f019732b3 | ||
|
|
007852a48f | ||
|
|
3474697a66 | ||
|
|
bf1c7cacc6 | ||
|
|
b9bdd666da | ||
|
|
35d58d2f7c | ||
|
|
f5f16ce64b | ||
|
|
06dab9c468 | ||
|
|
7857480978 | ||
|
|
278bacbce8 | ||
|
|
743cf6d398 | ||
|
|
ace7e3b108 | ||
|
|
1edc73179a | ||
|
|
65dd7a5938 | ||
|
|
62989ecb6e | ||
|
|
b952ec73ce | ||
|
|
65e18e057f | ||
|
|
c13e4858d7 | ||
|
|
4e09b32dd9 | ||
|
|
ffcbc54522 | ||
|
|
06143b6c70 | ||
|
|
0af36eb99b | ||
|
|
b11c3635b0 | ||
|
|
66c4911298 | ||
|
|
36971b7651 | ||
|
|
3bdfe9c249 | ||
|
|
4e6f73e452 | ||
|
|
ce27a1d211 | ||
|
|
2d198403c7 | ||
|
|
6c1b5fdf3a | ||
|
|
9d419de9dc | ||
|
|
b945dec41b | ||
|
|
7819d9c112 | ||
|
|
258373f1a1 | ||
|
|
e1055b7f97 | ||
|
|
a1f6ed1713 | ||
|
|
4ffce75b70 | ||
|
|
09212691e2 | ||
|
|
ddd878683d | ||
|
|
a8b11e45c1 | ||
|
|
23f91274d6 | ||
|
|
6dde0f030a | ||
|
|
d154b4cc9e | ||
|
|
7c11fa7b50 | ||
|
|
264bf6c484 | ||
|
|
3854a9d633 | ||
|
|
38569029d8 | ||
|
|
3c2e0b0b17 | ||
|
|
21c4085c51 | ||
|
|
82189de78e | ||
|
|
33cf227bc8 | ||
|
|
b556d2d626 | ||
|
|
81258ea35b | ||
|
|
90abeedc3e | ||
|
|
048e843c39 | ||
|
|
e4f336a843 | ||
|
|
33add12069 | ||
|
|
8bad3aee74 | ||
|
|
a1f624c1cc | ||
|
|
ff0a0df478 | ||
|
|
5dd2f37035 | ||
|
|
862e44e96f | ||
|
|
643b0eaf65 | ||
|
|
0af6df3121 | ||
|
|
e0616d933f | ||
|
|
1e7fdbc79a | ||
|
|
5591107f95 | ||
|
|
e3c3e54cbb | ||
|
|
75525cc83f | ||
|
|
ff1217fca9 | ||
|
|
a61473dd98 | ||
|
|
edd8e9e41e | ||
|
|
efa118c3c8 | ||
|
|
503efe2d9d | ||
|
|
8762f1314d | ||
|
|
836478c166 | ||
|
|
acc59a9da5 | ||
|
|
03ce4bdfca | ||
|
|
1473d90243 | ||
|
|
32eee0bede | ||
|
|
131436fc20 | ||
|
|
966c188977 | ||
|
|
afba80bff9 | ||
|
|
4fd52d46bf | ||
|
|
8f9fc8fb51 | ||
|
|
b0985ebd42 | ||
|
|
0d267d97fe | ||
|
|
b0cd372af9 | ||
|
|
63100b683d | ||
|
|
74aa992ec6 | ||
|
|
dc2f1d7c64 | ||
|
|
03a1c48b54 | ||
|
|
918339cfa8 | ||
|
|
601fb418b5 | ||
|
|
e5af4f6f17 | ||
|
|
399a633d9d | ||
|
|
2ef223b5ea | ||
|
|
2cdb527df9 | ||
|
|
b3350490e7 | ||
|
|
1d1553275e | ||
|
|
0189609137 | ||
|
|
e6b3983a4e | ||
|
|
5247f10d7e | ||
|
|
9b3869790d | ||
|
|
b0dafcf50f | ||
|
|
fc0e8e2aae | ||
|
|
57f6d22c64 | ||
|
|
e5454d6714 | ||
|
|
328958876a | ||
|
|
a7389de109 | ||
|
|
b911ab01d2 | ||
|
|
9153c71cbf | ||
|
|
b44aa9d32e | ||
|
|
7805848e6c | ||
|
|
bcb1d9af0b | ||
|
|
ef84889a57 | ||
|
|
81c027e7cf | ||
|
|
fd62a248ee | ||
|
|
2c8bea1b59 | ||
|
|
aeaa47e91d | ||
|
|
9de1a8c363 | ||
|
|
c72d70d114 | ||
|
|
821fb1e01e | ||
|
|
7241783249 | ||
|
|
db3cbaf83b | ||
|
|
72c518bcb7 | ||
|
|
9725f19bae | ||
|
|
0bb632c642 | ||
|
|
0969c458b3 | ||
|
|
07364abf9e | ||
|
|
20cb13e1bb | ||
|
|
3f3b385de7 | ||
|
|
94b12e506e | ||
|
|
4ec6e52e73 | ||
|
|
88adc5ca86 | ||
|
|
68f73c7f94 | ||
|
|
223c95adbc | ||
|
|
3aaca1ca02 | ||
|
|
6a4d17b8a5 | ||
|
|
720c5fabaf | ||
|
|
1c5239a4d0 | ||
|
|
05b5609d86 | ||
|
|
7e92aeb7ac | ||
|
|
6e2eb15a80 | ||
|
|
0b825ac3d0 | ||
|
|
b5f1d74d6f | ||
|
|
e071b7dfd5 | ||
|
|
53e4e74930 | ||
|
|
b83de7eb11 | ||
|
|
38a208242b | ||
|
|
4acd8e180d | ||
|
|
debc8521a5 | ||
|
|
8bd268d81c | ||
|
|
ae6848b194 | ||
|
|
b22744b031 | ||
|
|
a75d7079df | ||
|
|
aa8442a345 | ||
|
|
70625a5cb0 | ||
|
|
7c043d9b4f | ||
|
|
546f17ab50 | ||
|
|
1c9986efc4 | ||
|
|
8ae13e29f5 | ||
|
|
f5bb072f28 | ||
|
|
37eef0ba6d | ||
|
|
603b80db1b | ||
|
|
8d9543cb6a | ||
|
|
c823660a8f | ||
|
|
ec4d28ac6c | ||
|
|
0c5ad85b35 | ||
|
|
bdecf7a3e3 | ||
|
|
6b62720daf | ||
|
|
d48c450018 | ||
|
|
078404fb59 | ||
|
|
4bb526896f | ||
|
|
0476006ef2 | ||
|
|
19831f0177 | ||
|
|
fc9871fba3 | ||
|
|
b34f4f8e43 | ||
|
|
0357d8522c | ||
|
|
08d06bd781 | ||
|
|
01a97add2a | ||
|
|
3cb351dceb | ||
|
|
9e11591b3b | ||
|
|
e4c1cece75 | ||
|
|
6881a98048 | ||
|
|
36de9f10d6 | ||
|
|
1cc135f01f | ||
|
|
079c8894fa | ||
|
|
957074a134 | ||
|
|
970759ed8b | ||
|
|
22f17a1424 | ||
|
|
5ed797cfc9 | ||
|
|
8ad59058a5 | ||
|
|
ec7bbcf90d | ||
|
|
37dde72c8f | ||
|
|
972f9be291 | ||
|
|
8b33b888b2 | ||
|
|
d29fd338eb | ||
|
|
c4f7e8121a | ||
|
|
8b5dba25f5 | ||
|
|
e18b5f5fd4 | ||
|
|
a5dc9537e5 | ||
|
|
3064948d8c | ||
|
|
e6bcc4a3fe | ||
|
|
6967b6bdc5 | ||
|
|
a8977a5dec | ||
|
|
b837e8ea0b | ||
|
|
110052fa0f | ||
|
|
84bb977d2e | ||
|
|
2d93c2b2da | ||
|
|
9e4f2a9614 | ||
|
|
5412a9f8ea | ||
|
|
d7177d3e05 | ||
|
|
a21bd81681 | ||
|
|
e653f35bf1 | ||
|
|
28ea06a8bc | ||
|
|
86b0491b68 | ||
|
|
c8309581be | ||
|
|
376c531fe4 | ||
|
|
b2c5bcd4f1 | ||
|
|
73c64272d8 | ||
|
|
11fe54753e | ||
|
|
69f921aea9 | ||
|
|
594ef71027 | ||
|
|
d25d8c21f6 | ||
|
|
835d13542f | ||
|
|
7f5a3fffd3 | ||
|
|
1890e710cb | ||
|
|
a9fefbec5c | ||
|
|
b96e3af6c7 | ||
|
|
12e6fe1d50 | ||
|
|
60c03a646c | ||
|
|
59dcbce417 | ||
|
|
df10fa87d3 | ||
|
|
a954406d1f | ||
|
|
e2213f458f | ||
|
|
55adcc1f0c | ||
|
|
d6eaa3d0cc | ||
|
|
25ad58d42c | ||
|
|
b61bccbb67 | ||
|
|
f1da517c84 | ||
|
|
a4019be28c | ||
|
|
36090d9f02 | ||
|
|
6b101d2c49 | ||
|
|
6436d703f5 | ||
|
|
b3243704df | ||
|
|
8bedfcfc64 | ||
|
|
e0aa2c33e9 | ||
|
|
49f268a14c | ||
|
|
2bb0e65aea | ||
|
|
8b6d731cb6 | ||
|
|
1cd629efb3 | ||
|
|
2f7f5425d8 | ||
|
|
215156c333 | ||
|
|
a5d2055c11 | ||
|
|
ffc2c564b8 | ||
|
|
16f222b0ab | ||
|
|
3edf90714a | ||
|
|
4e8fc03c2b | ||
|
|
5037283b62 | ||
|
|
f2c9135b96 | ||
|
|
7378d82bc4 | ||
|
|
ed10a99771 | ||
|
|
4df128d34e | ||
|
|
33d0db5854 | ||
|
|
4a57a554da | ||
|
|
21fe7c57d8 | ||
|
|
3bcc1429dd | ||
|
|
9a6a479452 | ||
|
|
c43487b741 | ||
|
|
6b50755a5a | ||
|
|
53998e0fff | ||
|
|
7341ae087c | ||
|
|
9ea8dca4e3 | ||
|
|
d80e64b2cc | ||
|
|
d7354f4dab | ||
|
|
8d1676db54 | ||
|
|
0714a40509 | ||
|
|
5262156e1a | ||
|
|
7ac27b59c6 | ||
|
|
fc7a43f23e | ||
|
|
d5ecfe7bef | ||
|
|
e58d1ac87e | ||
|
|
bb653e733c | ||
|
|
9c27d18d6c | ||
|
|
e5c13d2d72 | ||
|
|
b27529d927 | ||
|
|
95257114df | ||
|
|
935da0d51f | ||
|
|
78ed85943b | ||
|
|
7d87cc498a | ||
|
|
a523d25c0d | ||
|
|
d84e5d1839 | ||
|
|
063e79451f | ||
|
|
b4a842d9da | ||
|
|
ec0cb7a8bc | ||
|
|
841471104b | ||
|
|
ac71416eb9 | ||
|
|
779d685335 | ||
|
|
4d1e798c56 | ||
|
|
a598035236 | ||
|
|
50395aa821 | ||
|
|
6d9c8fd85b | ||
|
|
b65d994397 | ||
|
|
b20258c66e | ||
|
|
9984238f2a | ||
|
|
c3599bacf2 | ||
|
|
c10481b99d | ||
|
|
02e01b7386 | ||
|
|
ca7147a0a7 | ||
|
|
022c360964 | ||
|
|
d41f4d2db3 | ||
|
|
4871682dc6 | ||
|
|
1cebc1248b | ||
|
|
70d235f99e | ||
|
|
153409d37e | ||
|
|
67a30fdf91 | ||
|
|
911ce3f047 | ||
|
|
c97f7041a7 | ||
|
|
89bfb4f722 | ||
|
|
da3935ff36 | ||
|
|
06810bff91 | ||
|
|
a9af75bbd1 | ||
|
|
da2bff691b | ||
|
|
a85b3aa69f | ||
|
|
859f89101e | ||
|
|
2545912532 | ||
|
|
2fc1519bc6 | ||
|
|
be6ef15ffa | ||
|
|
e98f0c39d1 | ||
|
|
5666079d92 | ||
|
|
85f5ba9a25 | ||
|
|
df141a48d9 | ||
|
|
fed6fc131b | ||
|
|
cf49891853 | ||
|
|
de2a894269 | ||
|
|
34d10f8db7 | ||
|
|
68f76465cf | ||
|
|
5f91413023 | ||
|
|
45d6955260 | ||
|
|
3b801d43bc | ||
|
|
30df060357 | ||
|
|
252be84bf0 | ||
|
|
40ab272995 | ||
|
|
0ec3b5db8b | ||
|
|
55e07c1c9a | ||
|
|
7e475511b6 | ||
|
|
ca77e4545a | ||
|
|
5dc9723585 | ||
|
|
50a451eddc | ||
|
|
3f8350b78f | ||
|
|
500a56b869 | ||
|
|
e50b7174bf | ||
|
|
8299c735b1 | ||
|
|
124878ed22 | ||
|
|
1c09570805 | ||
|
|
e56797737d | ||
|
|
81852de1fa | ||
|
|
fbd39da8ca | ||
|
|
db0ef95fe3 | ||
|
|
d888aa67f9 | ||
|
|
0cb3e1749b | ||
|
|
b5a51aced3 | ||
|
|
04ba57cb38 | ||
|
|
ba42ad2115 | ||
|
|
5c13382071 | ||
|
|
3df8c63d5c | ||
|
|
8ff10d5995 | ||
|
|
a5a7358d26 | ||
|
|
63ac8863f3 | ||
|
|
2047a16a57 | ||
|
|
8d6d55d628 | ||
|
|
9a7dd5ea19 | ||
|
|
30b544a743 | ||
|
|
a0bb7b08bd | ||
|
|
e1d655cb23 | ||
|
|
5d46a112f8 | ||
|
|
a1b1e261de | ||
|
|
e01e5e6b0e | ||
|
|
4f2dc50b5c | ||
|
|
c3e5106b04 | ||
|
|
593ae295e3 | ||
|
|
9d50b78b69 | ||
|
|
198170ca48 | ||
|
|
00986fd7bf | ||
|
|
2519ebff9d | ||
|
|
c33775d71e | ||
|
|
6b0721cc21 | ||
|
|
d306e76420 | ||
|
|
73cd76932a | ||
|
|
5d19a9f50f | ||
|
|
368c30ef9d | ||
|
|
f77bf72de8 | ||
|
|
f2fbd92f78 | ||
|
|
480134302f | ||
|
|
74cc8c022c | ||
|
|
c6f3b00f0e | ||
|
|
626fbd1d10 | ||
|
|
b8df05cf88 | ||
|
|
57973f62c5 | ||
|
|
e56fc4b1ee | ||
|
|
f9452163c5 | ||
|
|
76ebd2d34f | ||
|
|
85c273c8ca | ||
|
|
b9cd834e95 | ||
|
|
3067c3f262 | ||
|
|
cfa6bee081 | ||
|
|
b46cc2c1a9 | ||
|
|
5e734fc5a6 | ||
|
|
d08bc7767e | ||
|
|
bbd0761887 | ||
|
|
4668149943 | ||
|
|
a5b7c057eb | ||
|
|
0a04bb110a | ||
|
|
9c0b414676 | ||
|
|
5be4b0c4fd | ||
|
|
8e0eab20e2 | ||
|
|
1b5aa67f5d | ||
|
|
02c278f393 | ||
|
|
e57b8aa26f | ||
|
|
3d023126ba | ||
|
|
53f58d4496 | ||
|
|
1a6ee237f6 | ||
|
|
33a99441a4 | ||
|
|
3df7e283e3 | ||
|
|
b295849f53 | ||
|
|
c107f35118 | ||
|
|
3d91153275 | ||
|
|
54472b3806 | ||
|
|
14e5f89feb | ||
|
|
a0b93bb4df | ||
|
|
85347d9675 | ||
|
|
060f7a7191 | ||
|
|
81ca6f7cba | ||
|
|
515645bb4d | ||
|
|
6ae6209457 | ||
|
|
272325ff05 | ||
|
|
a84b49b92d | ||
|
|
b63efdd80b | ||
|
|
7a64404299 | ||
|
|
2afa6ed2cb | ||
|
|
34f1a9ebfb | ||
|
|
6f2f8697ae | ||
|
|
6ec9d1d6ce | ||
|
|
047f22e110 | ||
|
|
a91fcbb310 | ||
|
|
5fc3eac0f6 | ||
|
|
937faaf149 | ||
|
|
115e7d6e50 | ||
|
|
34259d5d9d | ||
|
|
91b6ebb0c0 | ||
|
|
60b4f1f89f | ||
|
|
023ff6834a | ||
|
|
d00cab0b0a | ||
|
|
17493ff655 | ||
|
|
6c27e6c4fe | ||
|
|
4cb0be4df3 | ||
|
|
40f555a3b6 | ||
|
|
881fdbe893 | ||
|
|
2bda399982 | ||
|
|
75d840fa1a | ||
|
|
800bdd8fc5 | ||
|
|
b04ade8060 | ||
|
|
7f4d96f33e | ||
|
|
74731bc6ae | ||
|
|
9d8daca54d | ||
|
|
bb898b719f | ||
|
|
3a0b57b50f | ||
|
|
38d2333165 | ||
|
|
a7f0b5adb3 | ||
|
|
109fff0fa6 | ||
|
|
8c591e7248 | ||
|
|
0dafa10e27 | ||
|
|
60e3ff0bf0 | ||
|
|
6052405eb7 | ||
|
|
17a45109f4 | ||
|
|
392b45e6cb | ||
|
|
f27e1ba885 | ||
|
|
990c9d6f7c | ||
|
|
b301b8f6f2 | ||
|
|
924cf9bfd4 | ||
|
|
7e6573d191 | ||
|
|
fdae3a3f31 | ||
|
|
51194e20f2 | ||
|
|
043f2cb214 | ||
|
|
651d462456 | ||
|
|
7cb287d6c6 | ||
|
|
d16d89028f | ||
|
|
baa277c592 | ||
|
|
007f930fed | ||
|
|
f253f164a3 | ||
|
|
abfe71bb04 | ||
|
|
0c645b12d1 | ||
|
|
f824d1eb3b | ||
|
|
afbbe1148f | ||
|
|
8403e91fc9 | ||
|
|
c300879995 | ||
|
|
ea1d298eb3 | ||
|
|
d17b36519a | ||
|
|
f4f0896470 | ||
|
|
2c9b41db75 | ||
|
|
a38cd449c5 | ||
|
|
977cad3830 | ||
|
|
987587b5f3 | ||
|
|
9351f686b1 | ||
|
|
42e557bd3f | ||
|
|
35c2c8e8de | ||
|
|
960e1d49c2 | ||
|
|
100d979d3e | ||
|
|
b734599f40 | ||
|
|
b41b4fc584 | ||
|
|
b69bf58c63 | ||
|
|
a73e598a6e | ||
|
|
af2de6776d | ||
|
|
98195c9e74 | ||
|
|
97188ad85b | ||
|
|
9c673d2a2e | ||
|
|
77182d8711 | ||
|
|
a01c9ff379 | ||
|
|
32399b0cb5 | ||
|
|
fe3cdb1e20 | ||
|
|
3d25cecc69 | ||
|
|
068c0ff36c | ||
|
|
86a298792a | ||
|
|
a6599874db | ||
|
|
0deae84ecb | ||
|
|
6243fbfd0d | ||
|
|
f49d7ce1da | ||
|
|
75fed52bb6 | ||
|
|
90ec177360 | ||
|
|
667eadb430 | ||
|
|
afbe0bc307 | ||
|
|
c65af6a74f | ||
|
|
669aee2d73 | ||
|
|
67f0dfa449 | ||
|
|
e630a1ace1 | ||
|
|
21485ca6e2 | ||
|
|
87fb4af5cb | ||
|
|
e86ec75513 | ||
|
|
1ad099d9fd | ||
|
|
f9a677c1a3 | ||
|
|
6c6b67330f | ||
|
|
2b33e78fd3 | ||
|
|
b65e9fe0f5 | ||
|
|
571b817f04 | ||
|
|
e2b2815545 | ||
|
|
0ea58ab268 | ||
|
|
2fbb39bf6f | ||
|
|
f4c87b3739 | ||
|
|
696d91daa3 | ||
|
|
9a1781e6e7 | ||
|
|
3395b51086 | ||
|
|
a3a77a0bb6 | ||
|
|
d35a2b0faa | ||
|
|
88c57d002d | ||
|
|
0d9ff907a8 | ||
|
|
02d8897b82 | ||
|
|
aa8f734bd1 | ||
|
|
0015484679 | ||
|
|
aa5aa798e6 | ||
|
|
63a4a70420 | ||
|
|
2badb04a03 | ||
|
|
a328e12642 | ||
|
|
ce9f1eb201 | ||
|
|
b454ac9ce5 | ||
|
|
a010f7439d | ||
|
|
d7b0ba57e0 | ||
|
|
2ca161f3d8 | ||
|
|
79fdf641c0 | ||
|
|
89194c067b | ||
|
|
b5ab498e75 | ||
|
|
126a5e5e4e | ||
|
|
16d1f9aca8 | ||
|
|
466ab0b404 | ||
|
|
a52a871a94 | ||
|
|
4f9379a5e2 | ||
|
|
4cfad2ef3b | ||
|
|
6e81b0ac32 | ||
|
|
d87023e1ce | ||
|
|
e31d2c9857 | ||
|
|
2174ccf016 | ||
|
|
8f1607e010 | ||
|
|
e93129f1ae | ||
|
|
35b4e190d9 | ||
|
|
b252f52f8e | ||
|
|
eba30c4d79 | ||
|
|
ae1662e433 | ||
|
|
512a3bf09a | ||
|
|
9927ce14d3 | ||
|
|
e5e169f476 | ||
|
|
81df837a33 | ||
|
|
b84b526a43 | ||
|
|
5fc92ab0e6 | ||
|
|
039c2a6d57 | ||
|
|
d053422657 | ||
|
|
90d9eb3520 | ||
|
|
3466da4338 | ||
|
|
17c1a1e465 | ||
|
|
6872ab0e14 | ||
|
|
136d16b7fd | ||
|
|
d651deb31c | ||
|
|
8fb37233f4 | ||
|
|
700194b80d | ||
|
|
ef2dd673ec | ||
|
|
7a3adca771 | ||
|
|
f66b0b7fea | ||
|
|
b6df0209ba | ||
|
|
6b53d263fe | ||
|
|
00024240bb | ||
|
|
237a889f54 | ||
|
|
f5c265b7b5 | ||
|
|
1341ab5703 | ||
|
|
3ded8196c4 | ||
|
|
cbc239ceaa | ||
|
|
a6b43baafe | ||
|
|
ba0a261840 | ||
|
|
3bb0d523d3 | ||
|
|
85cb333a5d | ||
|
|
2abb073b3a | ||
|
|
0634386b2e | ||
|
|
372e9335b1 | ||
|
|
f6d1163ddd | ||
|
|
e6b6082a2b | ||
|
|
e0ee0b9254 | ||
|
|
fde47133da | ||
|
|
643f64df3f | ||
|
|
a6ec1ba23b | ||
|
|
ae231b1d1b | ||
|
|
ecdf66c454 | ||
|
|
aaca28c1a6 | ||
|
|
f0d8fdf2d8 | ||
|
|
c9288a052a | ||
|
|
4b3a425888 | ||
|
|
71069ced7f | ||
|
|
1308839a41 | ||
|
|
6d849ad5f6 | ||
|
|
fa95191792 | ||
|
|
e945aafd7b | ||
|
|
e9f75adddb | ||
|
|
3e4b66675b | ||
|
|
6f8d3f7a57 | ||
|
|
eb994a691a | ||
|
|
6ebd8e78c8 | ||
|
|
daa947e7eb | ||
|
|
b117130aac | ||
|
|
4587aba1d4 | ||
|
|
ae73e6f04d | ||
|
|
5930a64203 | ||
|
|
97536c4e9b | ||
|
|
e81e33af38 | ||
|
|
a7c56eab86 | ||
|
|
6e580a731e | ||
|
|
7843a6bf77 | ||
|
|
fa6d933544 | ||
|
|
83085d08ca | ||
|
|
a02055e9b5 | ||
|
|
9acd792abe | ||
|
|
4ef55502b4 | ||
|
|
3009863877 | ||
|
|
70a6b171d0 | ||
|
|
9a25b5458d | ||
|
|
416aeb4072 | ||
|
|
0c1594b8f8 | ||
|
|
5be30bd278 | ||
|
|
669ae104a4 | ||
|
|
c37cfeb74f | ||
|
|
51b1da660a | ||
|
|
c394985b1b | ||
|
|
04c300b8e2 | ||
|
|
117f33afc5 | ||
|
|
3d92669df5 | ||
|
|
63757af1a0 | ||
|
|
e6a58b6700 | ||
|
|
8fb504c963 | ||
|
|
babe42ef35 | ||
|
|
b67e3ff957 | ||
|
|
7557220d5d | ||
|
|
50ccccc3f4 | ||
|
|
b6afc68847 | ||
|
|
d06813f528 | ||
|
|
fa7b7288c9 | ||
|
|
36d5debe74 | ||
|
|
a7d5fb5006 | ||
|
|
dadfcd4f81 | ||
|
|
236229ea7e | ||
|
|
6f0f3cc115 | ||
|
|
3aa072b437 | ||
|
|
9cc03aaa9a | ||
|
|
930b15ae09 | ||
|
|
1c1f4068cd | ||
|
|
b6690e0012 | ||
|
|
52e7f670f3 | ||
|
|
12d643694f | ||
|
|
3876a96b67 | ||
|
|
e50f234ba3 | ||
|
|
fd6df8e52a | ||
|
|
28225c7cbd | ||
|
|
cab2929c10 | ||
|
|
52a490bf5d | ||
|
|
f2c16fbf3c | ||
|
|
65a633f42d | ||
|
|
d2c6d79589 | ||
|
|
f4a873745f | ||
|
|
1bda56ea23 | ||
|
|
c7e9d90321 | ||
|
|
7476194bd1 | ||
|
|
1770c85689 | ||
|
|
4544893b4c | ||
|
|
f30fa925ea | ||
|
|
beb91559e5 | ||
|
|
fbc5e74318 | ||
|
|
e364659c6e | ||
|
|
9e26198afe | ||
|
|
f9b6ddc230 | ||
|
|
0991f94d06 | ||
|
|
32513083b1 | ||
|
|
336cdcddc5 | ||
|
|
4047c1a4e4 | ||
|
|
091cf390d2 | ||
|
|
05aaafc1cf | ||
|
|
5885b833cd | ||
|
|
106627da04 | ||
|
|
d73ea54e08 | ||
|
|
a45bfaf3da | ||
|
|
e85cc0d856 | ||
|
|
0f608f3a15 | ||
|
|
4ad5c6f864 | ||
|
|
be47b6a6c0 | ||
|
|
1f982c94ce | ||
|
|
12472a2612 | ||
|
|
f6a8d32880 | ||
|
|
bb2f86463e | ||
|
|
e8dafc02f7 | ||
|
|
0655834938 | ||
|
|
64a34ced72 | ||
|
|
d0dc505220 | ||
|
|
b2d3f3ff22 | ||
|
|
39730b6834 | ||
|
|
dd1991f2c6 | ||
|
|
2f32e11f53 | ||
|
|
280f55a875 | ||
|
|
dc68be5abf | ||
|
|
1ef90902bd | ||
|
|
6f37e97c67 | ||
|
|
e54c74d972 | ||
|
|
af9fa85cc1 | ||
|
|
74828e1409 | ||
|
|
dc77400ab1 | ||
|
|
2d0638821d | ||
|
|
8a87d60f29 | ||
|
|
530789b733 | ||
|
|
618d75566f | ||
|
|
5f66893038 | ||
|
|
e05d379101 | ||
|
|
41ea433e7c | ||
|
|
bfd7881b7b | ||
|
|
1f9806a480 | ||
|
|
5b43a108bc | ||
|
|
b253c8cc95 | ||
|
|
0fc9ed852e | ||
|
|
175c1f2720 | ||
|
|
a355783377 | ||
|
|
dafdbc9ddb | ||
|
|
14f5204548 | ||
|
|
5233463f0b | ||
|
|
1d4a416100 | ||
|
|
25ee796d5b | ||
|
|
e08107063a | ||
|
|
30d1605007 | ||
|
|
cd5a86bfcf | ||
|
|
a23da9f867 | ||
|
|
d5bb37b552 | ||
|
|
97b67d0f93 | ||
|
|
3f82be7192 | ||
|
|
adfcb5f7b6 | ||
|
|
5940feb64b | ||
|
|
229e6809d8 | ||
|
|
87e5687d03 | ||
|
|
5aba1d9aec | ||
|
|
68ebe85a98 | ||
|
|
789ac5dfd4 | ||
|
|
ceb8fee0cc | ||
|
|
421270f4a6 | ||
|
|
afdf5750b5 | ||
|
|
ea869d4ffc | ||
|
|
9d89eed873 | ||
|
|
c00eea7991 | ||
|
|
88239e0b0d | ||
|
|
ba8f48af65 | ||
|
|
9930e2745f | ||
|
|
da3879e928 | ||
|
|
7195b7c803 | ||
|
|
9b082eea14 | ||
|
|
a16218b311 | ||
|
|
f427c00d94 | ||
|
|
8bcd8c404d | ||
|
|
4d7f9c42c8 | ||
|
|
29a71fd903 | ||
|
|
cd263484c3 | ||
|
|
fcacac7c6f | ||
|
|
78d74261e9 | ||
|
|
16d694734b | ||
|
|
252ab0fbab | ||
|
|
8eb9c451a1 | ||
|
|
469c52be28 | ||
|
|
54fa51eeff | ||
|
|
5456af6867 | ||
|
|
180446c34d | ||
|
|
5c63a499d5 | ||
|
|
3a2c5b318a | ||
|
|
cfff69a715 | ||
|
|
08883d86ef | ||
|
|
8a849ebeff | ||
|
|
05a796faf1 | ||
|
|
9e1d03b383 | ||
|
|
0a929f2971 | ||
|
|
7878992570 | ||
|
|
4f95926cbd | ||
|
|
f3e997ea39 | ||
|
|
2b921c21ff | ||
|
|
50496b1a59 | ||
|
|
9736d63577 | ||
|
|
13add414c4 | ||
|
|
b032bc13db | ||
|
|
aaad428438 | ||
|
|
203895fc7e | ||
|
|
aab1fab445 | ||
|
|
e06221bc89 | ||
|
|
26a13edcf3 | ||
|
|
65b6fe576f | ||
|
|
4671829ad8 | ||
|
|
293be752ca | ||
|
|
0a6e4f31d5 | ||
|
|
e6c4ce51f7 | ||
|
|
3924063060 | ||
|
|
d122f9f700 | ||
|
|
d0649ba815 | ||
|
|
1ec09270a7 | ||
|
|
1ddd7415cb | ||
|
|
ec9d0d4008 | ||
|
|
08c8bd3049 | ||
|
|
2520d9f400 | ||
|
|
0e863ff9ca | ||
|
|
1b78f54c6b | ||
|
|
b732c24ec4 | ||
|
|
af604aba31 | ||
|
|
c82658440f | ||
|
|
7e660d4d8e | ||
|
|
4a8147f8a5 | ||
|
|
583830c652 | ||
|
|
95fdb549d7 | ||
|
|
a598f0e632 | ||
|
|
293dbd8a8b | ||
|
|
f03a378ce0 | ||
|
|
6aae8aee5b | ||
|
|
6d908d3e79 | ||
|
|
d5016c7133 | ||
|
|
b5a1b692bd | ||
|
|
834c396a22 | ||
|
|
bc18d241e8 | ||
|
|
f7b0d22f86 | ||
|
|
5a1877087f | ||
|
|
50462ec15d | ||
|
|
1dd5e2c926 | ||
|
|
ebddc46bc0 | ||
|
|
138cbf9761 | ||
|
|
f21c6bca00 | ||
|
|
9aad8a7774 | ||
|
|
68b6c7d886 | ||
|
|
1c489e57cc | ||
|
|
6719578f14 | ||
|
|
d5587de316 | ||
|
|
77f28e3441 | ||
|
|
3fa63b774e | ||
|
|
713c7cd8e3 | ||
|
|
e6b4d87939 | ||
|
|
27c94d9874 | ||
|
|
eece8a0e26 | ||
|
|
fb85867d72 | ||
|
|
c454bfcd84 | ||
|
|
ad95b86fdd | ||
|
|
769232f368 | ||
|
|
9cf10eecd1 | ||
|
|
f927d5b8f5 | ||
|
|
7fa696dace | ||
|
|
feac93389c | ||
|
|
f7969d91b3 | ||
|
|
92aafb9043 | ||
|
|
f9328d53b4 | ||
|
|
f1cbc7da33 | ||
|
|
01becd21de | ||
|
|
7768b94279 | ||
|
|
3bc51c8e69 | ||
|
|
d206be91d5 | ||
|
|
6e69c9e375 | ||
|
|
f2846af4ec | ||
|
|
657eed1dc9 | ||
|
|
e351ab0171 | ||
|
|
779446da64 | ||
|
|
2ff0d7aa83 | ||
|
|
7ceb64b57b | ||
|
|
43e1e0dbc8 | ||
|
|
a1c12cfd77 | ||
|
|
aa6ca21a34 | ||
|
|
a49521d683 | ||
|
|
3be6e5b015 | ||
|
|
ca1725b98c | ||
|
|
d11dfe2ced | ||
|
|
ab30ba1e1b | ||
|
|
7f23cb9bf5 | ||
|
|
c9d3cf301e | ||
|
|
67282882fa | ||
|
|
73bf4f45c3 | ||
|
|
66ae62fb91 | ||
|
|
8bae804508 | ||
|
|
d87acc97c3 | ||
|
|
f9b2c59974 | ||
|
|
a870a3b918 | ||
|
|
008ed34553 | ||
|
|
e239045688 | ||
|
|
ed80bfaf02 | ||
|
|
473b35f9a3 | ||
|
|
45bb7eec0b | ||
|
|
58bb029666 | ||
|
|
0f97478b55 | ||
|
|
9efa70a551 | ||
|
|
ed65721085 | ||
|
|
83688fceb7 | ||
|
|
088f75ba0c | ||
|
|
188cfa08a9 | ||
|
|
f731900e2f | ||
|
|
b89bd24bed | ||
|
|
effda88b51 | ||
|
|
3844f70a4d | ||
|
|
8e333757f9 | ||
|
|
0fb12bcc9c | ||
|
|
44d78ef92a | ||
|
|
ebb6729a26 | ||
|
|
b1bcaa33e7 | ||
|
|
a35f8bddde | ||
|
|
8fbe7ba742 | ||
|
|
f039b0b6e9 | ||
|
|
9ad9ef7957 | ||
|
|
5c7db04465 | ||
|
|
838105fb65 | ||
|
|
5ca87c0f20 | ||
|
|
af4edff370 | ||
|
|
f40c048475 | ||
|
|
77247cccbe | ||
|
|
fcfcd77bfd | ||
|
|
b3667befb4 | ||
|
|
a6cb0e0a96 | ||
|
|
c047f943de | ||
|
|
79089cc47e | ||
|
|
3c631902e1 | ||
|
|
379c24a012 | ||
|
|
4035b87693 | ||
|
|
11d1a8c3cf | ||
|
|
7eb9c8265c | ||
|
|
572beb2311 | ||
|
|
d861d8bfb8 | ||
|
|
6791ff6192 | ||
|
|
9d9de6b2a3 | ||
|
|
1f7ef15ad1 | ||
|
|
16c582ec7a | ||
|
|
de58d0ecca | ||
|
|
010f6c7f1a | ||
|
|
aea5612c39 | ||
|
|
b8b912bdd5 | ||
|
|
e4ca88726e | ||
|
|
616f109671 | ||
|
|
8e0580ff96 | ||
|
|
4b2e7620dd | ||
|
|
b82f25c503 | ||
|
|
c174c0cc6d | ||
|
|
117da337c7 | ||
|
|
01da46f753 | ||
|
|
d17efce4f5 | ||
|
|
e7a6d1f532 | ||
|
|
f643f2c601 | ||
|
|
480faa6461 | ||
|
|
1fa084b6be | ||
|
|
1c86b00b5c | ||
|
|
10823e1c37 | ||
|
|
f73693206f | ||
|
|
861c8b29c0 | ||
|
|
17873706b7 | ||
|
|
5037046624 | ||
|
|
5c0614d656 | ||
|
|
697866d1ba | ||
|
|
38d826d152 | ||
|
|
13cc29cd8c | ||
|
|
401357b8cb | ||
|
|
599e1bb220 | ||
|
|
864fa17b75 | ||
|
|
a98c9ed0af | ||
|
|
8032aa1ad9 | ||
|
|
5ff4e3b194 | ||
|
|
b01bf6089c | ||
|
|
f9a33bfc14 | ||
|
|
610b412506 | ||
|
|
09000ad9b3 | ||
|
|
f70f0f8d62 | ||
|
|
d5c3f9e780 | ||
|
|
b42dab3eef | ||
|
|
7cbea49c2d | ||
|
|
6dcc5a1169 | ||
|
|
53129125dd | ||
|
|
2d52b9fb39 | ||
|
|
863cbb785d | ||
|
|
ba1a4f06ff | ||
|
|
cf5be85dad | ||
|
|
d21b67446f | ||
|
|
3b48a270fc | ||
|
|
105e9da866 | ||
|
|
d3b16ba443 | ||
|
|
57fc6a3f50 | ||
|
|
abc51fdc5d | ||
|
|
e0ad2b4555 | ||
|
|
35a0a658a7 | ||
|
|
2c99a8bee4 | ||
|
|
1dd2bdcb8e | ||
|
|
9f67da00d1 | ||
|
|
82d53a8c3d | ||
|
|
f3eee25527 | ||
|
|
ee11775425 | ||
|
|
bcdf9ac5ca | ||
|
|
4accdf77f8 | ||
|
|
fc46f70153 | ||
|
|
e7cf7d58b8 | ||
|
|
d98e9e1838 | ||
|
|
369d3aa62e | ||
|
|
d4ac6dbfe4 | ||
|
|
91d35905fd | ||
|
|
1a34830f0e | ||
|
|
f000df1e15 | ||
|
|
78b0072051 | ||
|
|
178f7b4643 | ||
|
|
f34a8fff6a | ||
|
|
7766e1f684 | ||
|
|
bde1f6d199 | ||
|
|
0d7ee6f208 | ||
|
|
78adaecb89 | ||
|
|
f89d91783b | ||
|
|
a18e1a0161 | ||
|
|
4308b8a4a5 | ||
|
|
280d98bad9 | ||
|
|
ae5bf747c9 | ||
|
|
1ae0820ecc | ||
|
|
c09473f41e | ||
|
|
99a3e0c399 | ||
|
|
d2bd4a213b | ||
|
|
1dcb0b52e2 | ||
|
|
409c9c4e23 | ||
|
|
aa54e14c37 | ||
|
|
3ffe36e5ed | ||
|
|
3b2c74042e | ||
|
|
11ae938146 | ||
|
|
f11bb254a5 | ||
|
|
5187138547 | ||
|
|
2bb6387dae | ||
|
|
ca293dc0e7 | ||
|
|
ea1d4e7f50 | ||
|
|
0b681c471e | ||
|
|
80267aa418 | ||
|
|
36c31a21b9 | ||
|
|
51725d3d9c | ||
|
|
05d3354570 | ||
|
|
8799a15e73 | ||
|
|
2cde9a82a0 | ||
|
|
2c1fa628a2 | ||
|
|
a67fc64afb | ||
|
|
6bbdc2bae1 | ||
|
|
50d7fd776f | ||
|
|
1c38f705a7 | ||
|
|
b643939cc4 | ||
|
|
3ed3e93b25 | ||
|
|
f6ea09e581 | ||
|
|
998f89216e | ||
|
|
aefc6ff7b4 | ||
|
|
66615f1a96 | ||
|
|
a5dc91c175 | ||
|
|
d04436aa0a | ||
|
|
6542b8b198 | ||
|
|
6813787fc7 | ||
|
|
afdb24610d | ||
|
|
58e4bf1cc3 | ||
|
|
28761fc960 | ||
|
|
69e54ab410 | ||
|
|
116ceb6f93 | ||
|
|
5d022a575a | ||
|
|
e8fd0f3531 | ||
|
|
8103c399d5 | ||
|
|
cf3e7f90d6 | ||
|
|
22bfac746e | ||
|
|
066a3b8b52 | ||
|
|
48141c0693 | ||
|
|
576e21eb65 | ||
|
|
a51f5edbc8 | ||
|
|
be393a9d10 | ||
|
|
ef59f38ec4 | ||
|
|
47120fae01 | ||
|
|
93a4327921 | ||
|
|
0f2bbd7bfd | ||
|
|
c0417c1989 | ||
|
|
fb6cfa45fd | ||
|
|
b875cea10d | ||
|
|
516372e5db | ||
|
|
0899a1052e | ||
|
|
32bf17c076 | ||
|
|
66a6a8f33c | ||
|
|
007fe6a030 | ||
|
|
f5f9491811 | ||
|
|
04e09c0078 | ||
|
|
05b71564d8 | ||
|
|
1791a5bb11 | ||
|
|
3e6a99fc22 | ||
|
|
a5419ecc5c | ||
|
|
a36b138efe | ||
|
|
6d30fdb83d | ||
|
|
5c4741c5d4 | ||
|
|
93c748bd3c | ||
|
|
7ba6e320e7 | ||
|
|
54468ab1a8 | ||
|
|
01f5435f63 | ||
|
|
22768ff6c6 | ||
|
|
122526a9d0 | ||
|
|
6cb36a6cee | ||
|
|
925afe0999 | ||
|
|
f743410b4e | ||
|
|
4a2206ecb1 | ||
|
|
ffde2c96c7 | ||
|
|
2bd46230be | ||
|
|
b04fe21d65 | ||
|
|
266f9cc370 | ||
|
|
1682de59df | ||
|
|
42fd14f5c0 | ||
|
|
1988c02b7f | ||
|
|
517eaa8b80 | ||
|
|
1f78462f58 | ||
|
|
36bbcc8559 | ||
|
|
f26253ec49 | ||
|
|
f2dc287f14 | ||
|
|
3fe3151af7 | ||
|
|
1c1fd8f210 | ||
|
|
671d53877a | ||
|
|
97710a4576 | ||
|
|
c08fae8bce | ||
|
|
f02dd2f439 | ||
|
|
e544f1fa1e | ||
|
|
130ff27f26 | ||
|
|
79a9ac3bc8 | ||
|
|
c5308d51f4 | ||
|
|
a6f4de5817 | ||
|
|
8825a03033 | ||
|
|
abdfc5c597 | ||
|
|
3ce2f0d100 | ||
|
|
be2faaa110 | ||
|
|
f33269e50b | ||
|
|
bbc355df07 | ||
|
|
d58f9031d1 | ||
|
|
0312016f89 | ||
|
|
e3ae013e42 | ||
|
|
07a2b136b8 | ||
|
|
3d76a982aa | ||
|
|
92d726bbd4 | ||
|
|
e2ef0bc3a6 | ||
|
|
13c29cb7a9 | ||
|
|
27eefd8705 | ||
|
|
b22c6a0078 | ||
|
|
f4784412de | ||
|
|
33c5ea1f4e | ||
|
|
3dc15068b9 | ||
|
|
4cb30f1ce4 | ||
|
|
b868de8d67 | ||
|
|
04aedcc056 | ||
|
|
d9f1bcbf15 | ||
|
|
105d17748e | ||
|
|
dd27950fae | ||
|
|
4b7af8d3b4 | ||
|
|
f3fd82a24a | ||
|
|
cd97b2fb96 | ||
|
|
f661c233be | ||
|
|
6a2a2d5d11 | ||
|
|
87ff433ef8 | ||
|
|
9e4e3a8dfa | ||
|
|
4d4441217f | ||
|
|
7e51ca9912 | ||
|
|
94a29be415 | ||
|
|
9dfda83946 | ||
|
|
41826fc3cb | ||
|
|
0ed13f6943 | ||
|
|
6c2ed1be22 | ||
|
|
ddec424429 | ||
|
|
d68b34cefe | ||
|
|
7e6d061646 | ||
|
|
c19725506d | ||
|
|
a6ceaf8d96 | ||
|
|
f43fbffdf7 | ||
|
|
68c099a2af | ||
|
|
70a05b4280 | ||
|
|
097e0f38ff | ||
|
|
094974d417 | ||
|
|
d89314a559 | ||
|
|
086340540a | ||
|
|
ed83b1d9e9 | ||
|
|
4f6d2a8b71 | ||
|
|
d58a8ebba0 | ||
|
|
6be465fe9b | ||
|
|
26225aff57 | ||
|
|
fd55360672 | ||
|
|
4e766c7c3b | ||
|
|
0b10d98e0b | ||
|
|
be0a3fb1f2 | ||
|
|
02e89d77bb | ||
|
|
4b753b1610 | ||
|
|
f8381628d4 | ||
|
|
d8f41f67c9 | ||
|
|
ce26b566a4 | ||
|
|
ee2d0b963d | ||
|
|
f051c0e564 | ||
|
|
03d3bbcddb | ||
|
|
06cafb09b3 | ||
|
|
a7a7b956b1 | ||
|
|
9b39ba169c | ||
|
|
4670929953 | ||
|
|
366e2e7a94 | ||
|
|
0e14bc1e02 | ||
|
|
e5f05ca9be | ||
|
|
d08522408a | ||
|
|
cc31c8fc33 | ||
|
|
db60e8868c | ||
|
|
1adae67dd7 | ||
|
|
5ad3044314 | ||
|
|
90fe556e5f | ||
|
|
c0152940f9 | ||
|
|
9313ba08ed | ||
|
|
f3b9930dea | ||
|
|
5520144ff4 | ||
|
|
2b9ea58c86 | ||
|
|
8f42f59a80 | ||
|
|
c6970e1998 | ||
|
|
c61bae3a33 | ||
|
|
b0f9035e2d | ||
|
|
aba9748ffd | ||
|
|
2876ef7607 | ||
|
|
7d1aeede1a | ||
|
|
b7f4a11eee | ||
|
|
0e5138d6ec | ||
|
|
f1518226bd | ||
|
|
4d26fc7e7c | ||
|
|
102cf52a16 | ||
|
|
198ed859ff | ||
|
|
9d44d5d4e7 | ||
|
|
e8896fe238 | ||
|
|
21281789e0 | ||
|
|
b71566f206 | ||
|
|
181539651f | ||
|
|
b69564f5c9 | ||
|
|
c26e00b5bd | ||
|
|
dc606645fd | ||
|
|
0e04d20762 | ||
|
|
7040086201 | ||
|
|
6f3c3b6d61 | ||
|
|
37f250ddc1 | ||
|
|
35f310885e | ||
|
|
616ca4fe1f | ||
|
|
a9fe39459a | ||
|
|
1e1dd8c668 | ||
|
|
ce6796ed9b | ||
|
|
585e08eb95 | ||
|
|
a42eeb12d2 | ||
|
|
cf66f67fb6 | ||
|
|
2408d78f47 | ||
|
|
4f8a5eb1a0 | ||
|
|
06e5966cb4 | ||
|
|
ea51f1c896 | ||
|
|
77e5450746 | ||
|
|
6e10fea119 | ||
|
|
f52c247bd5 | ||
|
|
0dd857f7a2 | ||
|
|
d817990283 | ||
|
|
9905099a71 | ||
|
|
0eba5a0de3 | ||
|
|
5eb3c1a67b | ||
|
|
b370375414 | ||
|
|
8536f6c163 | ||
|
|
bb1f97abc2 | ||
|
|
e1cd846c9a | ||
|
|
1fcc2b0029 | ||
|
|
f4f41a5985 | ||
|
|
173a6eee03 | ||
|
|
d9e4017677 | ||
|
|
7beac0b105 | ||
|
|
f0fef94a4f | ||
|
|
78cd4481e4 | ||
|
|
af3c9eaec1 | ||
|
|
0cf029edd4 | ||
|
|
c0dac1383d | ||
|
|
a3d0d4a5bf | ||
|
|
12d263999b | ||
|
|
fa900d5dbb | ||
|
|
ddc2c8d110 | ||
|
|
c91f41e984 | ||
|
|
acfba410dd | ||
|
|
b8ca530c55 | ||
|
|
b31c097531 | ||
|
|
0f9fe8648e | ||
|
|
791a641eef | ||
|
|
c5fba24cc5 | ||
|
|
b8b2ea7ccb | ||
|
|
c90cecc2fb | ||
|
|
b2ef7bb104 | ||
|
|
5d5d4ac714 | ||
|
|
0b228ed6d3 | ||
|
|
b3b96e5e10 | ||
|
|
6be520a8f9 | ||
|
|
f3db914e9d | ||
|
|
062a5bfe8d | ||
|
|
fbfa3cf619 | ||
|
|
1317c0dd8c | ||
|
|
bbc633b004 | ||
|
|
ed8fdd9292 | ||
|
|
2d9c33c34f | ||
|
|
80439c495e | ||
|
|
1bddd038fe | ||
|
|
d36923e47d | ||
|
|
476cbf17f6 | ||
|
|
91d50b9627 | ||
|
|
52420945b2 | ||
|
|
b70eca7661 | ||
|
|
39d083eae7 | ||
|
|
3bfc1ebcea | ||
|
|
b6bbcb0609 | ||
|
|
6121f97ca9 | ||
|
|
74e48fc490 | ||
|
|
28a9307f9f | ||
|
|
cdccc3a47f | ||
|
|
3eb969de0c | ||
|
|
9ff59ab686 | ||
|
|
fc7f88d2a2 | ||
|
|
769537fe98 | ||
|
|
f8a4f1b24f | ||
|
|
7f3b358571 | ||
|
|
c264281530 | ||
|
|
b3f20aa233 | ||
|
|
07997b24ca | ||
|
|
03859d7287 | ||
|
|
0ad2670822 | ||
|
|
ab706d2440 | ||
|
|
398faf518c | ||
|
|
edf29e7b9b | ||
|
|
485a21f13e | ||
|
|
eedec192ba | ||
|
|
cfaf8b9157 | ||
|
|
98e2145b52 | ||
|
|
466c505bb8 | ||
|
|
97c0f23c67 | ||
|
|
424c2a59d6 | ||
|
|
c9e7c12463 | ||
|
|
2ef1e623a3 | ||
|
|
1486a8901a | ||
|
|
73ae87aa57 | ||
|
|
ac72e90dcc | ||
|
|
dbf9840b26 | ||
|
|
09fe328c3f | ||
|
|
381eb664cf | ||
|
|
23c6451524 | ||
|
|
99cd78cbbf | ||
|
|
23f6832d9c | ||
|
|
bce23ebdf5 | ||
|
|
0d4b2a6e92 | ||
|
|
52567c4ade | ||
|
|
8154ae3685 | ||
|
|
7f297b4733 | ||
|
|
96451bfe9e | ||
|
|
921b08d0c9 | ||
|
|
6eff95a2b1 | ||
|
|
88dace75a1 | ||
|
|
f8bced34eb | ||
|
|
cf64ef342f | ||
|
|
c7acc9ad69 | ||
|
|
31e8986e35 | ||
|
|
050b6449d4 | ||
|
|
49dd5761f8 | ||
|
|
5215779061 | ||
|
|
48e9cd6a00 | ||
|
|
e06bfffd60 | ||
|
|
e7b08f8f2f | ||
|
|
8edaff860c | ||
|
|
d9d7068c5f | ||
|
|
e647065e63 | ||
|
|
5716207ba6 | ||
|
|
bdff71db9e | ||
|
|
9e670d318c | ||
|
|
1882d832c3 | ||
|
|
04fd197c9b | ||
|
|
edb8904474 | ||
|
|
a5fe4468d0 | ||
|
|
65d8bb8c26 | ||
|
|
cf796fb40f | ||
|
|
0ac3e91e3b | ||
|
|
e8684240a7 | ||
|
|
c1b6da771f | ||
|
|
3de51876d0 | ||
|
|
0e4d02bd10 | ||
|
|
7b06f5e9fc | ||
|
|
37b2ff02e7 | ||
|
|
1ed5389703 | ||
|
|
b6da5ce6bd | ||
|
|
ae8f40ed8d | ||
|
|
96de61ddfb | ||
|
|
9fd9719d0b | ||
|
|
f0d8e02d63 | ||
|
|
44d5ff26a4 | ||
|
|
550efcb640 | ||
|
|
15bec75167 | ||
|
|
c94d111401 | ||
|
|
6f1532adac | ||
|
|
b7fe220860 | ||
|
|
b451ece057 | ||
|
|
b56e37ad84 | ||
|
|
712567cabc | ||
|
|
017263f640 | ||
|
|
f02c222d4f | ||
|
|
66fa877198 | ||
|
|
6a9f26a68d | ||
|
|
bf817eb69e | ||
|
|
298ac1ba7a | ||
|
|
bd40f72ad5 | ||
|
|
a0eff04185 | ||
|
|
8eb140fd65 | ||
|
|
a68e82575f | ||
|
|
5035a9567b | ||
|
|
d5095362d7 | ||
|
|
3a6d7a1f7f | ||
|
|
cc6ae8ebe4 | ||
|
|
b4940a64be | ||
|
|
fca812928e | ||
|
|
4a9b4c5387 | ||
|
|
1f09f3d096 | ||
|
|
efb95937fc | ||
|
|
ce7ee1771a | ||
|
|
da216e2c22 | ||
|
|
e58ee4e0e3 | ||
|
|
66be85a41f | ||
|
|
2171dcee7f | ||
|
|
3262262a8a | ||
|
|
28b586aca7 | ||
|
|
f007b0dbde | ||
|
|
6e5950be77 | ||
|
|
eb4cd0e723 | ||
|
|
300ee820fa | ||
|
|
7d6d7942d9 | ||
|
|
05debf7e40 | ||
|
|
dc88cb5ac7 | ||
|
|
b275009544 | ||
|
|
d960481adb | ||
|
|
2986840755 | ||
|
|
9b8bae501b | ||
|
|
9ea3383fde | ||
|
|
77ac79f32c | ||
|
|
e31fae5ec5 | ||
|
|
8bff8bcbe2 | ||
|
|
cc79b1136b | ||
|
|
1af9ea9e2d | ||
|
|
814c11167e | ||
|
|
1d509a8ff8 | ||
|
|
f2232a15d9 | ||
|
|
955abcef21 | ||
|
|
9eaf153673 | ||
|
|
8e71c0f2a8 | ||
|
|
18a516ee53 | ||
|
|
f5b2420b4b | ||
|
|
f569561997 | ||
|
|
99c2911a66 | ||
|
|
a0ee6b0d58 | ||
|
|
d891c8c981 | ||
|
|
07e34fbe84 | ||
|
|
7dfd32a5c4 | ||
|
|
9c7f55d8d0 | ||
|
|
e496dc710f | ||
|
|
13cdc44caf | ||
|
|
1f3f9781d9 | ||
|
|
57ddd5086f | ||
|
|
6c1fb1bd02 | ||
|
|
ea92e92c5a | ||
|
|
96eaea7db9 | ||
|
|
bbac6e2ba6 | ||
|
|
76c6fbbfba | ||
|
|
ad1c3d4910 | ||
|
|
f2137683f9 | ||
|
|
084b86cab1 | ||
|
|
41af9c8900 | ||
|
|
2d58cfaa05 | ||
|
|
4af3072b53 | ||
|
|
a37d2ff4f8 | ||
|
|
c525939b13 | ||
|
|
dc186a57cd | ||
|
|
d97dd266b7 | ||
|
|
df9a6a0c53 | ||
|
|
fd38daf0c5 | ||
|
|
28b4f6b8fd | ||
|
|
2db50dd4a7 | ||
|
|
5cd9c11169 | ||
|
|
f8f5d6876b | ||
|
|
198674f368 | ||
|
|
e22eafc4a7 | ||
|
|
f44a322df5 | ||
|
|
fc2ac8a02b | ||
|
|
13243785f1 | ||
|
|
35c207e936 | ||
|
|
998608111f | ||
|
|
6018700421 | ||
|
|
c171547037 | ||
|
|
493b7d594d | ||
|
|
4d40c015e4 | ||
|
|
4405bc4182 | ||
|
|
54a0639a6e | ||
|
|
334b286ebf | ||
|
|
c09cb5df3d | ||
|
|
0da3661ff0 | ||
|
|
5a4ccbc066 | ||
|
|
49cbdc22da | ||
|
|
579ed0a985 | ||
|
|
464797858f | ||
|
|
0ff46bf5d0 | ||
|
|
330abe5a2d | ||
|
|
73945899fe | ||
|
|
8227a9ff9c | ||
|
|
f1c70cd896 | ||
|
|
7055292803 | ||
|
|
3503c77699 | ||
|
|
b68c64041e | ||
|
|
36066068d4 | ||
|
|
8ed174e7af | ||
|
|
7336fdf162 | ||
|
|
b5a7dd7d6d | ||
|
|
35918ae966 | ||
|
|
ce01bb59a3 | ||
|
|
18a5a966e3 | ||
|
|
833499ffe8 | ||
|
|
5b7f350ded | ||
|
|
d5fc0e9ce7 | ||
|
|
c6592faeb2 | ||
|
|
dec00cdb55 | ||
|
|
30c7c2d359 | ||
|
|
118bb5ea73 | ||
|
|
35b3d8e33a | ||
|
|
187a6dee17 | ||
|
|
0900a6bf49 | ||
|
|
6cba2e92f2 | ||
|
|
796b131f73 | ||
|
|
bdb8d62cef | ||
|
|
d049c1c244 | ||
|
|
45432a6f29 | ||
|
|
a803bd8033 | ||
|
|
0001bbc966 | ||
|
|
1ebba3ee26 | ||
|
|
fde24258e3 | ||
|
|
59c6d5b1ec | ||
|
|
33694030b7 | ||
|
|
f8f973dac2 | ||
|
|
bffabef556 | ||
|
|
325d96dabb | ||
|
|
b7b1682f42 | ||
|
|
aa2612aeba | ||
|
|
b99704082b | ||
|
|
75d8852bf7 | ||
|
|
0444ac7db9 | ||
|
|
b2684aeefc | ||
|
|
6ccc6244dd | ||
|
|
e618bf40ec | ||
|
|
e3f0a12313 | ||
|
|
687e68db69 | ||
|
|
b10e29aaac | ||
|
|
d0c92b4f8a | ||
|
|
513408f16a | ||
|
|
64326e7c9d | ||
|
|
ce9d853883 | ||
|
|
814a0e7344 | ||
|
|
2c7c0ce29d | ||
|
|
2015d08407 | ||
|
|
9dea5656ad | ||
|
|
daadf7a49b | ||
|
|
2567412121 | ||
|
|
5e4fce248c | ||
|
|
824d2d8205 | ||
|
|
9718895ff9 | ||
|
|
9eec975800 | ||
|
|
5601be87f7 | ||
|
|
440610836a | ||
|
|
4fa536b940 | ||
|
|
aeec678ce9 | ||
|
|
9591fb9330 | ||
|
|
cbfdd5dbd1 | ||
|
|
cd2fa6ed78 | ||
|
|
bef9a0c77f | ||
|
|
6af91b581b | ||
|
|
afe805bd28 | ||
|
|
6af7403738 | ||
|
|
98fe83944f | ||
|
|
37e0388a5a | ||
|
|
99510a990a | ||
|
|
ca6c62facd | ||
|
|
6e5a099834 | ||
|
|
e0b17b1496 | ||
|
|
af519b93b7 | ||
|
|
2213e3e0cf | ||
|
|
8341800a85 | ||
|
|
25f1fcc6cb | ||
|
|
d74d85a042 | ||
|
|
fcd4c9f7de | ||
|
|
25c46894b4 | ||
|
|
4a2e80aeee | ||
|
|
74a5960992 | ||
|
|
28b9dda55d | ||
|
|
3b36a35b9a | ||
|
|
b9dcf9ca12 | ||
|
|
faed3c1314 | ||
|
|
f0a85b1dd3 | ||
|
|
76f0463290 | ||
|
|
b14afaa687 | ||
|
|
14a908bf66 | ||
|
|
8f34b6b0b9 | ||
|
|
eab18a81c9 | ||
|
|
7a558d8332 | ||
|
|
fa79014585 | ||
|
|
8cf2ae7851 | ||
|
|
0708942ab8 | ||
|
|
4b4602b703 | ||
|
|
ab90a06c54 | ||
|
|
6dbf2043b9 | ||
|
|
041a166217 | ||
|
|
63ac4e2c42 | ||
|
|
77d721360f | ||
|
|
1d6299622b | ||
|
|
6f44f4245e | ||
|
|
de8fd550cb | ||
|
|
9bdb50c33e | ||
|
|
6ed33af063 | ||
|
|
a33e89fed7 | ||
|
|
b0a325f173 | ||
|
|
b7a90dd09a | ||
|
|
8d99ad3099 | ||
|
|
c49177e59c | ||
|
|
96d6be3608 | ||
|
|
aa84d04c8b | ||
|
|
c8b85202d1 | ||
|
|
af459cd19b | ||
|
|
c056d86b24 | ||
|
|
7d879bb0dc | ||
|
|
a9a55350df | ||
|
|
f019253c8e | ||
|
|
58e3d5ae09 | ||
|
|
2eb8b4fe71 | ||
|
|
989ec721d3 | ||
|
|
4fc0fd9a9a | ||
|
|
5afb98ffa7 | ||
|
|
d045429b51 | ||
|
|
c60c4ad0df | ||
|
|
78c3b25f0a | ||
|
|
13136d0ccb | ||
|
|
8faa16c831 | ||
|
|
6cdb62b67e | ||
|
|
4f774f8ba6 | ||
|
|
550a05487d | ||
|
|
bf1b8ab9b8 | ||
|
|
b74f338aa1 | ||
|
|
35aa8acd09 | ||
|
|
6a48b310d2 | ||
|
|
0b4d3446bf | ||
|
|
2b8e06faa2 | ||
|
|
c86a1123f0 | ||
|
|
e2ad1d4be0 | ||
|
|
219f084805 | ||
|
|
6f12297dcf | ||
|
|
098ff961e3 | ||
|
|
74528c6036 | ||
|
|
3324f397d9 | ||
|
|
2509405465 | ||
|
|
0f779dd682 | ||
|
|
6bf8a7707c | ||
|
|
8ff752a58b | ||
|
|
7938c9211f | ||
|
|
1f4d5b84b3 | ||
|
|
3a018888c8 | ||
|
|
a89fb734a0 | ||
|
|
b2f03dfb16 | ||
|
|
cbde6e8321 | ||
|
|
ed03449164 | ||
|
|
47a89999b8 | ||
|
|
a7dd2695a2 | ||
|
|
8035538b74 | ||
|
|
474b19d927 | ||
|
|
31ebbb3324 | ||
|
|
bddd29c99f | ||
|
|
e7116b81a4 | ||
|
|
d463161619 | ||
|
|
5116db3344 | ||
|
|
b131fbd774 | ||
|
|
324a5e10d7 | ||
|
|
69debfdefa | ||
|
|
93fccd5985 | ||
|
|
e55acf8c63 | ||
|
|
c19e358eef | ||
|
|
efe7b46021 | ||
|
|
ededd3f464 | ||
|
|
ac2aa7ea89 | ||
|
|
04c9ebd46d | ||
|
|
c3c3b80cd9 | ||
|
|
29c4394e64 | ||
|
|
76b9a1c3af | ||
|
|
6184eb6664 | ||
|
|
e413012cbb | ||
|
|
ea2e734ba8 | ||
|
|
4ee63f4ff8 | ||
|
|
946a1b751b | ||
|
|
4ab40c4489 | ||
|
|
7944ee6419 | ||
|
|
72690bfd0a | ||
|
|
0f0d0c150a | ||
|
|
3b9ac3b986 | ||
|
|
79b1bbb9e1 | ||
|
|
533b4082d8 | ||
|
|
81d955ab7d | ||
|
|
57373c9d6f | ||
|
|
bc9158a74f | ||
|
|
9f3647cd53 | ||
|
|
d294e916a4 | ||
|
|
249faffe42 | ||
|
|
3327954a34 | ||
|
|
3b76377cac | ||
|
|
9889e120bd | ||
|
|
00e0fb5798 | ||
|
|
1fd189f9b1 | ||
|
|
b73f980eb2 | ||
|
|
65ea2af4b7 | ||
|
|
8a9c6ce37a | ||
|
|
1bbe7f95d6 | ||
|
|
d09ede8d1f | ||
|
|
bcb9ab7116 | ||
|
|
75c3e62ca8 | ||
|
|
38aee33df0 | ||
|
|
2daffdf087 | ||
|
|
03d71f9764 | ||
|
|
fa906c74c0 | ||
|
|
d933d034e0 | ||
|
|
397943b222 | ||
|
|
6b41794e12 | ||
|
|
b6e5bafd65 | ||
|
|
e6c06b39e8 | ||
|
|
a25534f3de | ||
|
|
aa6c840c45 | ||
|
|
aee9314bbf | ||
|
|
3bb10bca1b | ||
|
|
1f9e4dc707 | ||
|
|
76efea87ff | ||
|
|
483ad256a8 | ||
|
|
618566abe8 | ||
|
|
1413f5d89e | ||
|
|
4cc84aed5a | ||
|
|
300e67388b | ||
|
|
2981ead41b | ||
|
|
e4960873f3 | ||
|
|
2abee211a2 | ||
|
|
65b008a493 | ||
|
|
2236d2f941 | ||
|
|
41b2b7dbf6 | ||
|
|
27c21237ff | ||
|
|
faa12abc70 | ||
|
|
7ca4c816c0 | ||
|
|
6f68628377 | ||
|
|
82a98f0e8f | ||
|
|
1939db1574 | ||
|
|
06af05708a | ||
|
|
fa2ccc1c18 | ||
|
|
b790d7d50f | ||
|
|
af5dba2e0d | ||
|
|
589cbeb559 | ||
|
|
8dbeec8b00 | ||
|
|
8f4980044a | ||
|
|
cc4470ade7 | ||
|
|
3b4c8fa49c | ||
|
|
b4d68382ce | ||
|
|
4be5c33905 | ||
|
|
88b022d742 | ||
|
|
e5b19a9374 | ||
|
|
bd6e68fe6c | ||
|
|
8e2a69af56 | ||
|
|
450c51604c | ||
|
|
d47bf4ab6b | ||
|
|
d241cce502 | ||
|
|
c466dc5999 | ||
|
|
b62cd32428 | ||
|
|
b9223dda1a | ||
|
|
b9c09b2fc2 | ||
|
|
deda796e42 | ||
|
|
55ab720695 | ||
|
|
275223ec53 | ||
|
|
f44b20bbda | ||
|
|
c96d03cc4b | ||
|
|
8cb38de7d5 | ||
|
|
d2c3fea5b9 | ||
|
|
8ee083f7c1 | ||
|
|
9a9e3c1479 | ||
|
|
48b8602c3f | ||
|
|
e1fc78bc44 | ||
|
|
65fb10059a | ||
|
|
2e8211399d | ||
|
|
6fe40ef223 | ||
|
|
3f94295d7e | ||
|
|
5c59677c57 | ||
|
|
0bd2aa9289 | ||
|
|
19d7caf1da | ||
|
|
b8d7dd170e | ||
|
|
c643e3a74f | ||
|
|
2d690ca38a | ||
|
|
c65b9fcb0b | ||
|
|
4f6f032ca2 | ||
|
|
50d20650b4 | ||
|
|
783341017f | ||
|
|
c9dc6d04ef | ||
|
|
82ad479037 | ||
|
|
0d46a65a36 | ||
|
|
7a50cd2320 | ||
|
|
5ba5e8def9 | ||
|
|
4f347d3428 | ||
|
|
d6c2fe2385 | ||
|
|
cb4643d810 | ||
|
|
d201dad535 | ||
|
|
32d8cf451a | ||
|
|
46da9866e3 | ||
|
|
534e6ac19e | ||
|
|
518af1b95c | ||
|
|
4f95ce4984 | ||
|
|
da10b34738 | ||
|
|
a9ab0a012f | ||
|
|
45a8ee7325 | ||
|
|
23451fe974 | ||
|
|
5def0e91d7 | ||
|
|
f301af5ecd | ||
|
|
dd62caf2f0 | ||
|
|
4a00971d44 | ||
|
|
bf44e512ff | ||
|
|
4e64e1ea95 | ||
|
|
026403ed38 | ||
|
|
f6bd1f0c48 | ||
|
|
66489438b9 | ||
|
|
e5a6a4f05e | ||
|
|
9e4aa9c056 | ||
|
|
4ce40891f0 | ||
|
|
46b1ac23af | ||
|
|
a5f6e64849 | ||
|
|
b9db1ac7f7 | ||
|
|
124c2acad7 | ||
|
|
2691590aa1 | ||
|
|
51cc0d5083 | ||
|
|
9c32943d73 | ||
|
|
4483ba55dd | ||
|
|
f20e0edb35 | ||
|
|
aed2180142 | ||
|
|
4913d25d18 | ||
|
|
9e181c20c7 | ||
|
|
404d934736 | ||
|
|
024c7da15b | ||
|
|
d3a5b82d93 | ||
|
|
1e3a03c463 | ||
|
|
bafbc052e2 | ||
|
|
9421ec040c | ||
|
|
07fc2e5502 | ||
|
|
9098001bcb | ||
|
|
300aff71bb | ||
|
|
d9bf199e75 | ||
|
|
6f1ed9fc16 | ||
|
|
96b496ffa8 | ||
|
|
f1b6f0cfee | ||
|
|
e19ce043d6 | ||
|
|
35a2671525 | ||
|
|
03542b400d | ||
|
|
73d24532c9 | ||
|
|
b60f964835 | ||
|
|
8e7e02a622 | ||
|
|
2c23ca33a2 | ||
|
|
69affb7a6e | ||
|
|
6a6cf14a38 | ||
|
|
e1da3b8f10 | ||
|
|
da50cd0f03 | ||
|
|
d80ffd2308 | ||
|
|
18846cf40a | ||
|
|
e81a2094df | ||
|
|
0c3970233e | ||
|
|
17011843d7 | ||
|
|
4c45e38aea | ||
|
|
e1a6188580 | ||
|
|
4e4bb01a55 | ||
|
|
e92f60afda | ||
|
|
a365cfcf9b | ||
|
|
f617828712 | ||
|
|
d85561c6fd | ||
|
|
4cba418d89 | ||
|
|
6112e5542d | ||
|
|
1b8786ab98 | ||
|
|
876361c0b2 | ||
|
|
db25894363 | ||
|
|
f1881fad71 | ||
|
|
40173b4f8e | ||
|
|
173a4cde8b | ||
|
|
d9867423de | ||
|
|
bf35b4121f | ||
|
|
85461f9be0 | ||
|
|
fafd2ab517 | ||
|
|
498eb50f56 | ||
|
|
1cdf70da0b | ||
|
|
cbd6370889 | ||
|
|
8dd6112a4b | ||
|
|
4c354277ec | ||
|
|
b8c5366c3e | ||
|
|
129415e15f | ||
|
|
68515b9d46 | ||
|
|
c948682370 | ||
|
|
5758ce2be4 | ||
|
|
27c8cb046c | ||
|
|
b6e87d1526 | ||
|
|
90dadfc5d9 | ||
|
|
edc3ab597f | ||
|
|
4372043ddb | ||
|
|
db72a64ef7 | ||
|
|
eb9315c11c | ||
|
|
b9e0739f72 | ||
|
|
29358a18b8 | ||
|
|
9c48340b9a | ||
|
|
4e4996e88f | ||
|
|
ece16200a3 | ||
|
|
bfe8979523 | ||
|
|
7228801cb0 | ||
|
|
1338bf6012 | ||
|
|
c19124fcac | ||
|
|
edde021c85 | ||
|
|
966ea45050 | ||
|
|
e7f21dea4b | ||
|
|
3276caa284 | ||
|
|
891a128736 | ||
|
|
a74ddd8527 | ||
|
|
24c48bece8 | ||
|
|
a069e92ce0 | ||
|
|
c0ab9f70dc | ||
|
|
cc17604220 | ||
|
|
9793b406e9 | ||
|
|
7a2f6eaf34 | ||
|
|
dc847ce4d6 | ||
|
|
578013fdd2 | ||
|
|
9f75d5bd23 | ||
|
|
a6d41c95b8 | ||
|
|
9da4c28cd5 | ||
|
|
0ce92cb2ee | ||
|
|
6fb530b75d | ||
|
|
5034b836ea | ||
|
|
35f3355cfe | ||
|
|
65514102cd | ||
|
|
343b65cb50 | ||
|
|
33d755d51a | ||
|
|
9750da4761 | ||
|
|
d974cecda3 | ||
|
|
5e9090a03a | ||
|
|
60b48f9e4e | ||
|
|
e8b8b015bb | ||
|
|
7021ce2ecf | ||
|
|
58e23a9773 | ||
|
|
064582f6c5 | ||
|
|
75789fc956 | ||
|
|
1c159968bf | ||
|
|
1b5231c188 | ||
|
|
dc3cbfcdd4 | ||
|
|
ee65d3f406 | ||
|
|
fc9aa03dc1 | ||
|
|
34c332d165 | ||
|
|
c57e63ff00 | ||
|
|
14502123d8 | ||
|
|
80c8d2f0c0 | ||
|
|
acccdc09f2 | ||
|
|
20e3ef9a04 | ||
|
|
db9b0dcaef | ||
|
|
97fbfeecc3 | ||
|
|
7eae636562 | ||
|
|
af87345637 | ||
|
|
85c55cd27f | ||
|
|
6e1f8d3503 | ||
|
|
60cc88bcde | ||
|
|
8b7d86df5a | ||
|
|
a5066a905e | ||
|
|
aabe641d63 | ||
|
|
06a38d836c | ||
|
|
0123dbcf5f | ||
|
|
35c5423127 | ||
|
|
7682b66034 | ||
|
|
067f22e444 | ||
|
|
f96171f529 | ||
|
|
49f06cfeb2 | ||
|
|
1bb2a3f152 | ||
|
|
7a68e1d901 | ||
|
|
7f353e88c9 | ||
|
|
2829303c74 | ||
|
|
c9bf10421b | ||
|
|
d2bcd71b32 | ||
|
|
3ea12c646a | ||
|
|
24e361dc50 | ||
|
|
381639d4a7 | ||
|
|
cf17088b0a | ||
|
|
a165445808 | ||
|
|
66d8c27b1e | ||
|
|
85f3324d97 | ||
|
|
a010a6dde5 | ||
|
|
1c49909e2c | ||
|
|
019daf5524 | ||
|
|
519ab21ba0 | ||
|
|
26286b6e36 | ||
|
|
c93bc40479 | ||
|
|
2ddb4b90c5 |
5
.gitattributes
vendored
Normal file
5
.gitattributes
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
*.sh text eol=lf
|
||||
# Treat compiled JS/CSS files as binary, as they're not meant to be human-readable
|
||||
netbox/project-static/dist/*.css binary
|
||||
netbox/project-static/dist/*.js binary
|
||||
netbox/project-static/dist/*.js.map binary
|
||||
61
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
Normal file
61
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
name: 🐛 Bug Report
|
||||
description: Report a reproducible bug in the current release of NetBox
|
||||
labels: ["type: bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**NOTE:** This form is only for reporting _reproducible bugs_ in a current NetBox
|
||||
installation. If you're having trouble with installation or just looking for
|
||||
assistance with using NetBox, please visit our
|
||||
[discussion forum](https://github.com/netbox-community/netbox/discussions) instead.
|
||||
- type: input
|
||||
attributes:
|
||||
label: NetBox version
|
||||
description: What version of NetBox are you currently running?
|
||||
placeholder: v3.6.2
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Python version
|
||||
description: What version of Python are you currently running?
|
||||
options:
|
||||
- "3.8"
|
||||
- "3.9"
|
||||
- "3.10"
|
||||
- "3.11"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to Reproduce
|
||||
description: >
|
||||
Describe in detail the exact steps that someone else can take to
|
||||
reproduce this bug using the current stable release of NetBox. Begin with the
|
||||
creation of any necessary database objects and call out every operation being
|
||||
performed explicitly. If reporting a bug in the REST API, be sure to reconstruct
|
||||
the raw HTTP request(s) being made: Don't rely on a client library such as
|
||||
pynetbox. Additionally, **do not rely on the demo instance** for reproducing
|
||||
suspected bugs, as its data is prone to modification or deletion at any time.
|
||||
placeholder: |
|
||||
1. Click on "create widget"
|
||||
2. Set foo to 12 and bar to G
|
||||
3. Click the "create" button
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected Behavior
|
||||
description: What did you expect to happen?
|
||||
placeholder: A new widget should have been created with the specified attributes
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Observed Behavior
|
||||
description: What happened instead?
|
||||
placeholder: A TypeError exception was raised
|
||||
validations:
|
||||
required: true
|
||||
15
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
15
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# Reference: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 📖 Contributing Policy
|
||||
url: https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md
|
||||
about: "Please read through our contributing policy before opening an issue or pull request."
|
||||
- name: ❓ Discussion
|
||||
url: https://github.com/netbox-community/netbox/discussions
|
||||
about: "If you're just looking for help, try starting a discussion instead."
|
||||
- name: 💡 Plugin Idea
|
||||
url: https://plugin-ideas.netbox.dev
|
||||
about: "Have an idea for a plugin? Head over to the ideas board!"
|
||||
- name: 💬 Community Slack
|
||||
url: https://netdev.chat
|
||||
about: "Join #netbox on the NetDev Community Slack for assistance with installation issues and other problems."
|
||||
24
.github/ISSUE_TEMPLATE/deprecation.yaml
vendored
Normal file
24
.github/ISSUE_TEMPLATE/deprecation.yaml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: 🗑️ Deprecation
|
||||
description: The removal of an existing feature or resource
|
||||
labels: ["type: deprecation"]
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Proposed Changes
|
||||
description: >
|
||||
Describe in detail the proposed changes. What is being removed?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Justification
|
||||
description: Please provide justification for the proposed change(s).
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Impact
|
||||
description: List all areas of the application that will be affected by this change.
|
||||
validations:
|
||||
required: true
|
||||
39
.github/ISSUE_TEMPLATE/documentation_change.yaml
vendored
Normal file
39
.github/ISSUE_TEMPLATE/documentation_change.yaml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
name: 📖 Documentation Change
|
||||
description: Suggest an addition or modification to the NetBox documentation
|
||||
labels: ["type: documentation"]
|
||||
body:
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Change Type
|
||||
description: What type of change are you proposing?
|
||||
options:
|
||||
- Addition
|
||||
- Correction
|
||||
- Removal
|
||||
- Cleanup (formatting, typos, etc.)
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Area
|
||||
description: To what section of the documentation does this change primarily pertain?
|
||||
options:
|
||||
- Features
|
||||
- Installation/upgrade
|
||||
- Getting started
|
||||
- Configuration
|
||||
- Customization
|
||||
- Integrations/API
|
||||
- Plugins
|
||||
- Administration
|
||||
- Development
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Proposed Changes
|
||||
description: Describe the proposed changes and why they are necessary.
|
||||
validations:
|
||||
required: true
|
||||
59
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
Normal file
59
.github/ISSUE_TEMPLATE/feature_request.yaml
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
name: ✨ Feature Request
|
||||
description: Propose a new NetBox feature or enhancement
|
||||
labels: ["type: feature"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**NOTE:** This form is only for submitting well-formed proposals to extend or modify
|
||||
NetBox in some way. If you're trying to solve a problem but can't figure out how, or if
|
||||
you still need time to work on the details of a proposed new feature, please start a
|
||||
[discussion](https://github.com/netbox-community/netbox/discussions) instead.
|
||||
- type: input
|
||||
attributes:
|
||||
label: NetBox version
|
||||
description: What version of NetBox are you currently running?
|
||||
placeholder: v3.6.2
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Feature type
|
||||
options:
|
||||
- Data model extension
|
||||
- New functionality
|
||||
- Change to existing functionality
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Proposed functionality
|
||||
description: >
|
||||
Describe in detail the new feature or behavior you are proposing. Include any specific changes
|
||||
to work flows, data models, and/or the user interface. The more detail you provide here, the
|
||||
greater chance your proposal has of being discussed. Feature requests which don't include an
|
||||
actionable implementation plan will be rejected.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Use case
|
||||
description: >
|
||||
Explain how adding this functionality would benefit NetBox users. What need does it address?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Database changes
|
||||
description: >
|
||||
Note any changes to the database schema necessary to support the new feature. For example,
|
||||
does the proposal require adding a new model or field? (Not all new features require database
|
||||
changes.)
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: External dependencies
|
||||
description: >
|
||||
List any new dependencies on external libraries or services that this new feature would
|
||||
introduce. For example, does the proposal require the installation of a new Python package?
|
||||
(Not all new features introduce new dependencies.)
|
||||
24
.github/ISSUE_TEMPLATE/housekeeping.yaml
vendored
Normal file
24
.github/ISSUE_TEMPLATE/housekeeping.yaml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: 🏡 Housekeeping
|
||||
description: A change pertaining to the codebase itself (developers only)
|
||||
labels: ["type: housekeeping"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >
|
||||
**NOTE:** This template is for use by maintainers only. Please do not submit
|
||||
an issue using this template unless you have been specifically asked to do so.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Proposed Changes
|
||||
description: >
|
||||
Describe in detail the new feature or behavior you'd like to propose.
|
||||
Include any specific changes to work flows, data models, or the user interface.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Justification
|
||||
description: Please provide justification for the proposed change(s).
|
||||
validations:
|
||||
required: true
|
||||
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
17
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
<!--
|
||||
Thank you for your interest in contributing to NetBox! Please note that
|
||||
our contribution policy requires that a feature request or bug report be
|
||||
approved and assigned prior to opening a pull request. This helps avoid
|
||||
waste time and effort on a proposed change that we might not be able to
|
||||
accept.
|
||||
|
||||
IF YOUR PULL REQUEST DOES NOT REFERENCE AN ISSUE WHICH HAS BEEN ASSIGNED
|
||||
TO YOU, IT WILL BE CLOSED AUTOMATICALLY.
|
||||
|
||||
Please specify your assigned issue number on the line below.
|
||||
-->
|
||||
### Fixes: #1234
|
||||
|
||||
<!--
|
||||
Please include a summary of the proposed changes below.
|
||||
-->
|
||||
84
.github/workflows/ci.yml
vendored
Normal file
84
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
name: CI
|
||||
on: [push, pull_request]
|
||||
permissions:
|
||||
contents: read
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
NETBOX_CONFIGURATION: netbox.configuration_testing
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ['3.8', '3.9', '3.10', '3.11']
|
||||
node-version: ['14.x']
|
||||
services:
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
postgres:
|
||||
image: postgres
|
||||
env:
|
||||
POSTGRES_USER: netbox
|
||||
POSTGRES_PASSWORD: netbox
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 5432:5432
|
||||
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install Yarn Package Manager
|
||||
run: npm install -g yarn
|
||||
|
||||
- name: Setup Node.js with Yarn Caching
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: yarn
|
||||
cache-dependency-path: netbox/project-static/yarn.lock
|
||||
|
||||
- name: Install Frontend Dependencies
|
||||
run: yarn --cwd netbox/project-static
|
||||
|
||||
- name: Install dependencies & set up configuration
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
pip install pycodestyle coverage tblib
|
||||
|
||||
- name: Build documentation
|
||||
run: mkdocs build
|
||||
|
||||
- name: Collect static files
|
||||
run: python netbox/manage.py collectstatic --no-input
|
||||
|
||||
- name: Check PEP8 compliance
|
||||
run: pycodestyle --ignore=W504,E501 --exclude=node_modules netbox/
|
||||
|
||||
- name: Check UI ESLint, TypeScript, and Prettier Compliance
|
||||
run: yarn --cwd netbox/project-static validate
|
||||
|
||||
- name: Validate Static Asset Integrity
|
||||
run: scripts/verify-bundles.sh
|
||||
|
||||
- name: Run tests
|
||||
run: coverage run --source="netbox/" netbox/manage.py test netbox/ --parallel
|
||||
|
||||
- name: Show coverage report
|
||||
run: coverage report --skip-covered --omit *migrations*
|
||||
21
.github/workflows/lock.yml
vendored
Normal file
21
.github/workflows/lock.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
# lock-threads (https://github.com/marketplace/actions/lock-threads)
|
||||
name: 'Lock threads'
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 3 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
lock:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: dessant/lock-threads@v3
|
||||
with:
|
||||
issue-inactive-days: 90
|
||||
pr-inactive-days: 30
|
||||
issue-lock-reason: 'resolved'
|
||||
45
.github/workflows/stale.yml
vendored
Normal file
45
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
# close-stale-issues (https://github.com/marketplace/actions/close-stale-issues)
|
||||
name: 'Close stale issues/PRs'
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 4 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v6
|
||||
with:
|
||||
close-issue-message: >
|
||||
This issue has been automatically closed due to lack of activity. In an
|
||||
effort to reduce noise, please do not comment any further. Note that the
|
||||
core maintainers may elect to reopen this issue at a later date if deemed
|
||||
necessary.
|
||||
close-pr-message: >
|
||||
This PR has been automatically closed due to lack of activity.
|
||||
days-before-stale: 90
|
||||
days-before-close: 30
|
||||
exempt-issue-labels: 'status: accepted,status: blocked,status: needs milestone'
|
||||
operations-per-run: 100
|
||||
remove-stale-when-updated: false
|
||||
stale-issue-label: 'pending closure'
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. NetBox
|
||||
is governed by a small group of core maintainers which means not all opened
|
||||
issues may receive direct feedback. **Do not** attempt to circumvent this
|
||||
process by "bumping" the issue; doing so will result in its immediate closure
|
||||
and you may be barred from participating in any future discussions. Please see
|
||||
our [contributing guide](https://github.com/netbox-community/netbox/blob/develop/CONTRIBUTING.md).
|
||||
stale-pr-label: 'pending closure'
|
||||
stale-pr-message: >
|
||||
This PR has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed automatically if no further action is
|
||||
taken.
|
||||
26
.gitignore
vendored
26
.gitignore
vendored
@@ -1,6 +1,28 @@
|
||||
*.pyc
|
||||
configuration.py
|
||||
.idea
|
||||
*.swp
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
/netbox/project-static/node_modules
|
||||
/netbox/project-static/docs/*
|
||||
!/netbox/project-static/docs/.info
|
||||
/netbox/netbox/configuration.py
|
||||
/netbox/netbox/ldap_config.py
|
||||
/netbox/local/*
|
||||
/netbox/reports/*
|
||||
!/netbox/reports/__init__.py
|
||||
/netbox/scripts/*
|
||||
!/netbox/scripts/__init__.py
|
||||
/netbox/static
|
||||
/venv/
|
||||
/*.sh
|
||||
local_requirements.txt
|
||||
!upgrade.sh
|
||||
fabfile.py
|
||||
gunicorn.py
|
||||
netbox.log
|
||||
netbox.pid
|
||||
.DS_Store
|
||||
.idea
|
||||
.coverage
|
||||
.vscode
|
||||
|
||||
10
.readthedocs.yaml
Normal file
10
.readthedocs.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
version: 2
|
||||
build:
|
||||
os: ubuntu-20.04
|
||||
tools:
|
||||
python: "3.9"
|
||||
mkdocs:
|
||||
configuration: mkdocs.yml
|
||||
python:
|
||||
install:
|
||||
- requirements: requirements.txt
|
||||
@@ -1,8 +0,0 @@
|
||||
language: python
|
||||
python:
|
||||
- "2.7"
|
||||
install:
|
||||
- pip install -r requirements.txt
|
||||
- pip install pep8
|
||||
script:
|
||||
- ./scripts/cibuild.sh
|
||||
1
CHANGELOG.md
Normal file
1
CHANGELOG.md
Normal file
@@ -0,0 +1 @@
|
||||
The changelog has been moved to the [project release notes](https://docs.netbox.dev/en/stable/release-notes/).
|
||||
150
CONTRIBUTING.md
150
CONTRIBUTING.md
@@ -1,62 +1,128 @@
|
||||
# Contributing to NetBox
|
||||
**Looking for help?** NetBox has a vast, active community of fellow users that may be able to provide assistance. Just [start a discussion](https://github.com/netbox-community/netbox/discussions/new) right here on GitHub! Or if you'd prefer to chat, join us live in the `#netbox` channel on the [NetDev Community Slack](https://netdev.chat/)!
|
||||
|
||||
Thank you for your interest in contributing to NetBox! This document contains some quick pointers on reporting bugs and
|
||||
requesting new features.
|
||||
<div align="center">
|
||||
<h3>
|
||||
:bug: <a href="#bug-reporting-bugs">Report a bug</a> ·
|
||||
:bulb: <a href="#bulb-feature-requests">Suggest a feature</a> ·
|
||||
:arrow_heading_up: <a href="#arrow_heading_up-submitting-pull-requests">Submit a pull request</a>
|
||||
</h3>
|
||||
<h3>
|
||||
:jigsaw: <a href="#jigsaw-creating-plugins">Create a plugin</a> ·
|
||||
:rescue_worker_helmet: <a href="#rescue_worker_helmet-become-a-maintainer">Become a maintainer</a> ·
|
||||
:heart: <a href="#heart-other-ways-to-contribute">Other ideas</a>
|
||||
</h3>
|
||||
</div>
|
||||
<h3></h3>
|
||||
|
||||
## Reporting Issues
|
||||
## :information_source: Welcome to the Stadium!
|
||||
|
||||
* First, ensure that you've installed the latest stable version of NetBox. If you're running an older version, it's
|
||||
possible that the bug has already been fixed.
|
||||
In her book [Working in Public](https://www.amazon.com/Working-Public-Making-Maintenance-Software/dp/0578675862), Nadia Eghbal defines four production models for open source projects, categorized by contributor and user growth: federations, clubs, toys, and stadiums. The NetBox project fits her definition of a stadium very well:
|
||||
|
||||
* Check the [issues list](https://github.com/digitalocean/netbox/issues) to see if the bug you've found has already been
|
||||
reported. If you think you may be experiencing a reported issue, please add a quick comment to it with a "+1" and a
|
||||
quick description of how it's affecting your installation.
|
||||
> Stadiums are projects with low contributor growth and high user growth. While they may receive casual contributions, their regular contributor base does not grow proportionately to their users. As a result, they tend to be powered by one or a few developers.
|
||||
|
||||
* If you're unsure whether the behavior you're seeing is expected, you can join #netbox on irc.freenode.net and ask
|
||||
before going through the trouble of submitting an issue report.
|
||||
The bulk of NetBox's development is carried out by a handful of core maintainers, with occasional contributions from collaborators in the community. We find the stadium analogy very useful in conveying the roles and obligations of both contributors and users.
|
||||
|
||||
* When submitting an issue, please be as descriptive as possible. Be sure to describe:
|
||||
If you're a contributor, actively working on the center stage, you have an obligation to produce quality content that will benefit the project as a whole. Conversely, if you're in the audience consuming the work being produced, you have the option of making requests and suggestions, but must also recognize that contributors are under no obligation to act on them.
|
||||
|
||||
* The environment in which NetBox is running
|
||||
* The exact steps that can be taken to reproduce the issue (if applicable)
|
||||
* Any error messages returned
|
||||
NetBox users are welcome to participate in either role, on stage or in the crowd. We ask only that you acknowledge the role you've chosen and respect the roles of others.
|
||||
|
||||
* Keep in mind that we prioritize bugs based on their severity and how much work is required to resolve them. It may
|
||||
take some time for someone to address your issue. If it's been longer than a week with no updates, please ping us on
|
||||
IRC.
|
||||
### General Tips for Working on GitHub
|
||||
|
||||
## Feature Requests
|
||||
* Register for a free [GitHub account](https://github.com/signup) if you haven't already.
|
||||
* You can use [GitHub Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) for formatting text and adding images.
|
||||
* To help mitigate notification spam, please avoid "bumping" issues with no activity. (To vote an issue up or down, use a :thumbsup: or :thumbsdown: reaction.)
|
||||
* Please avoid pinging members with `@` unless they've previously expressed interest or involvement with that particular issue.
|
||||
* Familiarize yourself with [this list of discussion anti-patterns](https://github.com/bradfitz/issue-tracker-behaviors) and make every effort to avoid them.
|
||||
|
||||
* First, check the [issues list](https://github.com/digitalocean/netbox/issues) to see if the feature you'd like to see
|
||||
has already been requested (and possibly rejected). If it is, be sure to comment with a "+1" and any additional
|
||||
justification you have for the feature.
|
||||
## :bug: Reporting Bugs
|
||||
|
||||
* While discussion of new features is welcome, it's important to limit the scope of NetBox's feature set to avoid
|
||||
feature creep. For example, the following features would be firmly out of scope for NetBox:
|
||||
* First, ensure that you're running the [latest stable version](https://github.com/netbox-community/netbox/releases) of NetBox. If you're running an older version, it's likely that the bug has already been fixed.
|
||||
|
||||
* Ticket management
|
||||
* Network state monitoring
|
||||
* Acting as a DNS server
|
||||
* Acting as an authentication server
|
||||
* Next, search our [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the bug you've found has already been reported. If you come across a bug report that seems to match, please click "add a reaction" in the top right corner of the issue and add a thumbs up (:thumbsup:). This will help draw more attention to it. Any comments you can add to provide additional information or context would also be much appreciated.
|
||||
|
||||
* If you're not sure whether the feature you want is a good fit for NetBox, please ask in #netbox on irc.freenode.net.
|
||||
Even if it's not quite right for NetBox, we may be able to point you to a tool better suited for the job.
|
||||
* If you can't find any existing issues (open or closed) that seem to match yours, you're welcome to [submit a new bug report](https://github.com/netbox-community/netbox/issues/new?label=type%3A+bug&template=bug_report.yaml). Be sure to complete the entire report template, including detailed steps that someone triaging your issue can follow to confirm the reported behavior. (If we're not able to replicate the bug based on the information provided, we'll ask for additional detail.)
|
||||
|
||||
* When submitting a feature request, be sure to include the following:
|
||||
* Some other tips to keep in mind:
|
||||
* Error messages and screenshots are especially helpful.
|
||||
* Don't prepend your issue title with a label like `[Bug]`; the proper label will be assigned automatically.
|
||||
* Ensure that your reproduction instructions don't reference data in our [demo instance](https://demo.netbox.dev/), which gets rebuilt nightly.
|
||||
* Verify that you have GitHub notifications enabled and are subscribed to your issue after submitting.
|
||||
* We appreciate your patience as bugs are prioritized by their severity, impact, and difficulty to resolve.
|
||||
|
||||
* A brief description of the functionality
|
||||
* A use case for the feature; who would use it and what value it would add to NetBox
|
||||
* A rough description of any changes necessary to the database schema (if applicable)
|
||||
* Any third-party libraries or other resources which would be involved
|
||||
* For more information on how bug reports are handled, please see our [issue
|
||||
intake policy](https://github.com/netbox-community/netbox/wiki/Issue-Intake-Policy).
|
||||
|
||||
## Submitting Pull Requests
|
||||
## :bulb: Feature Requests
|
||||
|
||||
* When submitting a pull request, please be sure to work off of branch `develop`, rather than branch `master`.
|
||||
In NetBox, the `develop` branch is used for ongoing development, while `master` is used for tagging new
|
||||
stable releases.
|
||||
* First, check the GitHub [issues list](https://github.com/netbox-community/netbox/issues?q=is%3Aissue) to see if the feature you have in mind has already been proposed. If you happen to find an open feature request that matches your idea, click "add a reaction" in the top right corner of the issue and add a thumbs up (:thumbsup:). This ensures that the issue has a better chance of receiving attention. Also feel free to add a comment with any additional justification for the feature.
|
||||
|
||||
* If you have a rough idea that's not quite ready for formal submission yet, start a [GitHub discussion](https://github.com/netbox-community/netbox/discussions) instead. This is a great way to test the viability and narrow down the scope of a new feature prior to submitting a formal proposal, and can serve to generate interest in your idea from other community members.
|
||||
|
||||
* Once you're ready, submit a feature request [using this template](https://github.com/netbox-community/netbox/issues/new?label=type%3A+feature&template=feature_request.yaml). Be sure to provide sufficient context and detail to convey exactly what you're proposing and why. The stronger your use case, the better chance your proposal has of being accepted.
|
||||
|
||||
* Some other tips to keep in mind:
|
||||
* Don't prepend your issue title with a label like `[Feature]`; the proper label will be assigned automatically.
|
||||
* Try to anticipate any likely questions about your proposal and provide that information proactively.
|
||||
* Verify that you have GitHub notifications enabled and are subscribed to your issue after submitting.
|
||||
* You're welcome to volunteer to implement your FR, but don't submit a pull request until it has been approved.
|
||||
|
||||
* For more information on how feature requests are handled, please see our [issue intake policy](https://github.com/netbox-community/netbox/wiki/Issue-Intake-Policy).
|
||||
|
||||
## :arrow_heading_up: Submitting Pull Requests
|
||||
|
||||
* [Pull requests](https://docs.github.com/en/pull-requests) (a feature of GitHub) are used to propose changes to NetBox's code base. Our process generally goes like this:
|
||||
* A user opens a new issue (bug report or feature request)
|
||||
* A maintainer triages the issue and may mark it as needing an owner
|
||||
* The issue's author can volunteer to own it, or someone else can
|
||||
* A maintainer assigns the issue to whomever volunteers
|
||||
* The issue owner submits a pull request that will resolve the issue
|
||||
* A maintainer reviews and merges the pull request, closing the issue
|
||||
|
||||
* It's very important that you not submit a pull request until a relevant issue has been opened **and** assigned to you. Otherwise, you risk wasting time on work that may ultimately not be needed.
|
||||
|
||||
* New pull requests should generally be based off of the `develop` branch, rather than `master`. The `develop` branch is used for ongoing development, while `master` is used for tracking stable releases. (If you're developing for an upcoming minor release, use `feature` instead.)
|
||||
|
||||
* In most cases, it is not necessary to add a changelog entry: A maintainer will take care of this when the PR is merged. (This helps avoid merge conflicts resulting from multiple PRs being submitted simultaneously.)
|
||||
|
||||
* All code submissions should meet the following criteria (CI will enforce these checks):
|
||||
* Python syntax is valid
|
||||
* All tests pass when run with `./manage.py test`
|
||||
* PEP 8 compliance is enforced, with the exception that lines may be
|
||||
greater than 80 characters in length
|
||||
|
||||
* Python syntax is valid
|
||||
* All tests pass when run with `./manage.py test netbox/`
|
||||
* PEP 8 compliance is enforced, with the exception that lines may be greater than 80 characters in length
|
||||
* Some other tips to keep in mind:
|
||||
* If you'd like to volunteer for someone else's issue, please post a comment on that issue letting us know. (This will allow the maintainers to assign it to you.)
|
||||
* Check out our [developer docs](https://docs.netbox.dev/en/stable/development/getting-started/) for tips on setting up your development environment.
|
||||
* All new functionality must include relevant tests where applicable.
|
||||
|
||||
## :jigsaw: Creating Plugins
|
||||
|
||||
Do you have an idea for something you'd like to build in NetBox, but might not be right for the core project? NetBox includes a powerful and extensive [plugins framework](https://docs.netbox.dev/en/stable/plugins/) that enables users to develop their own custom data models and integrations.
|
||||
|
||||
Check out our [plugin development tutorial](https://github.com/netbox-community/netbox-plugin-tutorial) to get started!
|
||||
|
||||
## :rescue_worker_helmet: Become a Maintainer
|
||||
|
||||
We're always looking for motivated individuals to join the maintainers team and help drive NetBox's long-term development. Some of our most sought-after skills include:
|
||||
|
||||
* Python development with a strong focus on the [Django](https://www.djangoproject.com/) framework
|
||||
* Expertise working with PostgreSQL databases
|
||||
* Javascript & TypeScript proficiency
|
||||
* A knack for web application design (HTML & CSS)
|
||||
* Familiarity with git and software development best practices
|
||||
* Excellent attention to detail
|
||||
* Working experience in the field of network operations & engineering
|
||||
|
||||
We generally ask that maintainers dedicate around four hours of work to the project each week on average, which includes both hands-on development and project management tasks such as issue triage. Maintainers are also encouraged (but not required) to attend our bi-weekly Zoom call to catch up on recent items.
|
||||
|
||||
Many maintainers petition their employer to grant some of their paid time to work on NetBox. In doing so, your employer becomes eligible to be featured as a [NetBox sponsor](https://github.com/netbox-community/netbox/wiki/Sponsorship).
|
||||
|
||||
Interested? You can contact our lead maintainer, Jeremy Stretch, at jeremy@netbox.dev or on the [NetDev Community Slack](https://netdev.chat/). We'd love to have you on the team!
|
||||
|
||||
## :heart: Other Ways to Contribute
|
||||
|
||||
You don't have to be a developer to contribute to NetBox: There are plenty of other ways you can add value to the community! Below are just a few examples:
|
||||
|
||||
* Help answer questions and provide feedback in our [GitHub discussions](https://github.com/netbox-community/netbox/discussions) and on [Slack](https://netdev.chat/).
|
||||
* Write a blog article or record a YouTube video demonstrating how NetBox is used at your organization.
|
||||
* Help grow our [library of device & module type definitions](https://github.com/netbox-community/devicetype-library).
|
||||
|
||||
7
NOTICE
Normal file
7
NOTICE
Normal file
@@ -0,0 +1,7 @@
|
||||
Copyrighted and licensed under Apache License 2.0 by DigitalOcean, LLC.
|
||||
|
||||
This project contains code developed expressly for NetBox, and its reuse in
|
||||
other projects may introduce issues affecting performance, data integrity,
|
||||
and security.
|
||||
|
||||
For more information, please see https://github.com/netbox-community/netbox.
|
||||
140
README.md
140
README.md
@@ -1,76 +1,86 @@
|
||||
# NetBox
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo.svg" width="400" alt="NetBox logo" />
|
||||
<p>The premier source of truth powering network automation</p>
|
||||
<img src="https://github.com/netbox-community/netbox/workflows/CI/badge.svg?branch=master" alt="CI status" />
|
||||
<p></p>
|
||||
</div>
|
||||
|
||||
NetBox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at [DigitalOcean](https://www.digitalocean.com/), NetBox was developed specifically to address the needs of network and infrastructure engineers.
|
||||
NetBox is the leading solution for modeling and documenting modern networks. By
|
||||
combining the traditional disciplines of IP address management (IPAM) and
|
||||
datacenter infrastructure management (DCIM) with powerful APIs and extensions,
|
||||
NetBox provides the ideal "source of truth" to power network automation.
|
||||
Available as open source software under the Apache 2.0 license, NetBox serves
|
||||
as the cornerstone for network automation in thousands of organizations.
|
||||
|
||||
NetBox runs as a web application atop the [Django](https://www.djangoproject.com/) Python framework with a [PostgreSQL](http://www.postgresql.org/) database. For a complete list of requirements, see `requirements.txt`. The code is available [on GitHub](https://github.com/digitalocean/netbox).
|
||||
* **Physical infrastructure:** Accurately model the physical world, from global regions down to individual racks of gear. Then connect everything - network, console, and power!
|
||||
* **Modern IPAM:** All the standard IPAM functionality you expect, plus VRF import/export tracking, VLAN management, and overlay support.
|
||||
* **Data circuits:** Confidently manage the delivery of critical circuits from various service providers, modeled seamlessly alongside your own infrastructure.
|
||||
* **Power tracking:** Map the distribution of power from upstream sources to individual feeds and outlets.
|
||||
* **Organization:** Manage tenant and contact assignments natively.
|
||||
* **Powerful search:** Easily find anything you need using a single global search function.
|
||||
* **Comprehensive logging:** Leverage both automatic change logging and user-submitted journal entries to track your network's growth over time.
|
||||
* **Endless customization:** Custom fields, custom links, tags, export templates, custom validation, reports, scripts, and more!
|
||||
* **Flexible permissions:** An advanced permissions systems enables very flexible delegation of permissions.
|
||||
* **Integrations:** Easily connect NetBox to your other tooling via its REST & GraphQL APIs.
|
||||
* **Plugins:** Not finding what you need in the core application? Try one of many community plugins - or build your own!
|
||||
|
||||
Questions? Comments? Please join us on IRC in **#netbox** on **irc.freenode.net**!
|
||||

|
||||
|
||||
### Build Status
|
||||
## Getting Started
|
||||
|
||||
| | python 2.7 |
|
||||
|-------------|------------|
|
||||
| **master** | [](https://travis-ci.org/digitalocean/netbox) |
|
||||
| **develop** | [](https://travis-ci.org/digitalocean/netbox) |
|
||||
<div align="center">
|
||||
|
||||
[](https://github.com/netbox-community/netbox)
|
||||
|
||||
[](https://github.com/netbox-community/netbox-docker)
|
||||
|
||||
[](https://netboxlabs.com/netbox-cloud/)
|
||||
|
||||
</div>
|
||||
|
||||
* Just want to explore? Check out [our public demo](https://demo.netbox.dev/) right now!
|
||||
* The [official documentation](https://docs.netbox.dev) offers a comprehensive introduction.
|
||||
* Check out [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for even more projects to get the most out of NetBox!
|
||||
|
||||
## Get Involved
|
||||
|
||||
* Follow [@NetBoxOfficial](https://twitter.com/NetBoxOfficial) on Twitter!
|
||||
* Join the conversation on [the discussion forum](https://github.com/netbox-community/netbox/discussions) and [Slack](https://netdev.chat/)!
|
||||
* Already a power user? You can [suggest a feature](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+feature&template=feature_request.yaml) or [report a bug](https://github.com/netbox-community/netbox/issues/new?assignees=&labels=type%3A+bug&template=bug_report.yaml) on GitHub.
|
||||
* Contributions from the community are encouraged and appreciated! Check out our [contributing guide](CONTRIBUTING.md) to get started.
|
||||
|
||||
## Project Stats
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/netbox-community/netbox/commits"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_timeline.svg" alt="Timeline graph"></a>
|
||||
<a href="https://github.com/netbox-community/netbox/issues"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_issues.svg" alt="Issues graph"></a>
|
||||
<a href="https://github.com/netbox-community/netbox/pulls"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_prs.svg" alt="Pull requests graph"></a>
|
||||
<a href="https://github.com/netbox-community/netbox/graphs/contributors"><img src="https://images.repography.com/29023055/netbox-community/netbox/recent-activity/whQtEr_TGD9PhW1BPlhlEQ5jnrgQ0KJpm-LlGtpoGO0/3Kx_iWUSBRJ5-AI4QwJEJWrUDEz3KrX2lvh8aYE0WXY_users.svg" alt="Top contributors"></a>
|
||||
<br />Stats via <a href="https://repography.com">Repography</a>
|
||||
</div>
|
||||
|
||||
## Sponsors
|
||||
|
||||
<div align="center">
|
||||
|
||||
[](https://netboxlabs.com)
|
||||
|
||||
[](https://try.digitalocean.com/developer-cloud)
|
||||
|
||||
[](https://sentry.io)
|
||||
<br />
|
||||
[](https://metal.equinix.com)
|
||||
|
||||
[](https://onemindservices.com)
|
||||
|
||||
</div>
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||
")
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
# Installation
|
||||
|
||||
Please see docs/getting-started.md for instructions on installing NetBox.
|
||||
|
||||
To upgrade NetBox, please download the [latest release](https://github.com/digitalocean/netbox/releases) and run `upgrade.sh`.
|
||||
|
||||
# Components
|
||||
|
||||
NetBox understands all of the physical and logical building blocks that comprise network infrastructure, and the manners in which they are all related.
|
||||
|
||||
## DCIM
|
||||
|
||||
DCIM comprises all the physical installations and connections which comprise a network. NetBox tracks where devices are installed, as well as their individual power, console, and network connections.
|
||||
|
||||
**Site:** A physical location (typically a building) where network devices are installed. Devices in different sites cannot be directly connected to one another.
|
||||
|
||||
**Rack:** An equipment rack into which devices are installed. Each rack belongs to a site.
|
||||
|
||||
**Device:** Any type of rack-mounted device. For example, routers, switches, servers, console servers, PDUs, etc. 0U (non-rack-mounted) devices are supported.
|
||||
|
||||
## IPAM
|
||||
|
||||
IPAM deals with the IP addressing and VLANs in use on a network. NetBox makes a distinction between IP prefixes (networks) and individual IP addresses.
|
||||
|
||||
Because NetBox is a combined DCIM/IPAM system, IP addresses can be assigned to device interfaces in the application just as they are in the real world.
|
||||
|
||||
**Aggregate:** A top-level aggregate of IP address space; for example, 10.0.0.0/8 or 2001:db8::/32. Each aggregate belongs to a regional Internet registry (RIR) like ARIN or RIPE, or to an authoritative standard such as RFC 1918.
|
||||
|
||||
**VRF:** A virtual routing table. VRF support is currently still under development.
|
||||
|
||||
**Prefix:** An IPv4 or IPv6 network. A prefix can be assigned to a VRF; if not, it is considered to belong to the global table. Prefixes are grouped by aggregates automatically and can optionally be assigned to sites.
|
||||
|
||||
**IP Address:** An individual IPv4 or IPv6 address (with CIDR mask). IP address can be assigned to device interfaces.
|
||||
|
||||
**VLAN:** VLANs are assigned to sites, and can optionally have one or more IP prefixes assigned to them. VLAN IDs are unique only within the scope of a site.
|
||||
|
||||
## Circuits
|
||||
|
||||
Long-distance data connections are typically referred to as _circuits_. NetBox provides a method for managing circuits and their providers. Individual circuits can be terminated to device interfaces.
|
||||
|
||||
**Provider:** An entity to which a network connects to. This can be a transit provider, peer, or some other organization.
|
||||
|
||||
**Circuit:** A data circuit which connects to a provider. The local end of a circuit can be assigned to a device interface.
|
||||
|
||||
## Secrets
|
||||
|
||||
NetBox provides encrypted storage of sensitive data it calls _secrets_. Each user may be issued an encryption key with which stored secrets can be retrieved.
|
||||
|
||||
Note that NetBox does not merely hash secrets, a function which is only useful for validation. It employs fully reversible AES-256 encryption so that secret data can be retrieved and consumed by other services.
|
||||
|
||||
**Secrets** Any piece of confidential data which must be retrievable. For example: passwords, SNMP communities, RADIUS shared secrets, etc.
|
||||
|
||||
**User Key:** An individual user's encrypted copy of the master key, which can be used to retrieve secret data.
|
||||

|
||||
|
||||
31
SECURITY.md
Normal file
31
SECURITY.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Security Policy
|
||||
|
||||
## No Warranty
|
||||
|
||||
Per the terms of the Apache 2 license, NetBox is offered "as is" and without any guarantee or warranty pertaining to its operation. While every reasonable effort is made by its maintainers to ensure the product remains free of security vulnerabilities, users are ultimately responsible for conducting their own evaluations of each software release.
|
||||
|
||||
## Recommendations
|
||||
|
||||
Administrators are encouraged to adhere to industry best practices concerning the secure operation of software, such as:
|
||||
|
||||
* Do not expose your NetBox installation to the public Internet
|
||||
* Do not permit multiple users to share an account
|
||||
* Enforce minimum password complexity requirements for local accounts
|
||||
* Prohibit access to your database from clients other than the NetBox application
|
||||
* Keep your deployment updated to the most recent stable release
|
||||
|
||||
## Reporting a Suspected Vulnerability
|
||||
|
||||
If you believe you've uncovered a security vulnerability and wish to report it confidentially, you may do so via email. Please note that any reported vulnerabilities **MUST** meet all the following conditions:
|
||||
|
||||
* Affects the most recent stable release of NetBox, or a current beta release
|
||||
* Affects a NetBox instance installed and configured per the official documentation
|
||||
* Is reproducible following a prescribed set of instructions
|
||||
|
||||
Please note that we **DO NOT** accept reports generated by automated tooling which merely suggest that a file or file(s) _may_ be vulnerable under certain conditions, as these are most often innocuous.
|
||||
|
||||
If you believe that you've found a vulnerability which meets all of these conditions, please [submit a draft security advisory](https://github.com/netbox-community/netbox/security/advisories/new) on GitHub, or email a brief description of the suspected bug and instructions for reproduction to **security@netbox.dev**. For any security concerns regarding NetBox deployed via Docker, please see the [netbox-docker](https://github.com/netbox-community/netbox-docker) project.
|
||||
|
||||
### Bug Bounties
|
||||
|
||||
As NetBox is provided as free open source software, we do not offer any monetary compensation for vulnerability or bug reports, however your contributions are greatly appreciated.
|
||||
145
base_requirements.txt
Normal file
145
base_requirements.txt
Normal file
@@ -0,0 +1,145 @@
|
||||
# HTML sanitizer
|
||||
# https://github.com/mozilla/bleach/blob/main/CHANGES
|
||||
bleach
|
||||
|
||||
# The Python web framework on which NetBox is built
|
||||
# https://docs.djangoproject.com/en/stable/releases/
|
||||
Django<5.0
|
||||
|
||||
# Django middleware which permits cross-domain API requests
|
||||
# https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst
|
||||
django-cors-headers
|
||||
|
||||
# Runtime UI tool for debugging Django
|
||||
# https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst
|
||||
django-debug-toolbar
|
||||
|
||||
# Library for writing reusable URL query filters
|
||||
# https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst
|
||||
django-filter
|
||||
|
||||
# Django debug toolbar extension with support for GraphiQL
|
||||
# https://github.com/flavors/django-graphiql-debug-toolbar/blob/main/CHANGES.rst
|
||||
django-graphiql-debug-toolbar
|
||||
|
||||
# Modified Preorder Tree Traversal (recursive nesting of objects)
|
||||
# https://github.com/django-mptt/django-mptt/blob/main/CHANGELOG.rst
|
||||
django-mptt
|
||||
|
||||
# Context managers for PostgreSQL advisory locks
|
||||
# https://github.com/Xof/django-pglocks/blob/master/CHANGES.txt
|
||||
django-pglocks
|
||||
|
||||
# Prometheus metrics library for Django
|
||||
# https://github.com/korfuri/django-prometheus/blob/master/CHANGELOG.md
|
||||
django-prometheus
|
||||
|
||||
# Django caching backend using Redis
|
||||
# https://github.com/jazzband/django-redis/blob/master/CHANGELOG.rst
|
||||
django-redis
|
||||
|
||||
# Django extensions for Rich (terminal text rendering)
|
||||
# https://github.com/adamchainz/django-rich/blob/main/CHANGELOG.rst
|
||||
django-rich
|
||||
|
||||
# Django integration for RQ (Reqis queuing)
|
||||
# https://github.com/rq/django-rq/blob/master/CHANGELOG.md
|
||||
django-rq
|
||||
|
||||
# Abstraction models for rendering and paginating HTML tables
|
||||
# https://github.com/jieter/django-tables2/blob/master/CHANGELOG.md
|
||||
django-tables2
|
||||
|
||||
# User-defined tags for objects
|
||||
# https://github.com/jazzband/django-taggit/blob/master/CHANGELOG.rst
|
||||
django-taggit
|
||||
|
||||
# A Django field for representing time zones
|
||||
# https://github.com/mfogel/django-timezone-field/
|
||||
django-timezone-field
|
||||
|
||||
# A REST API framework for Django projects
|
||||
# https://www.django-rest-framework.org/community/release-notes/
|
||||
djangorestframework
|
||||
|
||||
# Sane and flexible OpenAPI 3 schema generation for Django REST framework.
|
||||
# https://github.com/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst
|
||||
drf-spectacular
|
||||
|
||||
# Serve self-contained distribution builds of Swagger UI and Redoc with Django.
|
||||
# https://github.com/tfranzel/drf-spectacular-sidecar
|
||||
drf-spectacular-sidecar
|
||||
|
||||
# RSS feed parser
|
||||
# https://github.com/kurtmckee/feedparser/blob/develop/CHANGELOG.rst
|
||||
feedparser
|
||||
|
||||
# Django wrapper for Graphene (GraphQL support)
|
||||
# https://github.com/graphql-python/graphene-django/releases
|
||||
# Pinned to v3.0.0 for GraphiQL UI issue (see #12762)
|
||||
graphene_django==3.0.0
|
||||
|
||||
# WSGI HTTP server
|
||||
# https://docs.gunicorn.org/en/latest/news.html
|
||||
gunicorn
|
||||
|
||||
# Platform-agnostic template rendering engine
|
||||
# https://jinja.palletsprojects.com/changes/
|
||||
Jinja2
|
||||
|
||||
# Simple markup language for rendering HTML
|
||||
# https://python-markdown.github.io/change_log/
|
||||
# mkdocs currently requires Markdown v3.3
|
||||
Markdown<3.4
|
||||
|
||||
# File inclusion plugin for Python-Markdown
|
||||
# https://github.com/cmacmackin/markdown-include
|
||||
markdown-include
|
||||
|
||||
# MkDocs Material theme (for documentation build)
|
||||
# https://squidfunk.github.io/mkdocs-material/changelog/
|
||||
mkdocs-material
|
||||
|
||||
# Introspection for embedded code
|
||||
# https://github.com/mkdocstrings/mkdocstrings/blob/master/CHANGELOG.md
|
||||
mkdocstrings[python-legacy]
|
||||
|
||||
# Library for manipulating IP prefixes and addresses
|
||||
# https://github.com/netaddr/netaddr/blob/master/CHANGELOG
|
||||
netaddr
|
||||
|
||||
# Fork of PIL (Python Imaging Library) for image processing
|
||||
# https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst
|
||||
Pillow
|
||||
|
||||
# PostgreSQL database adapter for Python
|
||||
# https://github.com/psycopg/psycopg/blob/master/docs/news.rst
|
||||
psycopg[binary,pool]
|
||||
|
||||
# YAML rendering library
|
||||
# https://github.com/yaml/pyyaml/blob/master/CHANGES
|
||||
PyYAML
|
||||
|
||||
# Sentry SDK
|
||||
# https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md
|
||||
sentry-sdk
|
||||
|
||||
# Social authentication framework
|
||||
# https://github.com/python-social-auth/social-core/blob/master/CHANGELOG.md
|
||||
social-auth-core
|
||||
|
||||
# Django app for social-auth-core
|
||||
# https://github.com/python-social-auth/social-app-django/blob/master/CHANGELOG.md
|
||||
social-auth-app-django
|
||||
|
||||
# SVG image rendering (used for rack elevations)
|
||||
# hhttps://github.com/mozman/svgwrite/blob/master/NEWS.rst
|
||||
svgwrite
|
||||
|
||||
# Tabular dataset library (for table-based exports)
|
||||
# https://github.com/jazzband/tablib/blob/master/HISTORY.md
|
||||
tablib
|
||||
|
||||
# Timezone data (required by django-timezone-field on Python 3.9+)
|
||||
# https://github.com/python/tzdata/blob/master/NEWS.md
|
||||
tzdata
|
||||
35
contrib/apache.conf
Normal file
35
contrib/apache.conf
Normal file
@@ -0,0 +1,35 @@
|
||||
<VirtualHost *:80>
|
||||
# CHANGE THIS TO YOUR SERVER'S NAME
|
||||
ServerName netbox.example.com
|
||||
|
||||
RewriteEngine On
|
||||
RewriteCond %{HTTPS} !=on
|
||||
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
|
||||
</VirtualHost>
|
||||
|
||||
<VirtualHost *:443>
|
||||
ProxyPreserveHost On
|
||||
|
||||
# CHANGE THIS TO YOUR SERVER'S NAME
|
||||
ServerName netbox.example.com
|
||||
|
||||
SSLEngine on
|
||||
SSLCertificateFile /etc/ssl/certs/netbox.crt
|
||||
SSLCertificateKeyFile /etc/ssl/private/netbox.key
|
||||
|
||||
Alias /static /opt/netbox/netbox/static
|
||||
|
||||
<Directory /opt/netbox/netbox/static>
|
||||
Options Indexes FollowSymLinks MultiViews
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
<Location /static>
|
||||
ProxyPass !
|
||||
</Location>
|
||||
|
||||
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
|
||||
ProxyPass / http://127.0.0.1:8001/
|
||||
ProxyPassReverse / http://127.0.0.1:8001/
|
||||
</VirtualHost>
|
||||
564
contrib/generated_schema.json
Normal file
564
contrib/generated_schema.json
Normal file
@@ -0,0 +1,564 @@
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"definitions": {
|
||||
"airflow": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"front-to-rear",
|
||||
"rear-to-front",
|
||||
"left-to-right",
|
||||
"right-to-left",
|
||||
"side-to-rear",
|
||||
"passive",
|
||||
"mixed"
|
||||
]
|
||||
},
|
||||
"weight-unit": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"kg",
|
||||
"g",
|
||||
"lb",
|
||||
"oz"
|
||||
]
|
||||
},
|
||||
"subdevice-role": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"parent",
|
||||
"child"
|
||||
]
|
||||
},
|
||||
"console-port": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"de-9",
|
||||
"db-25",
|
||||
"rj-11",
|
||||
"rj-12",
|
||||
"rj-45",
|
||||
"mini-din-8",
|
||||
"usb-a",
|
||||
"usb-b",
|
||||
"usb-c",
|
||||
"usb-mini-a",
|
||||
"usb-mini-b",
|
||||
"usb-micro-a",
|
||||
"usb-micro-b",
|
||||
"usb-micro-ab",
|
||||
"other"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"console-server-port": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"de-9",
|
||||
"db-25",
|
||||
"rj-11",
|
||||
"rj-12",
|
||||
"rj-45",
|
||||
"mini-din-8",
|
||||
"usb-a",
|
||||
"usb-b",
|
||||
"usb-c",
|
||||
"usb-mini-a",
|
||||
"usb-mini-b",
|
||||
"usb-micro-a",
|
||||
"usb-micro-b",
|
||||
"usb-micro-ab",
|
||||
"other"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"power-port": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"iec-60320-c6",
|
||||
"iec-60320-c8",
|
||||
"iec-60320-c14",
|
||||
"iec-60320-c16",
|
||||
"iec-60320-c20",
|
||||
"iec-60320-c22",
|
||||
"iec-60309-p-n-e-4h",
|
||||
"iec-60309-p-n-e-6h",
|
||||
"iec-60309-p-n-e-9h",
|
||||
"iec-60309-2p-e-4h",
|
||||
"iec-60309-2p-e-6h",
|
||||
"iec-60309-2p-e-9h",
|
||||
"iec-60309-3p-e-4h",
|
||||
"iec-60309-3p-e-6h",
|
||||
"iec-60309-3p-e-9h",
|
||||
"iec-60309-3p-n-e-4h",
|
||||
"iec-60309-3p-n-e-6h",
|
||||
"iec-60309-3p-n-e-9h",
|
||||
"iec-60906-1",
|
||||
"nbr-14136-10a",
|
||||
"nbr-14136-20a",
|
||||
"nema-1-15p",
|
||||
"nema-5-15p",
|
||||
"nema-5-20p",
|
||||
"nema-5-30p",
|
||||
"nema-5-50p",
|
||||
"nema-6-15p",
|
||||
"nema-6-20p",
|
||||
"nema-6-30p",
|
||||
"nema-6-50p",
|
||||
"nema-10-30p",
|
||||
"nema-10-50p",
|
||||
"nema-14-20p",
|
||||
"nema-14-30p",
|
||||
"nema-14-50p",
|
||||
"nema-14-60p",
|
||||
"nema-15-15p",
|
||||
"nema-15-20p",
|
||||
"nema-15-30p",
|
||||
"nema-15-50p",
|
||||
"nema-15-60p",
|
||||
"nema-l1-15p",
|
||||
"nema-l5-15p",
|
||||
"nema-l5-20p",
|
||||
"nema-l5-30p",
|
||||
"nema-l5-50p",
|
||||
"nema-l6-15p",
|
||||
"nema-l6-20p",
|
||||
"nema-l6-30p",
|
||||
"nema-l6-50p",
|
||||
"nema-l10-30p",
|
||||
"nema-l14-20p",
|
||||
"nema-l14-30p",
|
||||
"nema-l14-50p",
|
||||
"nema-l14-60p",
|
||||
"nema-l15-20p",
|
||||
"nema-l15-30p",
|
||||
"nema-l15-50p",
|
||||
"nema-l15-60p",
|
||||
"nema-l21-20p",
|
||||
"nema-l21-30p",
|
||||
"nema-l22-30p",
|
||||
"cs6361c",
|
||||
"cs6365c",
|
||||
"cs8165c",
|
||||
"cs8265c",
|
||||
"cs8365c",
|
||||
"cs8465c",
|
||||
"ita-c",
|
||||
"ita-e",
|
||||
"ita-f",
|
||||
"ita-ef",
|
||||
"ita-g",
|
||||
"ita-h",
|
||||
"ita-i",
|
||||
"ita-j",
|
||||
"ita-k",
|
||||
"ita-l",
|
||||
"ita-m",
|
||||
"ita-n",
|
||||
"ita-o",
|
||||
"usb-a",
|
||||
"usb-b",
|
||||
"usb-c",
|
||||
"usb-mini-a",
|
||||
"usb-mini-b",
|
||||
"usb-micro-a",
|
||||
"usb-micro-b",
|
||||
"usb-micro-ab",
|
||||
"usb-3-b",
|
||||
"usb-3-micro-b",
|
||||
"dc-terminal",
|
||||
"saf-d-grid",
|
||||
"neutrik-powercon-20",
|
||||
"neutrik-powercon-32",
|
||||
"neutrik-powercon-true1",
|
||||
"neutrik-powercon-true1-top",
|
||||
"ubiquiti-smartpower",
|
||||
"hardwired",
|
||||
"other"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"power-outlet": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"iec-60320-c5",
|
||||
"iec-60320-c7",
|
||||
"iec-60320-c13",
|
||||
"iec-60320-c15",
|
||||
"iec-60320-c19",
|
||||
"iec-60320-c21",
|
||||
"iec-60309-p-n-e-4h",
|
||||
"iec-60309-p-n-e-6h",
|
||||
"iec-60309-p-n-e-9h",
|
||||
"iec-60309-2p-e-4h",
|
||||
"iec-60309-2p-e-6h",
|
||||
"iec-60309-2p-e-9h",
|
||||
"iec-60309-3p-e-4h",
|
||||
"iec-60309-3p-e-6h",
|
||||
"iec-60309-3p-e-9h",
|
||||
"iec-60309-3p-n-e-4h",
|
||||
"iec-60309-3p-n-e-6h",
|
||||
"iec-60309-3p-n-e-9h",
|
||||
"iec-60906-1",
|
||||
"nbr-14136-10a",
|
||||
"nbr-14136-20a",
|
||||
"nema-1-15r",
|
||||
"nema-5-15r",
|
||||
"nema-5-20r",
|
||||
"nema-5-30r",
|
||||
"nema-5-50r",
|
||||
"nema-6-15r",
|
||||
"nema-6-20r",
|
||||
"nema-6-30r",
|
||||
"nema-6-50r",
|
||||
"nema-10-30r",
|
||||
"nema-10-50r",
|
||||
"nema-14-20r",
|
||||
"nema-14-30r",
|
||||
"nema-14-50r",
|
||||
"nema-14-60r",
|
||||
"nema-15-15r",
|
||||
"nema-15-20r",
|
||||
"nema-15-30r",
|
||||
"nema-15-50r",
|
||||
"nema-15-60r",
|
||||
"nema-l1-15r",
|
||||
"nema-l5-15r",
|
||||
"nema-l5-20r",
|
||||
"nema-l5-30r",
|
||||
"nema-l5-50r",
|
||||
"nema-l6-15r",
|
||||
"nema-l6-20r",
|
||||
"nema-l6-30r",
|
||||
"nema-l6-50r",
|
||||
"nema-l10-30r",
|
||||
"nema-l14-20r",
|
||||
"nema-l14-30r",
|
||||
"nema-l14-50r",
|
||||
"nema-l14-60r",
|
||||
"nema-l15-20r",
|
||||
"nema-l15-30r",
|
||||
"nema-l15-50r",
|
||||
"nema-l15-60r",
|
||||
"nema-l21-20r",
|
||||
"nema-l21-30r",
|
||||
"nema-l22-30r",
|
||||
"CS6360C",
|
||||
"CS6364C",
|
||||
"CS8164C",
|
||||
"CS8264C",
|
||||
"CS8364C",
|
||||
"CS8464C",
|
||||
"ita-e",
|
||||
"ita-f",
|
||||
"ita-g",
|
||||
"ita-h",
|
||||
"ita-i",
|
||||
"ita-j",
|
||||
"ita-k",
|
||||
"ita-l",
|
||||
"ita-m",
|
||||
"ita-n",
|
||||
"ita-o",
|
||||
"ita-multistandard",
|
||||
"usb-a",
|
||||
"usb-micro-b",
|
||||
"usb-c",
|
||||
"dc-terminal",
|
||||
"hdot-cx",
|
||||
"saf-d-grid",
|
||||
"neutrik-powercon-20a",
|
||||
"neutrik-powercon-32a",
|
||||
"neutrik-powercon-true1",
|
||||
"neutrik-powercon-true1-top",
|
||||
"ubiquiti-smartpower",
|
||||
"hardwired",
|
||||
"other"
|
||||
]
|
||||
},
|
||||
"feed-leg": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"A",
|
||||
"B",
|
||||
"C"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"interface": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"virtual",
|
||||
"bridge",
|
||||
"lag",
|
||||
"100base-fx",
|
||||
"100base-lfx",
|
||||
"100base-tx",
|
||||
"100base-t1",
|
||||
"1000base-t",
|
||||
"2.5gbase-t",
|
||||
"5gbase-t",
|
||||
"10gbase-t",
|
||||
"10gbase-cx4",
|
||||
"1000base-x-gbic",
|
||||
"1000base-x-sfp",
|
||||
"10gbase-x-sfpp",
|
||||
"10gbase-x-xfp",
|
||||
"10gbase-x-xenpak",
|
||||
"10gbase-x-x2",
|
||||
"25gbase-x-sfp28",
|
||||
"50gbase-x-sfp56",
|
||||
"40gbase-x-qsfpp",
|
||||
"50gbase-x-sfp28",
|
||||
"100gbase-x-cfp",
|
||||
"100gbase-x-cfp2",
|
||||
"200gbase-x-cfp2",
|
||||
"400gbase-x-cfp2",
|
||||
"100gbase-x-cfp4",
|
||||
"100gbase-x-cxp",
|
||||
"100gbase-x-cpak",
|
||||
"100gbase-x-dsfp",
|
||||
"100gbase-x-sfpdd",
|
||||
"100gbase-x-qsfp28",
|
||||
"100gbase-x-qsfpdd",
|
||||
"200gbase-x-qsfp56",
|
||||
"200gbase-x-qsfpdd",
|
||||
"400gbase-x-qsfp112",
|
||||
"400gbase-x-qsfpdd",
|
||||
"400gbase-x-osfp",
|
||||
"400gbase-x-osfp-rhs",
|
||||
"400gbase-x-cdfp",
|
||||
"400gbase-x-cfp8",
|
||||
"800gbase-x-qsfpdd",
|
||||
"800gbase-x-osfp",
|
||||
"1000base-kx",
|
||||
"10gbase-kr",
|
||||
"10gbase-kx4",
|
||||
"25gbase-kr",
|
||||
"40gbase-kr4",
|
||||
"50gbase-kr",
|
||||
"100gbase-kp4",
|
||||
"100gbase-kr2",
|
||||
"100gbase-kr4",
|
||||
"ieee802.11a",
|
||||
"ieee802.11g",
|
||||
"ieee802.11n",
|
||||
"ieee802.11ac",
|
||||
"ieee802.11ad",
|
||||
"ieee802.11ax",
|
||||
"ieee802.11ay",
|
||||
"ieee802.15.1",
|
||||
"other-wireless",
|
||||
"gsm",
|
||||
"cdma",
|
||||
"lte",
|
||||
"sonet-oc3",
|
||||
"sonet-oc12",
|
||||
"sonet-oc48",
|
||||
"sonet-oc192",
|
||||
"sonet-oc768",
|
||||
"sonet-oc1920",
|
||||
"sonet-oc3840",
|
||||
"1gfc-sfp",
|
||||
"2gfc-sfp",
|
||||
"4gfc-sfp",
|
||||
"8gfc-sfpp",
|
||||
"16gfc-sfpp",
|
||||
"32gfc-sfp28",
|
||||
"64gfc-qsfpp",
|
||||
"128gfc-qsfp28",
|
||||
"infiniband-sdr",
|
||||
"infiniband-ddr",
|
||||
"infiniband-qdr",
|
||||
"infiniband-fdr10",
|
||||
"infiniband-fdr",
|
||||
"infiniband-edr",
|
||||
"infiniband-hdr",
|
||||
"infiniband-ndr",
|
||||
"infiniband-xdr",
|
||||
"t1",
|
||||
"e1",
|
||||
"t3",
|
||||
"e3",
|
||||
"xdsl",
|
||||
"docsis",
|
||||
"gpon",
|
||||
"xg-pon",
|
||||
"xgs-pon",
|
||||
"ng-pon2",
|
||||
"epon",
|
||||
"10g-epon",
|
||||
"cisco-stackwise",
|
||||
"cisco-stackwise-plus",
|
||||
"cisco-flexstack",
|
||||
"cisco-flexstack-plus",
|
||||
"cisco-stackwise-80",
|
||||
"cisco-stackwise-160",
|
||||
"cisco-stackwise-320",
|
||||
"cisco-stackwise-480",
|
||||
"cisco-stackwise-1t",
|
||||
"juniper-vcp",
|
||||
"extreme-summitstack",
|
||||
"extreme-summitstack-128",
|
||||
"extreme-summitstack-256",
|
||||
"extreme-summitstack-512",
|
||||
"other"
|
||||
]
|
||||
},
|
||||
"poe_mode": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pd",
|
||||
"pse"
|
||||
]
|
||||
},
|
||||
"poe_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"type1-ieee802.3af",
|
||||
"type2-ieee802.3at",
|
||||
"type3-ieee802.3bt",
|
||||
"type4-ieee802.3bt",
|
||||
"passive-24v-2pair",
|
||||
"passive-24v-4pair",
|
||||
"passive-48v-2pair",
|
||||
"passive-48v-4pair"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"front-port": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"8p8c",
|
||||
"8p6c",
|
||||
"8p4c",
|
||||
"8p2c",
|
||||
"6p6c",
|
||||
"6p4c",
|
||||
"6p2c",
|
||||
"4p4c",
|
||||
"4p2c",
|
||||
"gg45",
|
||||
"tera-4p",
|
||||
"tera-2p",
|
||||
"tera-1p",
|
||||
"110-punch",
|
||||
"bnc",
|
||||
"f",
|
||||
"n",
|
||||
"mrj21",
|
||||
"fc",
|
||||
"lc",
|
||||
"lc-pc",
|
||||
"lc-upc",
|
||||
"lc-apc",
|
||||
"lsh",
|
||||
"lsh-pc",
|
||||
"lsh-upc",
|
||||
"lsh-apc",
|
||||
"lx5",
|
||||
"lx5-pc",
|
||||
"lx5-upc",
|
||||
"lx5-apc",
|
||||
"mpo",
|
||||
"mtrj",
|
||||
"sc",
|
||||
"sc-pc",
|
||||
"sc-upc",
|
||||
"sc-apc",
|
||||
"st",
|
||||
"cs",
|
||||
"sn",
|
||||
"sma-905",
|
||||
"sma-906",
|
||||
"urm-p2",
|
||||
"urm-p4",
|
||||
"urm-p8",
|
||||
"splice",
|
||||
"other"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"rear-port": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"8p8c",
|
||||
"8p6c",
|
||||
"8p4c",
|
||||
"8p2c",
|
||||
"6p6c",
|
||||
"6p4c",
|
||||
"6p2c",
|
||||
"4p4c",
|
||||
"4p2c",
|
||||
"gg45",
|
||||
"tera-4p",
|
||||
"tera-2p",
|
||||
"tera-1p",
|
||||
"110-punch",
|
||||
"bnc",
|
||||
"f",
|
||||
"n",
|
||||
"mrj21",
|
||||
"fc",
|
||||
"lc",
|
||||
"lc-pc",
|
||||
"lc-upc",
|
||||
"lc-apc",
|
||||
"lsh",
|
||||
"lsh-pc",
|
||||
"lsh-upc",
|
||||
"lsh-apc",
|
||||
"lx5",
|
||||
"lx5-pc",
|
||||
"lx5-upc",
|
||||
"lx5-apc",
|
||||
"mpo",
|
||||
"mtrj",
|
||||
"sc",
|
||||
"sc-pc",
|
||||
"sc-upc",
|
||||
"sc-apc",
|
||||
"st",
|
||||
"cs",
|
||||
"sn",
|
||||
"sma-905",
|
||||
"sma-906",
|
||||
"urm-p2",
|
||||
"urm-p4",
|
||||
"urm-p8",
|
||||
"splice",
|
||||
"other"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
contrib/gunicorn.py
Normal file
16
contrib/gunicorn.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# The IP address (typically localhost) and port that the NetBox WSGI process should listen on
|
||||
bind = '127.0.0.1:8001'
|
||||
|
||||
# Number of gunicorn workers to spawn. This should typically be 2n+1, where
|
||||
# n is the number of CPU cores present.
|
||||
workers = 5
|
||||
|
||||
# Number of threads per worker process
|
||||
threads = 3
|
||||
|
||||
# Timeout (in seconds) for a request to complete
|
||||
timeout = 120
|
||||
|
||||
# The maximum number of requests a worker can handle before being respawned
|
||||
max_requests = 5000
|
||||
max_requests_jitter = 500
|
||||
17
contrib/netbox-housekeeping.service
Normal file
17
contrib/netbox-housekeeping.service
Normal file
@@ -0,0 +1,17 @@
|
||||
[Unit]
|
||||
Description=NetBox Housekeeping Service
|
||||
Documentation=https://docs.netbox.dev/
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
|
||||
User=netbox
|
||||
Group=netbox
|
||||
WorkingDirectory=/opt/netbox
|
||||
|
||||
ExecStart=/opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py housekeeping
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
9
contrib/netbox-housekeeping.sh
Executable file
9
contrib/netbox-housekeeping.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
# This shell script invokes NetBox's housekeeping management command, which
|
||||
# intended to be run nightly. This script can be copied into your system's
|
||||
# daily cron directory (e.g. /etc/cron.daily), or referenced directly from
|
||||
# within the cron configuration file.
|
||||
#
|
||||
# If NetBox has been installed into a nonstandard location, update the paths
|
||||
# below.
|
||||
/opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py housekeeping
|
||||
13
contrib/netbox-housekeeping.timer
Normal file
13
contrib/netbox-housekeeping.timer
Normal file
@@ -0,0 +1,13 @@
|
||||
[Unit]
|
||||
Description=NetBox Housekeeping Timer
|
||||
Documentation=https://docs.netbox.dev/
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Timer]
|
||||
OnCalendar=daily
|
||||
AccuracySec=1h
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
21
contrib/netbox-rq.service
Normal file
21
contrib/netbox-rq.service
Normal file
@@ -0,0 +1,21 @@
|
||||
[Unit]
|
||||
Description=NetBox Request Queue Worker
|
||||
Documentation=https://docs.netbox.dev/
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
|
||||
User=netbox
|
||||
Group=netbox
|
||||
WorkingDirectory=/opt/netbox
|
||||
|
||||
ExecStart=/opt/netbox/venv/bin/python3 /opt/netbox/netbox/manage.py rqworker high default low
|
||||
|
||||
Restart=on-failure
|
||||
RestartSec=30
|
||||
PrivateTmp=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
22
contrib/netbox.service
Normal file
22
contrib/netbox.service
Normal file
@@ -0,0 +1,22 @@
|
||||
[Unit]
|
||||
Description=NetBox WSGI Service
|
||||
Documentation=https://docs.netbox.dev/
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
|
||||
User=netbox
|
||||
Group=netbox
|
||||
PIDFile=/var/tmp/netbox.pid
|
||||
WorkingDirectory=/opt/netbox
|
||||
|
||||
ExecStart=/opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /opt/netbox/netbox --config /opt/netbox/gunicorn.py netbox.wsgi
|
||||
|
||||
Restart=on-failure
|
||||
RestartSec=30
|
||||
PrivateTmp=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
29
contrib/nginx.conf
Normal file
29
contrib/nginx.conf
Normal file
@@ -0,0 +1,29 @@
|
||||
server {
|
||||
listen [::]:443 ssl ipv6only=off;
|
||||
|
||||
# CHANGE THIS TO YOUR SERVER'S NAME
|
||||
server_name netbox.example.com;
|
||||
|
||||
ssl_certificate /etc/ssl/certs/netbox.crt;
|
||||
ssl_certificate_key /etc/ssl/private/netbox.key;
|
||||
|
||||
client_max_body_size 25m;
|
||||
|
||||
location /static/ {
|
||||
alias /opt/netbox/netbox/static/;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8001;
|
||||
proxy_set_header X-Forwarded-Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
# Redirect HTTP traffic to HTTPS
|
||||
listen [::]:80 ipv6only=off;
|
||||
server_name _;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
95605
contrib/openapi2.json
Normal file
95605
contrib/openapi2.json
Normal file
File diff suppressed because it is too large
Load Diff
69695
contrib/openapi2.yaml
Normal file
69695
contrib/openapi2.yaml
Normal file
File diff suppressed because it is too large
Load Diff
9
docs/_theme/main.html
vendored
Normal file
9
docs/_theme/main.html
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block site_meta %}
|
||||
{{ super() }}
|
||||
{# Disable search indexing unless we're building for ReadTheDocs (see #10496) #}
|
||||
{% if page.canonical_url != 'https://docs.netbox.dev/' %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
88
docs/administration/authentication/microsoft-azure-ad.md
Normal file
88
docs/administration/authentication/microsoft-azure-ad.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# Microsoft Azure AD
|
||||
|
||||
This guide explains how to configure single sign-on (SSO) support for NetBox using [Microsoft Azure Active Directory (AD)](https://azure.microsoft.com/en-us/services/active-directory/) as an authentication backend.
|
||||
|
||||
## Azure AD Configuration
|
||||
|
||||
### 1. Create a test user (optional)
|
||||
|
||||
Create a new user in AD to be used for testing. You can skip this step if you already have a suitable account created.
|
||||
|
||||
### 2. Create an app registration
|
||||
|
||||
Under the Azure Active Directory dashboard, navigate to **Add > App registration**.
|
||||
|
||||

|
||||
|
||||
Enter a name for the registration (e.g. "NetBox") and ensure that the "single tenant" option is selected.
|
||||
|
||||
Under "Redirect URI", select "Web" for the platform and enter the path to your NetBox installation, ending with `/oauth/complete/azuread-oauth2/`. Note that this URI **must** begin with `https://` unless you are referencing localhost (for development purposes).
|
||||
|
||||

|
||||
|
||||
Once finished, make note of the application (client) ID; this will be used when configuring NetBox.
|
||||
|
||||

|
||||
|
||||
!!! tip "Multitenant authentication"
|
||||
NetBox also supports multitenant authentication via Azure AD, however it requires a different backend and an additional configuration parameter. Please see the [`python-social-auth` documentation](https://python-social-auth.readthedocs.io/en/latest/backends/azuread.html#tenant-support) for details concerning multitenant authentication.
|
||||
|
||||
### 3. Create a secret
|
||||
|
||||
When viewing the newly-created app registration, click the "Add a certificate or secret" link under "Client credentials". Under the "Client secrets" tab, click the "New client secret" button.
|
||||
|
||||

|
||||
|
||||
You can optionally specify a description and select a lifetime for the secret.
|
||||
|
||||

|
||||
|
||||
Once finished, make note of the secret value (not the secret ID); this will be used when configuring NetBox.
|
||||
|
||||

|
||||
|
||||
## NetBox Configuration
|
||||
|
||||
### 1. Enter configuration parameters
|
||||
|
||||
Enter the following configuration parameters in `configuration.py`, substituting your own values:
|
||||
|
||||
```python
|
||||
REMOTE_AUTH_BACKEND = 'social_core.backends.azuread.AzureADOAuth2'
|
||||
SOCIAL_AUTH_AZUREAD_OAUTH2_KEY = '{APPLICATION_ID}'
|
||||
SOCIAL_AUTH_AZUREAD_OAUTH2_SECRET = '{SECRET_VALUE}'
|
||||
```
|
||||
|
||||
### 2. Restart NetBox
|
||||
|
||||
Restart the NetBox services so that the new configuration takes effect. This is typically done with the command below:
|
||||
|
||||
```no-highlight
|
||||
sudo systemctl restart netbox
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Log out of NetBox if already authenticated, and click the "Log In" button at top right. You should see the normal login form as well as an option to authenticate using Azure AD. Click that link.
|
||||
|
||||

|
||||
|
||||
You should be redirected to Microsoft's authentication portal. Enter the username/email and password of your test account to continue. You may also be prompted to grant this application access to your account.
|
||||
|
||||

|
||||
|
||||
If successful, you will be redirected back to the NetBox UI, and will be logged in as the AD user. You can verify this by navigating to your profile (using the button at top right).
|
||||
|
||||
This user account has been replicated locally to NetBox, and can now be assigned groups and permissions within the NetBox admin UI.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Redirect URI does not Match
|
||||
|
||||
Azure requires that the authenticating client request a redirect URI that matches what you've configured for the app in step two. This URI **must** begin with `https://` (unless using `localhost` for the domain).
|
||||
|
||||
If Azure complains that the requested URI starts with `http://` (not HTTPS), it's likely that your HTTP server is misconfigured or sitting behind a load balancer, so NetBox is not aware that HTTPS is being use. To force the use of an HTTPS redirect URI, set `SOCIAL_AUTH_REDIRECT_IS_HTTPS = True` in `configuration.py` per the [python-social-auth docs](https://python-social-auth.readthedocs.io/en/latest/configuration/settings.html#processing-redirects-and-urlopen).
|
||||
|
||||
### Not Logged in After Authenticating
|
||||
|
||||
If you are redirected to the NetBox UI after authenticating successfully, but are _not_ logged in, double-check the configured backend and app registration. The instructions in this guide pertain only to the `azuread.AzureADOAuth2` backend using a single-tenant app registration.
|
||||
70
docs/administration/authentication/okta.md
Normal file
70
docs/administration/authentication/okta.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Okta
|
||||
|
||||
This guide explains how to configure single sign-on (SSO) support for NetBox using [Okta](https://www.okta.com/) as an authentication backend.
|
||||
|
||||
## Okta Configuration
|
||||
|
||||
!!! tip "Okta developer account"
|
||||
Okta offers free developer accounts at <https://developer.okta.com/>.
|
||||
|
||||
### 1. Create a test user (optional)
|
||||
|
||||
Create a new user in the Okta admin portal to be used for testing. You can skip this step if you already have a suitable account created.
|
||||
|
||||
### 2. Create an app registration
|
||||
|
||||
Within the Okta administration dashboard, navigate to **Applications > Applications**, and click the "Create App Integration" button. Select "OIDC" as the sign-in method, and "Web application" for the application type.
|
||||
|
||||

|
||||
|
||||
On the next page, give the app integration a name (e.g. "NetBox") and specify the sign-in and sign-out URIs. These URIs should follow the formats below:
|
||||
|
||||
* Sign-in URI: `https://{netbox}/oauth/complete/okta-openidconnect/`
|
||||
* Sign-out URI: `https://{netbox}/oauth/disconnect/okta-openidconnect/`
|
||||
|
||||

|
||||
|
||||
Under "Assignments," select the controlled access setting most appropriate for your organization. Click "Save" to complete the creation.
|
||||
|
||||
Once finished, note the following parameters. These will be used to configured NetBox.
|
||||
|
||||
* Client ID
|
||||
* Client secret
|
||||
* Okta domain
|
||||
|
||||

|
||||
|
||||
## NetBox Configuration
|
||||
|
||||
### 1. Enter configuration parameters
|
||||
|
||||
Enter the following configuration parameters in `configuration.py`, substituting your own values:
|
||||
|
||||
```python
|
||||
REMOTE_AUTH_BACKEND = 'social_core.backends.okta_openidconnect.OktaOpenIdConnect'
|
||||
SOCIAL_AUTH_OKTA_OPENIDCONNECT_KEY = '{Client ID}'
|
||||
SOCIAL_AUTH_OKTA_OPENIDCONNECT_SECRET = '{Client secret}'
|
||||
SOCIAL_AUTH_OKTA_OPENIDCONNECT_API_URL = 'https://{Okta domain}/oauth2/'
|
||||
```
|
||||
|
||||
### 2. Restart NetBox
|
||||
|
||||
Restart the NetBox services so that the new configuration takes effect. This is typically done with the command below:
|
||||
|
||||
```no-highlight
|
||||
sudo systemctl restart netbox
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Log out of NetBox if already authenticated, and click the "Log In" button at top right. You should see the normal login form as well as an option to authenticate using Okta. Click that link.
|
||||
|
||||

|
||||
|
||||
You should be redirected to Okta's authentication portal. Enter the username/email and password of your test account to continue. You may also be prompted to grant this application access to your account.
|
||||
|
||||

|
||||
|
||||
If successful, you will be redirected back to the NetBox UI, and will be logged in as the Okta user. You can verify this by navigating to your profile (using the button at top right).
|
||||
|
||||
This user account has been replicated locally to NetBox, and can now be assigned groups and permissions within the NetBox admin UI.
|
||||
39
docs/administration/authentication/overview.md
Normal file
39
docs/administration/authentication/overview.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Authentication
|
||||
|
||||
## Local Authentication
|
||||
|
||||
Local user accounts and groups can be created in NetBox under the "Authentication and Authorization" section of the administrative user interface. This interface is available only to users with the "staff" permission enabled.
|
||||
|
||||
At a minimum, each user account must have a username and password set. User accounts may also denote a first name, last name, and email address. [Permissions](../permissions.md) may also be assigned to users and/or groups within the admin UI.
|
||||
|
||||
## Remote Authentication
|
||||
|
||||
NetBox may be configured to provide user authenticate via a remote backend in addition to local authentication. This is done by setting the `REMOTE_AUTH_BACKEND` configuration parameter to a suitable backend class. NetBox provides several options for remote authentication.
|
||||
|
||||
### LDAP Authentication
|
||||
|
||||
```python
|
||||
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
|
||||
```
|
||||
|
||||
NetBox includes an authentication backend which supports LDAP. See the [LDAP installation docs](../../installation/6-ldap.md) for more detail about this backend.
|
||||
|
||||
### HTTP Header Authentication
|
||||
|
||||
```python
|
||||
REMOTE_AUTH_BACKEND = 'netbox.authentication.RemoteUserBackend'
|
||||
```
|
||||
|
||||
Another option for remote authentication in NetBox is to enable HTTP header-based user assignment. The front end HTTP server (e.g. nginx or Apache) performs client authentication as a process external to NetBox, and passes information about the authenticated user via HTTP headers. By default, the user is assigned via the `REMOTE_USER` header, but this can be customized via the `REMOTE_AUTH_HEADER` configuration parameter.
|
||||
|
||||
Optionally, user profile information can be supplied by `REMOTE_USER_FIRST_NAME`, `REMOTE_USER_LAST_NAME` and `REMOTE_USER_EMAIL` headers. These are saved to the users profile during the authentication process. These headers can be customized like the `REMOTE_USER` header.
|
||||
|
||||
### Single Sign-On (SSO)
|
||||
|
||||
```python
|
||||
REMOTE_AUTH_BACKEND = 'social_core.backends.google.GoogleOAuth2'
|
||||
```
|
||||
|
||||
NetBox supports single sign-on authentication via the [python-social-auth](https://github.com/python-social-auth) library. To enable SSO, specify the path to the desired authentication backend within the `social_core` Python package. Please see the complete list of [supported authentication backends](https://github.com/python-social-auth/social-core/tree/master/social_core/backends) for the available options.
|
||||
|
||||
Most remote authentication backends require some additional configuration through settings prefixed with `SOCIAL_AUTH_`. These will be automatically imported from NetBox's `configuration.py` file. Additionally, the [authentication pipeline](https://python-social-auth.readthedocs.io/en/latest/pipeline.html) can be customized via the `SOCIAL_AUTH_PIPELINE` parameter. (NetBox's default pipeline is defined in `netbox/settings.py` for your reference.)
|
||||
46
docs/administration/error-reporting.md
Normal file
46
docs/administration/error-reporting.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Error Reporting
|
||||
|
||||
## Sentry
|
||||
|
||||
### Enabling Error Reporting
|
||||
|
||||
NetBox supports native integration with [Sentry](https://sentry.io/) for automatic error reporting. To enable this functionality, simply set `SENTRY_ENABLED` to True in `configuration.py`. Errors will be sent to a Sentry ingestor maintained by the NetBox team for analysis.
|
||||
|
||||
```python
|
||||
SENTRY_ENABLED = True
|
||||
```
|
||||
|
||||
### Using a Custom DSN
|
||||
|
||||
If you prefer instead to use your own Sentry ingestor, you'll need to first create a new project under your Sentry account to represent your NetBox deployment and obtain its corresponding data source name (DSN). This looks like a URL similar to the example below:
|
||||
|
||||
```
|
||||
https://examplePublicKey@o0.ingest.sentry.io/0
|
||||
```
|
||||
|
||||
Once you have obtained a DSN, configure Sentry in NetBox's `configuration.py` file with the following parameters:
|
||||
|
||||
```python
|
||||
SENTRY_ENABLED = True
|
||||
SENTRY_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"
|
||||
```
|
||||
|
||||
### Assigning Tags
|
||||
|
||||
You can optionally attach one or more arbitrary tags to the outgoing error reports if desired by setting the `SENTRY_TAGS` parameter:
|
||||
|
||||
```python
|
||||
SENTRY_TAGS = {
|
||||
"custom.foo": "123",
|
||||
"custom.bar": "abc",
|
||||
}
|
||||
```
|
||||
|
||||
!!! warning "Reserved tag prefixes"
|
||||
Avoid using any tag names which begin with `netbox.`, as this prefix is reserved by the NetBox application.
|
||||
|
||||
### Testing
|
||||
|
||||
Once the configuration has been saved, restart the NetBox service.
|
||||
|
||||
To test Sentry operation, try generating a 404 (page not found) error by navigating to an invalid URL, such as `https://netbox/404-error-testing`. (Be sure that debug mode has been disabled.) After receiving a 404 response from the NetBox server, you should see the issue appear shortly in Sentry.
|
||||
49
docs/administration/housekeeping.md
Normal file
49
docs/administration/housekeeping.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Housekeeping
|
||||
|
||||
NetBox includes a `housekeeping` management command that should be run nightly. This command handles:
|
||||
|
||||
* Clearing expired authentication sessions from the database
|
||||
* Deleting changelog records older than the configured [retention time](../configuration/miscellaneous.md#changelog_retention)
|
||||
* Deleting job result records older than the configured [retention time](../configuration/miscellaneous.md#job_retention)
|
||||
* Check for new NetBox releases (if [`RELEASE_CHECK_URL`](../configuration/miscellaneous.md#release_check_url) is set)
|
||||
|
||||
This command can be invoked directly, or by using the shell script provided at `/opt/netbox/contrib/netbox-housekeeping.sh`.
|
||||
|
||||
## Scheduling
|
||||
|
||||
### Using Cron
|
||||
|
||||
This script can be linked from your cron scheduler's daily jobs directory (e.g. `/etc/cron.daily`) or referenced directly within the cron configuration file.
|
||||
|
||||
```shell
|
||||
sudo ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
|
||||
```
|
||||
|
||||
!!! note
|
||||
On Debian-based systems, be sure to omit the `.sh` file extension when linking to the script from within a cron directory. Otherwise, the task may not run.
|
||||
|
||||
### Using Systemd
|
||||
|
||||
First, create symbolic links for the systemd service and timer files. Link the existing service and timer files from the `/opt/netbox/contrib/` directory to the `/etc/systemd/system/` directory:
|
||||
|
||||
```bash
|
||||
sudo ln -s /opt/netbox/contrib/netbox-housekeeping.service /etc/systemd/system/netbox-housekeeping.service
|
||||
sudo ln -s /opt/netbox/contrib/netbox-housekeeping.timer /etc/systemd/system/netbox-housekeeping.timer
|
||||
```
|
||||
|
||||
Then, reload the systemd configuration and enable the timer to start automatically at boot:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now netbox-housekeeping.timer
|
||||
```
|
||||
|
||||
Check the status of your timer by running:
|
||||
|
||||
```bash
|
||||
sudo systemctl list-timers --all
|
||||
```
|
||||
|
||||
This command will show a list of all timers, including your `netbox-housekeeping.timer`. Make sure the timer is active and properly scheduled.
|
||||
|
||||
That's it! Your NetBox housekeeping service is now configured to run daily using systemd.
|
||||
199
docs/administration/netbox-shell.md
Normal file
199
docs/administration/netbox-shell.md
Normal file
@@ -0,0 +1,199 @@
|
||||
# The NetBox Python Shell
|
||||
|
||||
NetBox includes a Python management shell within which objects can be directly queried, created, modified, and deleted. To enter the shell, run the following command:
|
||||
|
||||
```
|
||||
./manage.py nbshell
|
||||
```
|
||||
|
||||
This will launch a lightly customized version of [the built-in Django shell](https://docs.djangoproject.com/en/stable/ref/django-admin/#shell) with all relevant NetBox models pre-loaded. (If desired, the stock Django shell is also available by executing `./manage.py shell`.)
|
||||
|
||||
```
|
||||
$ ./manage.py nbshell
|
||||
### NetBox interactive shell (localhost)
|
||||
### Python 3.7.10 | Django 3.2.5 | NetBox 3.0
|
||||
### lsmodels() will show available models. Use help(<model>) for more info.
|
||||
```
|
||||
|
||||
The function `lsmodels()` will print a list of all available NetBox models:
|
||||
|
||||
```
|
||||
>>> lsmodels()
|
||||
DCIM:
|
||||
ConsolePort
|
||||
ConsolePortTemplate
|
||||
ConsoleServerPort
|
||||
ConsoleServerPortTemplate
|
||||
Device
|
||||
...
|
||||
```
|
||||
|
||||
!!! warning
|
||||
The NetBox shell affords direct access to NetBox data and function with very little validation in place. As such, it is crucial to ensure that only authorized, knowledgeable users are ever granted access to it. Never perform any action in the management shell without having a full backup in place.
|
||||
|
||||
## Querying Objects
|
||||
|
||||
Objects are retrieved from the database using a [Django queryset](https://docs.djangoproject.com/en/stable/topics/db/queries/#retrieving-objects). The base queryset for an object takes the form `<model>.objects.all()`, which will return a (truncated) list of all objects of that type.
|
||||
|
||||
```
|
||||
>>> Device.objects.all()
|
||||
<QuerySet [<Device: TestDevice1>, <Device: TestDevice2>, <Device: TestDevice3>,
|
||||
<Device: TestDevice4>, <Device: TestDevice5>, '...(remaining elements truncated)...']>
|
||||
```
|
||||
|
||||
Use a `for` loop to cycle through all objects in the list:
|
||||
|
||||
```
|
||||
>>> for device in Device.objects.all():
|
||||
... print(device.name, device.device_type)
|
||||
...
|
||||
('TestDevice1', <DeviceType: PacketThingy 9000>)
|
||||
('TestDevice2', <DeviceType: PacketThingy 9000>)
|
||||
('TestDevice3', <DeviceType: PacketThingy 9000>)
|
||||
('TestDevice4', <DeviceType: PacketThingy 9000>)
|
||||
('TestDevice5', <DeviceType: PacketThingy 9000>)
|
||||
...
|
||||
```
|
||||
|
||||
To count all objects matching the query, replace `all()` with `count()`:
|
||||
|
||||
```
|
||||
>>> Device.objects.count()
|
||||
1274
|
||||
```
|
||||
|
||||
To retrieve a particular object (typically by its primary key or other unique field), use `get()`:
|
||||
|
||||
```
|
||||
>>> Site.objects.get(pk=7)
|
||||
<Site: Test Lab>
|
||||
```
|
||||
|
||||
### Filtering Querysets
|
||||
|
||||
In most cases, you will want to retrieve only a specific subset of objects. To filter a queryset, replace `all()` with `filter()` and pass one or more keyword arguments. For example:
|
||||
|
||||
```
|
||||
>>> Device.objects.filter(status="active")
|
||||
<QuerySet [<Device: TestDevice1>, <Device: TestDevice2>, <Device: TestDevice3>,
|
||||
<Device: TestDevice8>, <Device: TestDevice9>, '...(remaining elements truncated)...']>
|
||||
```
|
||||
|
||||
Querysets support slicing to return a specific range of objects.
|
||||
|
||||
```
|
||||
>>> Device.objects.filter(status="active")[:3]
|
||||
<QuerySet [<Device: TestDevice1>, <Device: TestDevice2>, <Device: TestDevice3>]>
|
||||
```
|
||||
|
||||
The `count()` method can be appended to the queryset to return a count of objects rather than the full list.
|
||||
|
||||
```
|
||||
>>> Device.objects.filter(status="active").count()
|
||||
982
|
||||
```
|
||||
|
||||
Relationships with other models can be traversed by concatenating attribute names with a double-underscore. For example, the following will return all devices assigned to the tenant named "Pied Piper."
|
||||
|
||||
```
|
||||
>>> Device.objects.filter(tenant__name="Pied Piper")
|
||||
```
|
||||
|
||||
This approach can span multiple levels of relations. For example, the following will return all IP addresses assigned to a device in North America:
|
||||
|
||||
```
|
||||
>>> IPAddress.objects.filter(interface__device__site__region__slug="north-america")
|
||||
```
|
||||
|
||||
!!! note
|
||||
While the above query is functional, it's not very efficient. There are ways to optimize such requests, however they are out of scope for this document. For more information, see the [Django queryset method reference](https://docs.djangoproject.com/en/stable/ref/models/querysets/) documentation.
|
||||
|
||||
Reverse relationships can be traversed as well. For example, the following will find all devices with an interface named "em0":
|
||||
|
||||
```
|
||||
>>> Device.objects.filter(interfaces__name="em0")
|
||||
```
|
||||
|
||||
Character fields can be filtered against partial matches using the `contains` or `icontains` field lookup (the later of which is case-insensitive).
|
||||
|
||||
```
|
||||
>>> Device.objects.filter(name__icontains="testdevice")
|
||||
```
|
||||
|
||||
Similarly, numeric fields can be filtered by values less than, greater than, and/or equal to a given value.
|
||||
|
||||
```
|
||||
>>> VLAN.objects.filter(vid__gt=2000)
|
||||
```
|
||||
|
||||
Multiple filters can be combined to further refine a queryset.
|
||||
|
||||
```
|
||||
>>> VLAN.objects.filter(vid__gt=2000, name__icontains="engineering")
|
||||
```
|
||||
|
||||
To return the inverse of a filtered queryset, use `exclude()` instead of `filter()`.
|
||||
|
||||
```
|
||||
>>> Device.objects.count()
|
||||
4479
|
||||
>>> Device.objects.filter(status="active").count()
|
||||
4133
|
||||
>>> Device.objects.exclude(status="active").count()
|
||||
346
|
||||
```
|
||||
|
||||
!!! info
|
||||
The examples above are intended only to provide a cursory introduction to queryset filtering. For an exhaustive list of the available filters, please consult the [Django queryset API documentation](https://docs.djangoproject.com/en/stable/ref/models/querysets/).
|
||||
|
||||
## Creating and Updating Objects
|
||||
|
||||
New objects can be created by instantiating the desired model, defining values for all required attributes, and calling `save()` on the instance. For example, we can create a new VLAN by specifying its numeric ID, name, and assigned site:
|
||||
|
||||
```
|
||||
>>> lab1 = Site.objects.get(pk=7)
|
||||
>>> myvlan = VLAN(vid=123, name='MyNewVLAN', site=lab1)
|
||||
>>> myvlan.full_clean()
|
||||
>>> myvlan.save()
|
||||
```
|
||||
|
||||
To modify an existing object, we retrieve it, update the desired field(s), and call `save()` again.
|
||||
|
||||
```
|
||||
>>> vlan = VLAN.objects.get(pk=1280)
|
||||
>>> vlan.name
|
||||
'MyNewVLAN'
|
||||
>>> vlan.name = 'BetterName'
|
||||
>>> vlan.full_clean()
|
||||
>>> vlan.save()
|
||||
>>> VLAN.objects.get(pk=1280).name
|
||||
'BetterName'
|
||||
```
|
||||
|
||||
!!! warning
|
||||
The Django ORM provides methods to create/edit many objects at once, namely `bulk_create()` and `update()`. These are best avoided in most cases as they bypass a model's built-in validation and can easily lead to database corruption if not used carefully.
|
||||
|
||||
## Deleting Objects
|
||||
|
||||
To delete an object, simply call `delete()` on its instance. This will return a dictionary of all objects (including related objects) which have been deleted as a result of this operation.
|
||||
|
||||
```
|
||||
>>> vlan
|
||||
<VLAN: 123 (BetterName)>
|
||||
>>> vlan.delete()
|
||||
(1, {'ipam.VLAN': 1})
|
||||
```
|
||||
|
||||
To delete multiple objects at once, call `delete()` on a filtered queryset. It's a good idea to always sanity-check the count of selected objects _before_ deleting them.
|
||||
|
||||
```
|
||||
>>> Device.objects.filter(name__icontains='test').count()
|
||||
27
|
||||
>>> Device.objects.filter(name__icontains='test').delete()
|
||||
(35, {'dcim.DeviceBay': 0, 'dcim.InterfaceConnection': 4,
|
||||
'extras.ImageAttachment': 0, 'dcim.Device': 27, 'dcim.Interface': 4,
|
||||
'dcim.ConsolePort': 0, 'dcim.PowerPort': 0})
|
||||
```
|
||||
|
||||
!!! warning
|
||||
Deletions are immediate and irreversible. Always consider the impact of deleting objects carefully before calling `delete()` on an instance or queryset.
|
||||
115
docs/administration/permissions.md
Normal file
115
docs/administration/permissions.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# Object-Based Permissions
|
||||
|
||||
NetBox employs a new object-based permissions framework, which replaces Django's built-in permissions model. Object-based permissions enable an administrator to grant users or groups the ability to perform an action on arbitrary subsets of objects in NetBox, rather than all objects of a certain type. For example, it is possible to grant a user permission to view only sites within a particular region, or to modify only VLANs with a numeric ID within a certain range.
|
||||
|
||||
A permission in NetBox represents a relationship shared by several components:
|
||||
|
||||
* Object type(s) - One or more types of object in NetBox
|
||||
* User(s)/Group(s) - One or more users or groups of users
|
||||
* Action(s) - The action(s) that can be performed on an object
|
||||
* Constraints - An arbitrary filter used to limit the granted action(s) to a specific subset of objects
|
||||
|
||||
At a minimum, a permission assignment must specify one object type, one user or group, and one action. The specification of constraints is optional: A permission without any constraints specified will apply to all instances of the selected model(s).
|
||||
|
||||
## Actions
|
||||
|
||||
There are four core actions that can be permitted for each type of object within NetBox, roughly analogous to the CRUD convention (create, read, update, and delete):
|
||||
|
||||
* **View** - Retrieve an object from the database
|
||||
* **Add** - Create a new object
|
||||
* **Change** - Modify an existing object
|
||||
* **Delete** - Delete an existing object
|
||||
|
||||
In addition to these, permissions can also grant custom actions that may be required by a specific model or plugin. For example, the `run` permission for scripts allows a user to execute custom scripts. These can be specified when granting a permission in the "additional actions" field.
|
||||
|
||||
!!! note
|
||||
Internally, all actions granted by a permission (both built-in and custom) are stored as strings in an array field named `actions`.
|
||||
|
||||
## Constraints
|
||||
|
||||
Constraints are expressed as a JSON object or list representing a [Django query filter](https://docs.djangoproject.com/en/stable/ref/models/querysets/#field-lookups). This is the same syntax that you would pass to the QuerySet `filter()` method when performing a query using the Django ORM. As with query filters, double underscores can be used to traverse related objects or invoke lookup expressions. Some example queries and their corresponding definitions are shown below.
|
||||
|
||||
All attributes defined within a single JSON object are applied with a logical AND. For example, suppose you assign a permission for the site model with the following constraints.
|
||||
|
||||
```json
|
||||
{
|
||||
"status": "active",
|
||||
"region__name": "Americas"
|
||||
}
|
||||
```
|
||||
|
||||
The permission will grant access only to sites which have a status of "active" **and** which are assigned to the "Americas" region.
|
||||
|
||||
To achieve a logical OR with a different set of constraints, define multiple objects within a list. For example, if you want to constrain the permission to VLANs with an ID between 100 and 199 _or_ a status of "reserved," do the following:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"vid__gte": 100,
|
||||
"vid__lt": 200
|
||||
},
|
||||
{
|
||||
"status": "reserved"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Additionally, where multiple permissions have been assigned for an object type, their collective constraints will be merged using a logical "OR" operation.
|
||||
|
||||
### User Token
|
||||
|
||||
When defining a permission constraint, administrators may use the special token `$user` to reference the current user at the time of evaluation. This can be helpful to restrict users to editing only their own journal entries, for example. Such a constraint might be defined as:
|
||||
|
||||
```json
|
||||
{
|
||||
"created_by": "$user"
|
||||
}
|
||||
```
|
||||
|
||||
The `$user` token can be used only as a constraint value, or as an item within a list of values. It cannot be modified or extended to reference specific user attributes.
|
||||
|
||||
### Default Permissions
|
||||
|
||||
!!! info "This feature was introduced in NetBox v3.6."
|
||||
|
||||
While permissions are typically assigned to specific groups and/or users, it is also possible to define a set of default permissions that are applied to _all_ authenticated users. This is done using the [`DEFAULT_PERMISSIONS`](../configuration/security.md#default_permissions) configuration parameter. Note that statically configuring permissions for specific users or groups is **not** supported.
|
||||
|
||||
### Example Constraint Definitions
|
||||
|
||||
| Constraints | Description |
|
||||
| ----------- | ----------- |
|
||||
| `{"status": "active"}` | Status is active |
|
||||
| `{"status__in": ["planned", "reserved"]}` | Status is active **OR** reserved |
|
||||
| `{"status": "active", "role": "testing"}` | Status is active **AND** role is testing |
|
||||
| `{"name__startswith": "Foo"}` | Name starts with "Foo" (case-sensitive) |
|
||||
| `{"name__iendswith": "bar"}` | Name ends with "bar" (case-insensitive) |
|
||||
| `{"vid__gte": 100, "vid__lt": 200}` | VLAN ID is greater than or equal to 100 **AND** less than 200 |
|
||||
| `[{"vid__lt": 200}, {"status": "reserved"}]` | VLAN ID is less than 200 **OR** status is reserved |
|
||||
|
||||
## Permissions Enforcement
|
||||
|
||||
### Viewing Objects
|
||||
|
||||
Object-based permissions work by filtering the database query generated by a user's request to restrict the set of objects returned. When a request is received, NetBox first determines whether the user is authenticated and has been granted to perform the requested action. For example, if the requested URL is `/dcim/devices/`, NetBox will check for the `dcim.view_device` permission. If the user has not been assigned this permission (either directly or via a group assignment), NetBox will return a 403 (forbidden) HTTP response.
|
||||
|
||||
If the permission _has_ been granted, NetBox will compile any specified constraints for the model and action. For example, suppose two permissions have been assigned to the user granting view access to the device model, with the following constraints:
|
||||
|
||||
```json
|
||||
[
|
||||
{"site__name__in": ["NYC1", "NYC2"]},
|
||||
{"status": "offline", "tenant__isnull": true}
|
||||
]
|
||||
```
|
||||
|
||||
This grants the user access to view any device that is assigned to a site named NYC1 or NYC2, **or** which has a status of "offline" and has no tenant assigned. These constraints are equivalent to the following ORM query:
|
||||
|
||||
```no-highlight
|
||||
Site.objects.filter(
|
||||
Q(site__name__in=['NYC1', 'NYC2']),
|
||||
Q(status='active', tenant__isnull=True)
|
||||
)
|
||||
```
|
||||
|
||||
### Creating and Modifying Objects
|
||||
|
||||
The same sort of logic is in play when a user attempts to create or modify an object in NetBox, with a twist. Once validation has completed, NetBox starts an atomic database transaction to facilitate the change, and the object is created or saved normally. Next, still within the transaction, NetBox issues a second query to retrieve the newly created/updated object, filtering the restricted queryset with the object's primary key. If this query fails to return the object, NetBox knows that the new revision does not match the constraints imposed by the permission. The transaction is then rolled back, leaving the database in its original state prior to the change, and the user is informed of the violation.
|
||||
73
docs/administration/replicating-netbox.md
Normal file
73
docs/administration/replicating-netbox.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# Replicating NetBox
|
||||
|
||||
## Replicating the Database
|
||||
|
||||
NetBox employs a [PostgreSQL](https://www.postgresql.org/) database, so general PostgreSQL best practices apply here. The database can be written to a file and restored using the `pg_dump` and `psql` utilities, respectively.
|
||||
|
||||
!!! note
|
||||
The examples below assume that your database is named `netbox`.
|
||||
|
||||
### Export the Database
|
||||
|
||||
Use the `pg_dump` utility to export the entire database to a file:
|
||||
|
||||
```no-highlight
|
||||
pg_dump --username netbox --password --host localhost netbox > netbox.sql
|
||||
```
|
||||
|
||||
!!! note
|
||||
You may need to change the username, host, and/or database in the command above to match your installation.
|
||||
|
||||
When replicating a production database for development purposes, you may find it convenient to exclude changelog data, which can easily account for the bulk of a database's size. To do this, exclude the `extras_objectchange` table data from the export. The table will still be included in the output file, but will not be populated with any data.
|
||||
|
||||
```no-highlight
|
||||
pg_dump ... --exclude-table-data=extras_objectchange netbox > netbox.sql
|
||||
```
|
||||
|
||||
### Load an Exported Database
|
||||
|
||||
When restoring a database from a file, it's recommended to delete any existing database first to avoid potential conflicts.
|
||||
|
||||
!!! warning
|
||||
The following will destroy and replace any existing instance of the database.
|
||||
|
||||
```no-highlight
|
||||
psql -c 'drop database netbox'
|
||||
psql -c 'create database netbox'
|
||||
psql netbox < netbox.sql
|
||||
```
|
||||
|
||||
Keep in mind that PostgreSQL user accounts and permissions are not included with the dump: You will need to create those manually if you want to fully replicate the original database (see the [installation docs](../installation/1-postgresql.md)). When setting up a development instance of NetBox, it's strongly recommended to use different credentials anyway.
|
||||
|
||||
### Export the Database Schema
|
||||
|
||||
If you want to export only the database schema, and not the data itself (e.g. for development reference), do the following:
|
||||
|
||||
```no-highlight
|
||||
pg_dump --username netbox --password --host localhost -s netbox > netbox_schema.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Replicating Uploaded Media
|
||||
|
||||
By default, NetBox stores uploaded files (such as image attachments) in its media directory. To fully replicate an instance of NetBox, you'll need to copy both the database and the media files.
|
||||
|
||||
!!! note
|
||||
These operations are not necessary if your installation is utilizing a [remote storage backend](../configuration/system.md#storage_backend).
|
||||
|
||||
### Archive the Media Directory
|
||||
|
||||
Execute the following command from the root of the NetBox installation path (typically `/opt/netbox`):
|
||||
|
||||
```no-highlight
|
||||
tar -czf netbox_media.tar.gz netbox/media/
|
||||
```
|
||||
|
||||
### Restore the Media Directory
|
||||
|
||||
To extract the saved archive into a new installation, run the following from the installation root:
|
||||
|
||||
```no-highlight
|
||||
tar -xf netbox_media.tar.gz
|
||||
```
|
||||
@@ -1,36 +0,0 @@
|
||||
<h1>Circuits</h1>
|
||||
|
||||
The circuits component of NetBox deals with the management of long-haul Internet and private transit links and providers.
|
||||
|
||||
[TOC]
|
||||
|
||||
# Providers
|
||||
|
||||
A provider is any entity which provides some form of connectivity. This obviously includes carriers which offer Internet and private transit service. However, it might also include Internet exchange (IX) points and even organizations with whom you peer directly.
|
||||
|
||||
Each provider may be assigned an autonomous system number (ASN) for reference. Each provider can also be assigned account and contact information, as well as miscellaneous comments.
|
||||
|
||||
---
|
||||
|
||||
# Circuits
|
||||
|
||||
A circuit represents a single physical data link connecting two endpoints. Each circuit belongs to a provider and must be assigned circuit ID which is unique to that provider. Each circuit must also be assigned to a site, and may optionally be connected to a specific interface on a specific device within that site.
|
||||
|
||||
NetBox also tracks miscellaneous circuit attributes (most of which are optional), including:
|
||||
|
||||
* Date of installation
|
||||
* Port speed
|
||||
* Commit rate
|
||||
* Cross-connect ID
|
||||
* Patch panel information
|
||||
|
||||
### Circuit Types
|
||||
|
||||
Circuits can be classified by type. For example:
|
||||
|
||||
* Internet transit
|
||||
* Out-of-band connectivity
|
||||
* Peering
|
||||
* Private backhaul
|
||||
|
||||
Each circuit must be assigned exactly one circuit type.
|
||||
@@ -1,146 +0,0 @@
|
||||
<h1>Configuration</h1>
|
||||
|
||||
NetBox's local configuration is held in `netbox/netbox/configuration.py`. An example configuration is provided at `netbox/netbox/configuration.example.py`. You may copy or rename the example configuration and make changes as appropriate. NetBox will not run without a configuration file.
|
||||
|
||||
[TOC]
|
||||
|
||||
# Mandatory Settings
|
||||
|
||||
---
|
||||
|
||||
#### ALLOWED_HOSTS
|
||||
|
||||
This is a list of valid fully-qualified domain names (FQDNs) for the NetBox server. NetBox will not permit write access to the server via any other hostnames. The first FQDN in the list will be treated as the preferred name.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### DATABASE
|
||||
|
||||
NetBox requires access to a PostgreSQL database service to store data. This service can run locally or on a remote system. The following parameters must be defined within the `DATABASE` dictionary:
|
||||
|
||||
* NAME - Database name
|
||||
* USER - PostgreSQL username
|
||||
* PASSWORD - PostgreSQL password
|
||||
* HOST - Name or IP address of the database server (use `localhost` if running locally)
|
||||
* PORT - TCP port of the PostgreSQL service; leave blank for default port (5432)
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
DATABASE = {
|
||||
'NAME': 'netbox', # Database name
|
||||
'USER': 'netbox', # PostgreSQL username
|
||||
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
||||
'HOST': 'localhost', # Database server
|
||||
'PORT': '', # Database port (leave blank for default)
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### SECRET_KEY
|
||||
|
||||
This is a secret cryptographic key is used to improve the security of cookies and password resets. The key defined here should not be shared outside of the configuration file. `SECRET_KEY` can be changed at any time, however be aware that doing so will invalidate all existing sessions.
|
||||
|
||||
Please note that this key is **not** used for hashing user passwords or for the encrypted storage of secret data in NetBox.
|
||||
|
||||
`SECRET_KEY` should be at least 50 characters in length and contain a random mix of letters, digits, and symbols. The script located at `netbox/generate_secret_key.py` may be used to generate a suitable key.
|
||||
|
||||
# Optional Settings
|
||||
|
||||
---
|
||||
|
||||
#### ADMINS
|
||||
|
||||
NetBox will email details about critical errors to the administrators listed here. This should be a list of (name, email) tuples. For example:
|
||||
|
||||
```
|
||||
ADMINS = [
|
||||
['Hank Hill', 'hhill@example.com'],
|
||||
['Dale Gribble', 'dgribble@example.com'],
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### DEBUG
|
||||
|
||||
Default: False
|
||||
|
||||
This setting enables debugging. This should be done only during development or troubleshooting. Never enable debugging on a production system, as it can expose sensitive data to unauthenticated users.
|
||||
|
||||
---
|
||||
|
||||
#### EMAIL
|
||||
|
||||
In order to send email, NetBox needs an email server configured. The following items can be defined within the `EMAIL` setting:
|
||||
|
||||
* SERVER - Host name or IP address of the email server (use `localhost` if running locally)
|
||||
* PORT - TCP port to use for the connection (default: 25)
|
||||
* USERNAME - Username with which to authenticate
|
||||
* PASSSWORD - Password with which to authenticate
|
||||
* TIMEOUT - Amount of time to wait for a connection (seconds)
|
||||
* FROM_EMAIL - Sender address for emails sent by NetBox
|
||||
|
||||
---
|
||||
|
||||
#### LOGIN_REQUIRED
|
||||
|
||||
Default: False,
|
||||
|
||||
Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users are permitted to access most data in NetBox (excluding secrets) but not make any changes.
|
||||
|
||||
---
|
||||
|
||||
#### MAINTENANCE_MODE
|
||||
|
||||
Default: False
|
||||
|
||||
Setting this to True will display a "maintenance mode" banner at the top of every page.
|
||||
|
||||
---
|
||||
|
||||
#### NETBOX_USERNAME
|
||||
|
||||
#### NETBOX_PASSWORD
|
||||
|
||||
If provided, NetBox will use these credentials to authenticate against devices when collecting data.
|
||||
|
||||
---
|
||||
|
||||
#### PAGINATE_COUNT
|
||||
|
||||
Default: 50
|
||||
|
||||
Determine how many objects to display per page within each list of objects.
|
||||
|
||||
---
|
||||
|
||||
#### TIME_ZONE
|
||||
|
||||
Default: UTC
|
||||
|
||||
The time zone NetBox will use when dealing with dates and times. It is recommended to use UTC time unless you have a specific need to use a local time zone. [List of available time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
||||
|
||||
---
|
||||
|
||||
#### Date and Time Formatting
|
||||
|
||||
You may define custom formatting for date and times. For detailed instructions on writing format strings, please see [the Django documentation](https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date).
|
||||
|
||||
Defaults:
|
||||
|
||||
```
|
||||
DATE_FORMAT = 'N j, Y' # June 26, 2016
|
||||
SHORT_DATE_FORMAT = 'Y-m-d' # 2016-06-27
|
||||
TIME_FORMAT = 'g:i a' # 1:23 p.m.
|
||||
SHORT_TIME_FORMAT = 'H:i:s' # 13:23:00
|
||||
DATETIME_FORMAT = 'N j, Y g:i a' # June 26, 2016 1:23 p.m.
|
||||
SHORT_DATETIME_FORMAT = 'Y-m-d H:i' # 2016-06-27 13:23
|
||||
```
|
||||
89
docs/configuration/data-validation.md
Normal file
89
docs/configuration/data-validation.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# Data & Validation Parameters
|
||||
|
||||
## CUSTOM_VALIDATORS
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
This is a mapping of models to [custom validators](../customization/custom-validation.md) that have been defined locally to enforce custom validation logic. An example is provided below:
|
||||
|
||||
```python
|
||||
CUSTOM_VALIDATORS = {
|
||||
"dcim.site": [
|
||||
{
|
||||
"name": {
|
||||
"min_length": 5,
|
||||
"max_length": 30
|
||||
}
|
||||
},
|
||||
"my_plugin.validators.Validator1"
|
||||
],
|
||||
"dim.device": [
|
||||
"my_plugin.validators.Validator1"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## FIELD_CHOICES
|
||||
|
||||
Some static choice fields on models can be configured with custom values. This is done by defining `FIELD_CHOICES` as a dictionary mapping model fields to their choices. Each choice in the list must have a database value and a human-friendly label, and may optionally specify a color. (A list of available colors is provided below.)
|
||||
|
||||
The choices provided can either replace the stock choices provided by NetBox, or append to them. To _replace_ the available choices, specify the app, model, and field name separated by dots. For example, the site model would be referenced as `dcim.Site.status`. To _extend_ the available choices, append a plus sign to the end of this string (e.g. `dcim.Site.status+`).
|
||||
|
||||
For example, the following configuration would replace the default site status choices with the options Foo, Bar, and Baz:
|
||||
|
||||
```python
|
||||
FIELD_CHOICES = {
|
||||
'dcim.Site.status': (
|
||||
('foo', 'Foo', 'red'),
|
||||
('bar', 'Bar', 'green'),
|
||||
('baz', 'Baz', 'blue'),
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
Appending a plus sign to the field identifier would instead _add_ these choices to the ones already offered:
|
||||
|
||||
```python
|
||||
FIELD_CHOICES = {
|
||||
'dcim.Site.status+': (
|
||||
...
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
The following model fields support configurable choices:
|
||||
|
||||
* `circuits.Circuit.status`
|
||||
* `dcim.Device.status`
|
||||
* `dcim.Location.status`
|
||||
* `dcim.Module.status`
|
||||
* `dcim.PowerFeed.status`
|
||||
* `dcim.Rack.status`
|
||||
* `dcim.Site.status`
|
||||
* `dcim.VirtualDeviceContext.status`
|
||||
* `extras.JournalEntry.kind`
|
||||
* `ipam.IPAddress.status`
|
||||
* `ipam.IPRange.status`
|
||||
* `ipam.Prefix.status`
|
||||
* `ipam.VLAN.status`
|
||||
* `virtualization.Cluster.status`
|
||||
* `virtualization.VirtualMachine.status`
|
||||
* `wireless.WirelessLAN.status`
|
||||
|
||||
The following colors are supported:
|
||||
|
||||
* `blue`
|
||||
* `indigo`
|
||||
* `purple`
|
||||
* `pink`
|
||||
* `red`
|
||||
* `orange`
|
||||
* `yellow`
|
||||
* `green`
|
||||
* `teal`
|
||||
* `cyan`
|
||||
* `gray`
|
||||
* `black`
|
||||
* `white`
|
||||
20
docs/configuration/date-time.md
Normal file
20
docs/configuration/date-time.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Date & Time Parameters
|
||||
|
||||
## TIME_ZONE
|
||||
|
||||
Default: UTC
|
||||
|
||||
The time zone NetBox will use when dealing with dates and times. It is recommended to use UTC time unless you have a specific need to use a local time zone. Please see the [list of available time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
|
||||
|
||||
## Date and Time Formatting
|
||||
|
||||
You may define custom formatting for date and times. For detailed instructions on writing format strings, please see [the Django documentation](https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date). Default formats are listed below.
|
||||
|
||||
```python
|
||||
DATE_FORMAT = 'N j, Y' # June 26, 2016
|
||||
SHORT_DATE_FORMAT = 'Y-m-d' # 2016-06-26
|
||||
TIME_FORMAT = 'g:i a' # 1:23 p.m.
|
||||
SHORT_TIME_FORMAT = 'H:i:s' # 13:23:00
|
||||
DATETIME_FORMAT = 'N j, Y g:i a' # June 26, 2016 1:23 p.m.
|
||||
SHORT_DATETIME_FORMAT = 'Y-m-d H:i' # 2016-06-26 13:23
|
||||
```
|
||||
124
docs/configuration/default-values.md
Normal file
124
docs/configuration/default-values.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# Default Value Parameters
|
||||
|
||||
## DEFAULT_DASHBOARD
|
||||
|
||||
This parameter controls the content and layout of user's default dashboard. Once the dashboard has been created, the user is free to customize it as they please by adding, removing, and reconfiguring widgets.
|
||||
|
||||
This parameter must specify an iterable of dictionaries, each representing a discrete dashboard widget and its configuration. The follow widget attributes are supported:
|
||||
|
||||
* `widget`: Dotted path to the Python class (required)
|
||||
* `width`: Default widget width (between 1 and 12, inclusive)
|
||||
* `height`: Default widget height, in rows
|
||||
* `title`: Widget title
|
||||
* `color`: Color of the widget's title bar, specified by name
|
||||
* `config`: Dictionary mapping of any widget configuration parameters
|
||||
|
||||
A brief example configuration is provided below.
|
||||
|
||||
```python
|
||||
DEFAULT_DASHBOARD = [
|
||||
{
|
||||
'widget': 'extras.ObjectCountsWidget',
|
||||
'width': 4,
|
||||
'height': 3,
|
||||
'title': 'Organization',
|
||||
'config': {
|
||||
'models': [
|
||||
'dcim.site',
|
||||
'tenancy.tenant',
|
||||
'tenancy.contact',
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
'widget': 'extras.ObjectCountsWidget',
|
||||
'width': 4,
|
||||
'height': 3,
|
||||
'title': 'IPAM',
|
||||
'color': 'blue',
|
||||
'config': {
|
||||
'models': [
|
||||
'ipam.prefix',
|
||||
'ipam.iprange',
|
||||
'ipam.ipaddress',
|
||||
]
|
||||
}
|
||||
},
|
||||
]
|
||||
```
|
||||
|
||||
## DEFAULT_USER_PREFERENCES
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
This is a dictionary defining the default preferences to be set for newly-created user accounts. For example, to set the default page size for all users to 100, define the following:
|
||||
|
||||
```python
|
||||
DEFAULT_USER_PREFERENCES = {
|
||||
"pagination": {
|
||||
"per_page": 100
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
For a complete list of available preferences, log into NetBox and navigate to `/user/preferences/`. A period in a preference name indicates a level of nesting in the JSON data. The example above maps to `pagination.per_page`.
|
||||
|
||||
---
|
||||
|
||||
## PAGINATE_COUNT
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 50
|
||||
|
||||
The default maximum number of objects to display per page within each list of objects.
|
||||
|
||||
---
|
||||
|
||||
## POWERFEED_DEFAULT_AMPERAGE
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 15
|
||||
|
||||
The default value for the `amperage` field when creating new power feeds.
|
||||
|
||||
---
|
||||
|
||||
## POWERFEED_DEFAULT_MAX_UTILIZATION
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 80
|
||||
|
||||
The default value (percentage) for the `max_utilization` field when creating new power feeds.
|
||||
|
||||
---
|
||||
|
||||
## POWERFEED_DEFAULT_VOLTAGE
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 120
|
||||
|
||||
The default value for the `voltage` field when creating new power feeds.
|
||||
|
||||
---
|
||||
|
||||
## RACK_ELEVATION_DEFAULT_UNIT_HEIGHT
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 22
|
||||
|
||||
Default height (in pixels) of a unit within a rack elevation. For best results, this should be approximately one tenth of `RACK_ELEVATION_DEFAULT_UNIT_WIDTH`.
|
||||
|
||||
---
|
||||
|
||||
## RACK_ELEVATION_DEFAULT_UNIT_WIDTH
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 220
|
||||
|
||||
Default width (in pixels) of a unit within a rack elevation.
|
||||
21
docs/configuration/development.md
Normal file
21
docs/configuration/development.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Development Parameters
|
||||
|
||||
## DEBUG
|
||||
|
||||
Default: False
|
||||
|
||||
This setting enables debugging. Debugging should be enabled only during development or troubleshooting. Note that only
|
||||
clients which access NetBox from a recognized [internal IP address](#internal_ips) will see debugging tools in the user
|
||||
interface.
|
||||
|
||||
!!! warning
|
||||
Never enable debugging on a production system, as it can expose sensitive data to unauthenticated users and impose a
|
||||
substantial performance penalty.
|
||||
|
||||
---
|
||||
|
||||
## DEVELOPER
|
||||
|
||||
Default: False
|
||||
|
||||
This parameter serves as a safeguard to prevent some potentially dangerous behavior, such as generating new database schema migrations. Additionally, enabling this setting disables the debug warning banner in the UI. Set this to `True` **only** if you are actively developing the NetBox code base.
|
||||
54
docs/configuration/error-reporting.md
Normal file
54
docs/configuration/error-reporting.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Error Reporting Settings
|
||||
|
||||
## SENTRY_DSN
|
||||
|
||||
Default: None
|
||||
|
||||
Defines a Sentry data source name (DSN) for automated error reporting. `SENTRY_ENABLED` must be True for this parameter to take effect. For example:
|
||||
|
||||
```
|
||||
SENTRY_DSN = "https://examplePublicKey@o0.ingest.sentry.io/0"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## SENTRY_ENABLED
|
||||
|
||||
Default: False
|
||||
|
||||
Set to True to enable automatic error reporting via [Sentry](https://sentry.io/).
|
||||
|
||||
---
|
||||
|
||||
## SENTRY_SAMPLE_RATE
|
||||
|
||||
Default: 1.0 (all)
|
||||
|
||||
The sampling rate for errors. Must be a value between 0 (disabled) and 1.0 (report on all errors).
|
||||
|
||||
---
|
||||
|
||||
## SENTRY_TAGS
|
||||
|
||||
An optional dictionary of tag names and values to apply to Sentry error reports.For example:
|
||||
|
||||
```
|
||||
SENTRY_TAGS = {
|
||||
"custom.foo": "123",
|
||||
"custom.bar": "abc",
|
||||
}
|
||||
```
|
||||
|
||||
!!! warning "Reserved tag prefixes"
|
||||
Avoid using any tag names which begin with `netbox.`, as this prefix is reserved by the NetBox application.
|
||||
|
||||
---
|
||||
|
||||
## SENTRY_TRACES_SAMPLE_RATE
|
||||
|
||||
Default: 0 (disabled)
|
||||
|
||||
The sampling rate for transactions. Must be a value between 0 (disabled) and 1.0 (report on all transactions).
|
||||
|
||||
!!! warning "Consider performance implications"
|
||||
A high sampling rate for transactions can induce significant performance penalties. If transaction reporting is desired, it is recommended to use a relatively low sample rate of 10% to 20% (0.1 to 0.2).
|
||||
49
docs/configuration/index.md
Normal file
49
docs/configuration/index.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# NetBox Configuration
|
||||
|
||||
## Configuration File
|
||||
|
||||
NetBox's configuration file contains all the important parameters which control how NetBox functions: database settings, security controls, user preferences, and so on. While the default configuration suffices out of the box for most use cases, there are a few [required parameters](./required-parameters.md) which **must** be defined during installation.
|
||||
|
||||
The configuration file is loaded from `$INSTALL_ROOT/netbox/netbox/configuration.py` by default. An example configuration is provided at `configuration_example.py`, which you may copy to use as your default config. Note that a configuration file must be defined; NetBox will not run without one.
|
||||
|
||||
!!! info "Customizing the Configuration Module"
|
||||
A custom configuration module may be specified by setting the `NETBOX_CONFIGURATION` environment variable. This must be a dotted path to the desired Python module. For example, a file named `my_config.py` in the same directory as `settings.py` would be referenced as `netbox.my_config`.
|
||||
|
||||
To keep things simple, the NetBox documentation refers to the configuration file simply as `configuration.py`.
|
||||
|
||||
Some configuration parameters may alternatively be defined either in `configuration.py` or within the administrative section of the user interface. Settings which are "hard-coded" in the configuration file take precedence over those defined via the UI.
|
||||
|
||||
## Dynamic Configuration Parameters
|
||||
|
||||
Some configuration parameters are primarily controlled via NetBox's admin interface (under Admin > Extras > Configuration Revisions). These are noted where applicable in the documentation. These settings may also be overridden in `configuration.py` to prevent them from being modified via the UI. A complete list of supported parameters is provided below:
|
||||
|
||||
* [`ALLOWED_URL_SCHEMES`](./security.md#allowed_url_schemes)
|
||||
* [`BANNER_BOTTOM`](./miscellaneous.md#banner_bottom)
|
||||
* [`BANNER_LOGIN`](./miscellaneous.md#banner_login)
|
||||
* [`BANNER_TOP`](./miscellaneous.md#banner_top)
|
||||
* [`CHANGELOG_RETENTION`](./miscellaneous.md#changelog_retention)
|
||||
* [`CUSTOM_VALIDATORS`](./data-validation.md#custom_validators)
|
||||
* [`DEFAULT_USER_PREFERENCES`](./default-values.md#default_user_preferences)
|
||||
* [`ENFORCE_GLOBAL_UNIQUE`](./miscellaneous.md#enforce_global_unique)
|
||||
* [`GRAPHQL_ENABLED`](./miscellaneous.md#graphql_enabled)
|
||||
* [`JOB_RETENTION`](./miscellaneous.md#job_retention)
|
||||
* [`MAINTENANCE_MODE`](./miscellaneous.md#maintenance_mode)
|
||||
* [`MAPS_URL`](./miscellaneous.md#maps_url)
|
||||
* [`MAX_PAGE_SIZE`](./miscellaneous.md#max_page_size)
|
||||
* [`PAGINATE_COUNT`](./default-values.md#paginate_count)
|
||||
* [`POWERFEED_DEFAULT_AMPERAGE`](./default-values.md#powerfeed_default_amperage)
|
||||
* [`POWERFEED_DEFAULT_MAX_UTILIZATION`](./default-values.md#powerfeed_default_max_utilization)
|
||||
* [`POWERFEED_DEFAULT_VOLTAGE`](./default-values.md#powerfeed_default_voltage)
|
||||
* [`PREFER_IPV4`](./miscellaneous.md#prefer_ipv4)
|
||||
* [`RACK_ELEVATION_DEFAULT_UNIT_HEIGHT`](./default-values.md#rack_elevation_default_unit_height)
|
||||
* [`RACK_ELEVATION_DEFAULT_UNIT_WIDTH`](./default-values.md#rack_elevation_default_unit_width)
|
||||
|
||||
## Modifying the Configuration
|
||||
|
||||
The configuration file may be modified at any time. However, the WSGI service (e.g. Gunicorn) must be restarted before these changes will take effect:
|
||||
|
||||
```no-highlight
|
||||
$ sudo systemctl restart netbox
|
||||
```
|
||||
|
||||
Configuration parameters which are set via the admin UI (those listed under "dynamic settings") take effect immediately.
|
||||
228
docs/configuration/miscellaneous.md
Normal file
228
docs/configuration/miscellaneous.md
Normal file
@@ -0,0 +1,228 @@
|
||||
# Miscellaneous Parameters
|
||||
|
||||
## ADMINS
|
||||
|
||||
NetBox will email details about critical errors to the administrators listed here. This should be a list of (name, email) tuples. For example:
|
||||
|
||||
```python
|
||||
ADMINS = [
|
||||
['Hank Hill', 'hhill@example.com'],
|
||||
['Dale Gribble', 'dgribble@example.com'],
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## BANNER_BOTTOM
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Sets content for the bottom banner in the user interface.
|
||||
|
||||
---
|
||||
|
||||
## BANNER_LOGIN
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
This defines custom content to be displayed on the login page above the login form. HTML is allowed.
|
||||
|
||||
---
|
||||
|
||||
## BANNER_MAINTENANCE
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
!!! note
|
||||
This parameter was added in NetBox v3.5.
|
||||
|
||||
This adds a banner to the top of every page when maintenance mode is enabled. HTML is allowed.
|
||||
|
||||
---
|
||||
|
||||
## BANNER_TOP
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Sets content for the top banner in the user interface.
|
||||
|
||||
!!! tip
|
||||
If you'd like the top and bottom banners to match, set the following:
|
||||
|
||||
```python
|
||||
BANNER_TOP = 'Your banner text'
|
||||
BANNER_BOTTOM = BANNER_TOP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## CENSUS_REPORTING_ENABLED
|
||||
|
||||
Default: True
|
||||
|
||||
Enables anonymous census reporting. To opt out of census reporting, set this to False.
|
||||
|
||||
This data enables the project maintainers to estimate how many NetBox deployments exist and track the adoption of new versions over time. Census reporting effects a single HTTP request each time a worker starts. The only data reported by this function are the NetBox version, Python version, and a pseudorandom unique identifier.
|
||||
|
||||
---
|
||||
|
||||
## CHANGELOG_RETENTION
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 90
|
||||
|
||||
The number of days to retain logged changes (object creations, updates, and deletions). Set this to `0` to retain
|
||||
changes in the database indefinitely.
|
||||
|
||||
!!! warning
|
||||
If enabling indefinite changelog retention, it is recommended to periodically delete old entries. Otherwise, the database may eventually exceed capacity.
|
||||
|
||||
---
|
||||
|
||||
## ENFORCE_GLOBAL_UNIQUE
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: False
|
||||
|
||||
By default, NetBox will permit users to create duplicate prefixes and IP addresses in the global table (that is, those which are not assigned to any VRF). This behavior can be disabled by setting `ENFORCE_GLOBAL_UNIQUE` to True.
|
||||
|
||||
---
|
||||
|
||||
## `FILE_UPLOAD_MAX_MEMORY_SIZE`
|
||||
|
||||
Default: `2621440` (2.5 MB).
|
||||
|
||||
The maximum amount (in bytes) of uploaded data that will be held in memory before being written to the filesystem. Changing this setting can be useful for example to be able to upload files bigger than 2.5MB to custom scripts for processing.
|
||||
|
||||
---
|
||||
|
||||
## GRAPHQL_ENABLED
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: True
|
||||
|
||||
Setting this to False will disable the GraphQL API.
|
||||
|
||||
---
|
||||
|
||||
## JOB_RETENTION
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
!!! note
|
||||
This parameter was renamed from `JOBRESULT_RETENTION` in NetBox v3.5.
|
||||
|
||||
Default: 90
|
||||
|
||||
The number of days to retain job results (scripts and reports). Set this to `0` to retain job results in the database indefinitely.
|
||||
|
||||
!!! warning
|
||||
If enabling indefinite job results retention, it is recommended to periodically delete old entries. Otherwise, the database may eventually exceed capacity.
|
||||
|
||||
---
|
||||
|
||||
## MAINTENANCE_MODE
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: False
|
||||
|
||||
Setting this to True will display a "maintenance mode" banner at the top of every page. Additionally, NetBox will no longer update a user's "last active" time upon login. This is to allow new logins when the database is in a read-only state. Recording of login times will resume when maintenance mode is disabled.
|
||||
|
||||
---
|
||||
|
||||
## MAPS_URL
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: `https://maps.google.com/?q=` (Google Maps)
|
||||
|
||||
This specifies the URL to use when presenting a map of a physical location by street address or GPS coordinates. The URL must accept either a free-form street address or a comma-separated pair of numeric coordinates appended to it. Set this to `None` to disable the "map it" button within the UI.
|
||||
|
||||
---
|
||||
|
||||
## MAX_PAGE_SIZE
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: 1000
|
||||
|
||||
A web user or API consumer can request an arbitrary number of objects by appending the "limit" parameter to the URL (e.g. `?limit=1000`). This parameter defines the maximum acceptable limit. Setting this to `0` or `None` will allow a client to retrieve _all_ matching objects at once with no limit by specifying `?limit=0`.
|
||||
|
||||
---
|
||||
|
||||
## METRICS_ENABLED
|
||||
|
||||
Default: False
|
||||
|
||||
Toggle the availability Prometheus-compatible metrics at `/metrics`. See the [Prometheus Metrics](../integrations/prometheus-metrics.md) documentation for more details.
|
||||
|
||||
---
|
||||
|
||||
## PREFER_IPV4
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: False
|
||||
|
||||
When determining the primary IP address for a device, IPv6 is preferred over IPv4 by default. Set this to True to prefer IPv4 instead.
|
||||
|
||||
---
|
||||
|
||||
## QUEUE_MAPPINGS
|
||||
|
||||
Allows changing which queues are used internally for background tasks.
|
||||
|
||||
```python
|
||||
QUEUE_MAPPINGS = {
|
||||
'webhook': 'low',
|
||||
'report': 'high',
|
||||
'script': 'high',
|
||||
}
|
||||
```
|
||||
|
||||
If no queue is defined the queue named `default` will be used.
|
||||
|
||||
---
|
||||
|
||||
## RELEASE_CHECK_URL
|
||||
|
||||
Default: None (disabled)
|
||||
|
||||
This parameter defines the URL of the repository that will be checked for new NetBox releases. When a new release is detected, a message will be displayed to administrative users on the home page. This can be set to the official repository (`'https://api.github.com/repos/netbox-community/netbox/releases'`) or a custom fork. Set this to `None` to disable automatic update checks.
|
||||
|
||||
!!! note
|
||||
The URL provided **must** be compatible with the [GitHub REST API](https://docs.github.com/en/rest).
|
||||
|
||||
---
|
||||
|
||||
## RQ_DEFAULT_TIMEOUT
|
||||
|
||||
Default: `300`
|
||||
|
||||
The maximum execution time of a background task (such as running a custom script), in seconds.
|
||||
|
||||
---
|
||||
|
||||
## RQ_RETRY_INTERVAL
|
||||
|
||||
!!! note
|
||||
This parameter was added in NetBox v3.5.
|
||||
|
||||
Default: `60`
|
||||
|
||||
This parameter controls how frequently a failed job is retried, up to the maximum number of times specified by `RQ_RETRY_MAX`. This must be either an integer specifying the number of seconds to wait between successive attempts, or a list of such values. For example, `[60, 300, 3600]` will retry the task after 1 minute, 5 minutes, and 1 hour.
|
||||
|
||||
---
|
||||
|
||||
## RQ_RETRY_MAX
|
||||
|
||||
!!! note
|
||||
This parameter was added in NetBox v3.5.
|
||||
|
||||
Default: `0` (retries disabled)
|
||||
|
||||
The maximum number of times a background task will be retried before being marked as failed.
|
||||
35
docs/configuration/plugins.md
Normal file
35
docs/configuration/plugins.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Plugin Parameters
|
||||
|
||||
## PLUGINS
|
||||
|
||||
Default: Empty
|
||||
|
||||
A list of installed [NetBox plugins](../plugins/index.md) to enable. Plugins will not take effect unless they are listed here.
|
||||
|
||||
!!! warning
|
||||
Plugins extend NetBox by allowing external code to run with the same access and privileges as NetBox itself. Only install plugins from trusted sources. The NetBox maintainers make absolutely no guarantees about the integrity or security of your installation with plugins enabled.
|
||||
|
||||
---
|
||||
|
||||
## PLUGINS_CONFIG
|
||||
|
||||
Default: Empty
|
||||
|
||||
This parameter holds configuration settings for individual NetBox plugins. It is defined as a dictionary, with each key using the name of an installed plugin. The specific parameters supported are unique to each plugin: Reference the plugin's documentation to determine the supported parameters. An example configuration is shown below:
|
||||
|
||||
```python
|
||||
PLUGINS_CONFIG = {
|
||||
'plugin1': {
|
||||
'foo': 123,
|
||||
'bar': True
|
||||
},
|
||||
'plugin2': {
|
||||
'foo': 456,
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
Note that a plugin must be listed in `PLUGINS` for its configuration to take effect.
|
||||
|
||||
---
|
||||
|
||||
142
docs/configuration/remote-authentication.md
Normal file
142
docs/configuration/remote-authentication.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Remote Authentication Settings
|
||||
|
||||
The configuration parameters listed here control remote authentication for NetBox. Note that `REMOTE_AUTH_ENABLED` must be true in order for these settings to take effect.
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_AUTO_CREATE_GROUPS
|
||||
|
||||
Default: `False`
|
||||
|
||||
If true, NetBox will automatically create groups specified in the `REMOTE_AUTH_GROUP_HEADER` header if they don't already exist. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_AUTO_CREATE_USER
|
||||
|
||||
Default: `False`
|
||||
|
||||
If true, NetBox will automatically create local accounts for users authenticated via a remote service. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_BACKEND
|
||||
|
||||
Default: `'netbox.authentication.RemoteUserBackend'`
|
||||
|
||||
This is the Python path to the custom [Django authentication backend](https://docs.djangoproject.com/en/stable/topics/auth/customizing/) to use for external user authentication. NetBox provides two built-in backends (listed below), though custom authentication backends may also be provided by other packages or plugins. Provide a string for a single backend, or an iterable for multiple backends, which will be attempted in the order given.
|
||||
|
||||
* `netbox.authentication.RemoteUserBackend`
|
||||
* `netbox.authentication.LDAPBackend`
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_DEFAULT_GROUPS
|
||||
|
||||
Default: `[]` (Empty list)
|
||||
|
||||
The list of groups to assign a new user account when created using remote authentication. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_DEFAULT_PERMISSIONS
|
||||
|
||||
Default: `{}` (Empty dictionary)
|
||||
|
||||
A mapping of permissions to assign a new user account when created using remote authentication. Each key in the dictionary should be set to a dictionary of the attributes to be applied to the permission, or `None` to allow all objects. (Requires `REMOTE_AUTH_ENABLED` as True and `REMOTE_AUTH_GROUP_SYNC_ENABLED` as False.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_ENABLED
|
||||
|
||||
Default: `False`
|
||||
|
||||
NetBox can be configured to support remote user authentication by inferring user authentication from an HTTP header set by the HTTP reverse proxy (e.g. nginx or Apache). Set this to `True` to enable this functionality. (Local authentication will still take effect as a fallback.) (`REMOTE_AUTH_DEFAULT_GROUPS` will not function if `REMOTE_AUTH_ENABLED` is disabled)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_GROUP_HEADER
|
||||
|
||||
Default: `'HTTP_REMOTE_USER_GROUP'`
|
||||
|
||||
When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the currently authenticated user. For example, to use the request header `X-Remote-User-Groups` it needs to be set to `HTTP_X_REMOTE_USER_GROUPS`. (Requires `REMOTE_AUTH_ENABLED` and `REMOTE_AUTH_GROUP_SYNC_ENABLED` )
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_GROUP_SEPARATOR
|
||||
|
||||
Default: `|` (Pipe)
|
||||
|
||||
The Seperator upon which `REMOTE_AUTH_GROUP_HEADER` gets split into individual Groups. This needs to be coordinated with your authentication Proxy. (Requires `REMOTE_AUTH_ENABLED` and `REMOTE_AUTH_GROUP_SYNC_ENABLED` )
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_GROUP_SYNC_ENABLED
|
||||
|
||||
Default: `False`
|
||||
|
||||
NetBox can be configured to sync remote user groups by inferring user authentication from an HTTP header set by the HTTP reverse proxy (e.g. nginx or Apache). Set this to `True` to enable this functionality. (Local authentication will still take effect as a fallback.) (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_HEADER
|
||||
|
||||
Default: `'HTTP_REMOTE_USER'`
|
||||
|
||||
When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the currently authenticated user. For example, to use the request header `X-Remote-User` it needs to be set to `HTTP_X_REMOTE_USER`. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_USER_EMAIL
|
||||
|
||||
Default: `'HTTP_REMOTE_USER_EMAIL'`
|
||||
|
||||
When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the email address of the currently authenticated user. For example, to use the request header `X-Remote-User-Email` it needs to be set to `HTTP_X_REMOTE_USER_EMAIL`. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_USER_FIRST_NAME
|
||||
|
||||
Default: `'HTTP_REMOTE_USER_FIRST_NAME'`
|
||||
|
||||
When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the first name of the currently authenticated user. For example, to use the request header `X-Remote-User-First-Name` it needs to be set to `HTTP_X_REMOTE_USER_FIRST_NAME`. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_USER_LAST_NAME
|
||||
|
||||
Default: `'HTTP_REMOTE_USER_LAST_NAME'`
|
||||
|
||||
When remote user authentication is in use, this is the name of the HTTP header which informs NetBox of the last name of the currently authenticated user. For example, to use the request header `X-Remote-User-Last-Name` it needs to be set to `HTTP_X_REMOTE_USER_LAST_NAME`. (Requires `REMOTE_AUTH_ENABLED`.)
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_SUPERUSER_GROUPS
|
||||
|
||||
Default: `[]` (Empty list)
|
||||
|
||||
The list of groups that promote an remote User to Superuser on Login. If group isn't present on next Login, the Role gets revoked. (Requires `REMOTE_AUTH_ENABLED` and `REMOTE_AUTH_GROUP_SYNC_ENABLED` )
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_SUPERUSERS
|
||||
|
||||
Default: `[]` (Empty list)
|
||||
|
||||
The list of users that get promoted to Superuser on Login. If user isn't present in list on next Login, the Role gets revoked. (Requires `REMOTE_AUTH_ENABLED` and `REMOTE_AUTH_GROUP_SYNC_ENABLED` )
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_STAFF_GROUPS
|
||||
|
||||
Default: `[]` (Empty list)
|
||||
|
||||
The list of groups that promote an remote User to Staff on Login. If group isn't present on next Login, the Role gets revoked. (Requires `REMOTE_AUTH_ENABLED` and `REMOTE_AUTH_GROUP_SYNC_ENABLED` )
|
||||
|
||||
---
|
||||
|
||||
## REMOTE_AUTH_STAFF_USERS
|
||||
|
||||
Default: `[]` (Empty list)
|
||||
|
||||
The list of users that get promoted to Staff on Login. If user isn't present in list on next Login, the Role gets revoked. (Requires `REMOTE_AUTH_ENABLED` and `REMOTE_AUTH_GROUP_SYNC_ENABLED` )
|
||||
154
docs/configuration/required-parameters.md
Normal file
154
docs/configuration/required-parameters.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# Required Configuration Settings
|
||||
|
||||
## ALLOWED_HOSTS
|
||||
|
||||
This is a list of valid fully-qualified domain names (FQDNs) and/or IP addresses that can be used to reach the NetBox service. Usually this is the same as the hostname for the NetBox server, but can also be different; for example, when using a reverse proxy serving the NetBox website under a different FQDN than the hostname of the NetBox server. To help guard against [HTTP Host header attackes](https://docs.djangoproject.com/en/3.0/topics/security/#host-headers-virtual-hosting), NetBox will not permit access to the server via any other hostnames (or IPs).
|
||||
|
||||
!!! note
|
||||
This parameter must always be defined as a list or tuple, even if only a single value is provided.
|
||||
|
||||
The value of this option is also used to set `CSRF_TRUSTED_ORIGINS`, which restricts POST requests to the same set of hosts (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-CSRF_TRUSTED_ORIGINS)). Keep in mind that NetBox, by default, sets `USE_X_FORWARDED_HOST` to true, which means that if you're using a reverse proxy, it's the FQDN used to reach that reverse proxy which needs to be in this list (more about this [here](https://docs.djangoproject.com/en/stable/ref/settings/#allowed-hosts)).
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
||||
```
|
||||
|
||||
If you are not yet sure what the domain name and/or IP address of the NetBox installation will be, and are comfortable accepting the risks in doing so, you can set this to a wildcard (asterisk) to allow all host values:
|
||||
|
||||
```
|
||||
ALLOWED_HOSTS = ['*']
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DATABASE
|
||||
|
||||
NetBox requires access to a PostgreSQL 12 or later database service to store data. This service can run locally on the NetBox server or on a remote system. The following parameters must be defined within the `DATABASE` dictionary:
|
||||
|
||||
* `NAME` - Database name
|
||||
* `USER` - PostgreSQL username
|
||||
* `PASSWORD` - PostgreSQL password
|
||||
* `HOST` - Name or IP address of the database server (use `localhost` if running locally)
|
||||
* `PORT` - TCP port of the PostgreSQL service; leave blank for default port (TCP/5432)
|
||||
* `CONN_MAX_AGE` - Lifetime of a [persistent database connection](https://docs.djangoproject.com/en/stable/ref/databases/#persistent-connections), in seconds (300 is the default)
|
||||
* `ENGINE` - The database backend to use; must be a PostgreSQL-compatible backend (e.g. `django.db.backends.postgresql`)
|
||||
|
||||
Example:
|
||||
|
||||
```python
|
||||
DATABASE = {
|
||||
'ENGINE': 'django.db.backends.postgresql',
|
||||
'NAME': 'netbox', # Database name
|
||||
'USER': 'netbox', # PostgreSQL username
|
||||
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
||||
'HOST': 'localhost', # Database server
|
||||
'PORT': '', # Database port (leave blank for default)
|
||||
'CONN_MAX_AGE': 300, # Max database connection age
|
||||
}
|
||||
```
|
||||
|
||||
!!! note
|
||||
NetBox supports all PostgreSQL database options supported by the underlying Django framework. For a complete list of available parameters, please see [the Django documentation](https://docs.djangoproject.com/en/stable/ref/settings/#databases).
|
||||
|
||||
!!! warning
|
||||
Make sure to use a PostgreSQL-compatible backend for the ENGINE setting. If you don't specify an ENGINE, the default will be django.db.backends.postgresql.
|
||||
|
||||
---
|
||||
|
||||
## REDIS
|
||||
|
||||
[Redis](https://redis.io/) is an in-memory data store similar to memcached. While Redis has been an optional component of
|
||||
NetBox since the introduction of webhooks in version 2.4, it is required starting in 2.6 to support NetBox's caching
|
||||
functionality (as well as other planned features). In 2.7, the connection settings were broken down into two sections for
|
||||
task queuing and caching, allowing the user to connect to different Redis instances/databases per feature.
|
||||
|
||||
Redis is configured using a configuration setting similar to `DATABASE` and these settings are the same for both of the `tasks` and `caching` subsections:
|
||||
|
||||
* `HOST` - Name or IP address of the Redis server (use `localhost` if running locally)
|
||||
* `PORT` - TCP port of the Redis service; leave blank for default port (6379)
|
||||
* `USERNAME` - Redis username (if set)
|
||||
* `PASSWORD` - Redis password (if set)
|
||||
* `DATABASE` - Numeric database ID
|
||||
* `SSL` - Use SSL connection to Redis
|
||||
* `INSECURE_SKIP_TLS_VERIFY` - Set to `True` to **disable** TLS certificate verification (not recommended)
|
||||
|
||||
An example configuration is provided below:
|
||||
|
||||
```python
|
||||
REDIS = {
|
||||
'tasks': {
|
||||
'HOST': 'redis.example.com',
|
||||
'PORT': 1234,
|
||||
'USERNAME': 'netbox'
|
||||
'PASSWORD': 'foobar',
|
||||
'DATABASE': 0,
|
||||
'SSL': False,
|
||||
},
|
||||
'caching': {
|
||||
'HOST': 'localhost',
|
||||
'PORT': 6379,
|
||||
'USERNAME': ''
|
||||
'PASSWORD': '',
|
||||
'DATABASE': 1,
|
||||
'SSL': False,
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
!!! note
|
||||
If you are upgrading from a NetBox release older than v2.7.0, please note that the Redis connection configuration
|
||||
settings have changed. Manual modification to bring the `REDIS` section inline with the above specification is
|
||||
necessary
|
||||
|
||||
!!! warning
|
||||
It is highly recommended to keep the task and cache databases separate. Using the same database number on the
|
||||
same Redis instance for both may result in queued background tasks being lost during cache flushing events.
|
||||
|
||||
### Using Redis Sentinel
|
||||
|
||||
If you are using [Redis Sentinel](https://redis.io/topics/sentinel) for high-availability purposes, there is minimal
|
||||
configuration necessary to convert NetBox to recognize it. It requires the removal of the `HOST` and `PORT` keys from
|
||||
above and the addition of three new keys.
|
||||
|
||||
* `SENTINELS`: List of tuples or tuple of tuples with each inner tuple containing the name or IP address
|
||||
of the Redis server and port for each sentinel instance to connect to
|
||||
* `SENTINEL_SERVICE`: Name of the master / service to connect to
|
||||
* `SENTINEL_TIMEOUT`: Connection timeout, in seconds
|
||||
|
||||
Example:
|
||||
|
||||
```python
|
||||
REDIS = {
|
||||
'tasks': {
|
||||
'SENTINELS': [('mysentinel.redis.example.com', 6379)],
|
||||
'SENTINEL_SERVICE': 'netbox',
|
||||
'SENTINEL_TIMEOUT': 10,
|
||||
'PASSWORD': '',
|
||||
'DATABASE': 0,
|
||||
'SSL': False,
|
||||
},
|
||||
'caching': {
|
||||
'SENTINELS': [
|
||||
('mysentinel.redis.example.com', 6379),
|
||||
('othersentinel.redis.example.com', 6379)
|
||||
],
|
||||
'SENTINEL_SERVICE': 'netbox',
|
||||
'PASSWORD': '',
|
||||
'DATABASE': 1,
|
||||
'SSL': False,
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
!!! note
|
||||
It is permissible to use Sentinel for only one database and not the other.
|
||||
|
||||
---
|
||||
|
||||
## SECRET_KEY
|
||||
|
||||
This is a secret, pseudorandom string used to assist in the creation new cryptographic hashes for passwords and HTTP cookies. The key defined here should not be shared outside the configuration file. `SECRET_KEY` can be changed at any time without impacting stored data, however be aware that doing so will invalidate all existing user sessions. NetBox deployments comprising multiple nodes must have the same secret key configured on all nodes.
|
||||
|
||||
`SECRET_KEY` **must** be at least 50 characters in length, and should contain a mix of letters, digits, and symbols. The script located at `$INSTALL_ROOT/netbox/generate_secret_key.py` may be used to generate a suitable key. Please note that this key is **not** used directly for hashing user passwords or for the encrypted storage of secret data in NetBox.
|
||||
217
docs/configuration/security.md
Normal file
217
docs/configuration/security.md
Normal file
@@ -0,0 +1,217 @@
|
||||
# Security & Authentication Parameters
|
||||
|
||||
## ALLOW_TOKEN_RETRIEVAL
|
||||
|
||||
Default: True
|
||||
|
||||
If disabled, the values of API tokens will not be displayed after each token's initial creation. A user **must** record the value of a token prior to its creation, or it will be lost. Note that this affects _all_ users, regardless of assigned permissions.
|
||||
|
||||
---
|
||||
|
||||
## ALLOWED_URL_SCHEMES
|
||||
|
||||
!!! tip "Dynamic Configuration Parameter"
|
||||
|
||||
Default: `('file', 'ftp', 'ftps', 'http', 'https', 'irc', 'mailto', 'sftp', 'ssh', 'tel', 'telnet', 'tftp', 'vnc', 'xmpp')`
|
||||
|
||||
A list of permitted URL schemes referenced when rendering links within NetBox. Note that only the schemes specified in this list will be accepted: If adding your own, be sure to replicate all the default values as well (excluding those schemes which are not desirable).
|
||||
|
||||
---
|
||||
|
||||
## AUTH_PASSWORD_VALIDATORS
|
||||
|
||||
This parameter acts as a pass-through for configuring Django's built-in password validators for local user accounts. If configured, these will be applied whenever a user's password is updated to ensure that it meets minimum criteria such as length or complexity. An example is provided below. For more detail on the available options, please see [the Django documentation](https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation).
|
||||
|
||||
```python
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{
|
||||
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
||||
'OPTIONS': {
|
||||
'min_length': 10,
|
||||
}
|
||||
},
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## CORS_ORIGIN_ALLOW_ALL
|
||||
|
||||
Default: False
|
||||
|
||||
If True, cross-origin resource sharing (CORS) requests will be accepted from all origins. If False, a whitelist will be used (see below).
|
||||
|
||||
---
|
||||
|
||||
## CORS_ORIGIN_WHITELIST
|
||||
|
||||
## CORS_ORIGIN_REGEX_WHITELIST
|
||||
|
||||
These settings specify a list of origins that are authorized to make cross-site API requests. Use
|
||||
`CORS_ORIGIN_WHITELIST` to define a list of exact hostnames, or `CORS_ORIGIN_REGEX_WHITELIST` to define a set of regular
|
||||
expressions. (These settings have no effect if `CORS_ORIGIN_ALLOW_ALL` is True.) For example:
|
||||
|
||||
```python
|
||||
CORS_ORIGIN_WHITELIST = [
|
||||
'https://example.com',
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## CSRF_COOKIE_NAME
|
||||
|
||||
Default: `csrftoken`
|
||||
|
||||
The name of the cookie to use for the cross-site request forgery (CSRF) authentication token. See the [Django documentation](https://docs.djangoproject.com/en/stable/ref/settings/#csrf-cookie-name) for more detail.
|
||||
|
||||
---
|
||||
|
||||
## CSRF_COOKIE_SECURE
|
||||
|
||||
Default: False
|
||||
|
||||
If true, the cookie employed for cross-site request forgery (CSRF) protection will be marked as secure, meaning that it can only be sent across an HTTPS connection.
|
||||
|
||||
---
|
||||
|
||||
## CSRF_TRUSTED_ORIGINS
|
||||
|
||||
Default: `[]`
|
||||
|
||||
Defines a list of trusted origins for unsafe (e.g. `POST`) requests. This is a pass-through to Django's [`CSRF_TRUSTED_ORIGINS`](https://docs.djangoproject.com/en/4.0/ref/settings/#std:setting-CSRF_TRUSTED_ORIGINS) setting. Note that each host listed must specify a scheme (e.g. `http://` or `https://).
|
||||
|
||||
```python
|
||||
CSRF_TRUSTED_ORIGINS = (
|
||||
'http://netbox.local',
|
||||
'https://netbox.local',
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DEFAULT_PERMISSIONS
|
||||
|
||||
!!! info "This parameter was introduced in NetBox v3.6."
|
||||
|
||||
Default:
|
||||
|
||||
```python
|
||||
{
|
||||
'users.view_token': ({'user': '$user'},),
|
||||
'users.add_token': ({'user': '$user'},),
|
||||
'users.change_token': ({'user': '$user'},),
|
||||
'users.delete_token': ({'user': '$user'},),
|
||||
}
|
||||
```
|
||||
|
||||
This parameter defines object permissions that are applied automatically to _any_ authenticated user, regardless of what permissions have been defined in the database. By default, this parameter is defined to allow all users to manage their own API tokens, however it can be overriden for any purpose.
|
||||
|
||||
For example, to allow all users to create a device role beginning with the word "temp," you could configure the following:
|
||||
|
||||
```python
|
||||
DEFAULT_PERMISSIONS = {
|
||||
'dcim.add_devicerole': (
|
||||
{'name__startswith': 'temp'},
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
!!! warning
|
||||
Setting a custom value for this parameter will overwrite the default permission mapping shown above. If you want to retain the default mapping, be sure to reproduce it in your custom configuration.
|
||||
|
||||
---
|
||||
|
||||
## EXEMPT_VIEW_PERMISSIONS
|
||||
|
||||
Default: Empty list
|
||||
|
||||
A list of NetBox models to exempt from the enforcement of view permissions. Models listed here will be viewable by all users, both authenticated and anonymous.
|
||||
|
||||
List models in the form `<app>.<model>`. For example:
|
||||
|
||||
```python
|
||||
EXEMPT_VIEW_PERMISSIONS = [
|
||||
'dcim.site',
|
||||
'dcim.region',
|
||||
'ipam.prefix',
|
||||
]
|
||||
```
|
||||
|
||||
To exempt _all_ models from view permission enforcement, set the following. (Note that `EXEMPT_VIEW_PERMISSIONS` must be an iterable.)
|
||||
|
||||
```python
|
||||
EXEMPT_VIEW_PERMISSIONS = ['*']
|
||||
```
|
||||
|
||||
!!! note
|
||||
Using a wildcard will not affect certain potentially sensitive models, such as user permissions. If there is a need to exempt these models, they must be specified individually.
|
||||
|
||||
---
|
||||
|
||||
## LOGIN_PERSISTENCE
|
||||
|
||||
Default: False
|
||||
|
||||
If true, the lifetime of a user's authentication session will be automatically reset upon each valid request. For example, if [`LOGIN_TIMEOUT`](#login_timeout) is configured to 14 days (the default), and a user whose session is due to expire in five days makes a NetBox request (with a valid session cookie), the session's lifetime will be reset to 14 days.
|
||||
|
||||
Note that enabling this setting causes NetBox to update a user's session in the database (or file, as configured per [`SESSION_FILE_PATH`](#session_file_path)) with each request, which may introduce significant overhead in very active environments. It also permits an active user to remain authenticated to NetBox indefinitely.
|
||||
|
||||
---
|
||||
|
||||
## LOGIN_REQUIRED
|
||||
|
||||
Default: False
|
||||
|
||||
Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users are permitted to access most data in NetBox but not make any changes.
|
||||
|
||||
---
|
||||
|
||||
## LOGIN_TIMEOUT
|
||||
|
||||
Default: 1209600 seconds (14 days)
|
||||
|
||||
The lifetime (in seconds) of the authentication cookie issued to a NetBox user upon login.
|
||||
|
||||
---
|
||||
|
||||
## LOGOUT_REDIRECT_URL
|
||||
|
||||
Default: `'home'`
|
||||
|
||||
The view name or URL to which a user is redirected after logging out.
|
||||
|
||||
---
|
||||
|
||||
## SECURE_SSL_REDIRECT
|
||||
|
||||
Default: False
|
||||
|
||||
If true, all non-HTTPS requests will be automatically redirected to use HTTPS.
|
||||
|
||||
!!! warning
|
||||
Ensure that your frontend HTTP daemon has been configured to forward the HTTP scheme correctly before enabling this option. An incorrectly configured frontend may result in a looping redirect.
|
||||
|
||||
---
|
||||
|
||||
## SESSION_COOKIE_NAME
|
||||
|
||||
Default: `sessionid`
|
||||
|
||||
The name used for the session cookie. See the [Django documentation](https://docs.djangoproject.com/en/stable/ref/settings/#session-cookie-name) for more detail.
|
||||
|
||||
---
|
||||
|
||||
## SESSION_COOKIE_SECURE
|
||||
|
||||
Default: False
|
||||
|
||||
If true, the cookie employed for session authentication will be marked as secure, meaning that it can only be sent across an HTTPS connection.
|
||||
|
||||
---
|
||||
|
||||
## SESSION_FILE_PATH
|
||||
|
||||
Default: None
|
||||
|
||||
HTTP session data is used to track authenticated users when they access NetBox. By default, NetBox stores session data in its PostgreSQL database. However, this inhibits authentication to a standby instance of NetBox without write access to the database. Alternatively, a local file path may be specified here and NetBox will store session data as files instead of using the database. Note that the NetBox system user must have read and write permissions to this path.
|
||||
213
docs/configuration/system.md
Normal file
213
docs/configuration/system.md
Normal file
@@ -0,0 +1,213 @@
|
||||
# System Parameters
|
||||
|
||||
## BASE_PATH
|
||||
|
||||
Default: None
|
||||
|
||||
The base URL path to use when accessing NetBox. Do not include the scheme or domain name. For example, if installed at https://example.com/netbox/, set:
|
||||
|
||||
```python
|
||||
BASE_PATH = 'netbox/'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## DEFAULT_LANGUAGE
|
||||
|
||||
Default: `en-us` (US English)
|
||||
|
||||
Defines the default preferred language/locale for requests that do not specify one. This is used to alter e.g. the display of dates and numbers to fit the user's locale. See [this list](http://www.i18nguy.com/unicode/language-identifiers.html) of standard language codes. (This parameter maps to Django's [`LANGUAGE_CODE`](https://docs.djangoproject.com/en/stable/ref/settings/#language-code) internal setting.)
|
||||
|
||||
!!! note
|
||||
Altering this parameter will *not* change the language used in NetBox. We hope to provide translation support in a future NetBox release.
|
||||
|
||||
---
|
||||
|
||||
## DOCS_ROOT
|
||||
|
||||
Default: `$INSTALL_ROOT/docs/`
|
||||
|
||||
The filesystem path to NetBox's documentation. This is used when presenting context-sensitive documentation in the web UI. By default, this will be the `docs/` directory within the root NetBox installation path. (Set this to `None` to disable the embedded documentation.)
|
||||
|
||||
---
|
||||
|
||||
## EMAIL
|
||||
|
||||
In order to send email, NetBox needs an email server configured. The following items can be defined within the `EMAIL` configuration parameter:
|
||||
|
||||
* `SERVER` - Hostname or IP address of the email server (use `localhost` if running locally)
|
||||
* `PORT` - TCP port to use for the connection (default: `25`)
|
||||
* `USERNAME` - Username with which to authenticate
|
||||
* `PASSWORD` - Password with which to authenticate
|
||||
* `USE_SSL` - Use SSL when connecting to the server (default: `False`)
|
||||
* `USE_TLS` - Use TLS when connecting to the server (default: `False`)
|
||||
* `SSL_CERTFILE` - Path to the PEM-formatted SSL certificate file (optional)
|
||||
* `SSL_KEYFILE` - Path to the PEM-formatted SSL private key file (optional)
|
||||
* `TIMEOUT` - Amount of time to wait for a connection, in seconds (default: `10`)
|
||||
* `FROM_EMAIL` - Sender address for emails sent by NetBox
|
||||
|
||||
!!! note
|
||||
The `USE_SSL` and `USE_TLS` parameters are mutually exclusive.
|
||||
|
||||
Email is sent from NetBox only for critical events or if configured for [logging](#logging). If you would like to test the email server configuration, Django provides a convenient [send_mail()](https://docs.djangoproject.com/en/stable/topics/email/#send-mail) function accessible within the NetBox shell:
|
||||
|
||||
```no-highlight
|
||||
# python ./manage.py nbshell
|
||||
>>> from django.core.mail import send_mail
|
||||
>>> send_mail(
|
||||
'Test Email Subject',
|
||||
'Test Email Body',
|
||||
'noreply-netbox@example.com',
|
||||
['users@example.com'],
|
||||
fail_silently=False
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ENABLE_LOCALIZATION
|
||||
|
||||
Default: False
|
||||
|
||||
Determines if localization features are enabled or not. This should only be enabled for development or testing purposes as netbox is not yet fully localized. Turning this on will localize numeric and date formats (overriding what is set for DATE_FORMAT) based on the browser locale as well as translate certain strings from third party modules.
|
||||
|
||||
---
|
||||
|
||||
## GIT_PATH
|
||||
|
||||
Default: `git`
|
||||
|
||||
The system path to the `git` executable, used by the synchronization backend for remote git repositories.
|
||||
|
||||
---
|
||||
|
||||
## HTTP_PROXIES
|
||||
|
||||
Default: None
|
||||
|
||||
A dictionary of HTTP proxies to use for outbound requests originating from NetBox (e.g. when sending webhook requests). Proxies should be specified by schema (HTTP and HTTPS) as per the [Python requests library documentation](https://requests.readthedocs.io/en/latest/user/advanced/#proxies). For example:
|
||||
|
||||
```python
|
||||
HTTP_PROXIES = {
|
||||
'http': 'http://10.10.1.10:3128',
|
||||
'https': 'http://10.10.1.10:1080',
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## INTERNAL_IPS
|
||||
|
||||
Default: `('127.0.0.1', '::1')`
|
||||
|
||||
A list of IP addresses recognized as internal to the system, used to control the display of debugging output. For
|
||||
example, the debugging toolbar will be viewable only when a client is accessing NetBox from one of the listed IP
|
||||
addresses (and [`DEBUG`](#debug) is true).
|
||||
|
||||
---
|
||||
|
||||
## JINJA2_FILTERS
|
||||
|
||||
Default: `{}`
|
||||
|
||||
A dictionary of custom jinja2 filters with the key being the filter name and the value being a callable. For more information see the [Jinja2 documentation](https://jinja.palletsprojects.com/en/3.1.x/api/#custom-filters). For example:
|
||||
|
||||
```python
|
||||
def uppercase(x):
|
||||
return str(x).upper()
|
||||
|
||||
JINJA2_FILTERS = {
|
||||
'uppercase': uppercase,
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## LOGGING
|
||||
|
||||
By default, all messages of INFO severity or higher will be logged to the console. Additionally, if [`DEBUG`](#debug) is False and email access has been configured, ERROR and CRITICAL messages will be emailed to the users defined in [`ADMINS`](#admins).
|
||||
|
||||
The Django framework on which NetBox runs allows for the customization of logging format and destination. Please consult the [Django logging documentation](https://docs.djangoproject.com/en/stable/topics/logging/) for more information on configuring this setting. Below is an example which will write all INFO and higher messages to a local file:
|
||||
|
||||
```python
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': False,
|
||||
'handlers': {
|
||||
'file': {
|
||||
'level': 'INFO',
|
||||
'class': 'logging.FileHandler',
|
||||
'filename': '/var/log/netbox.log',
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'django': {
|
||||
'handlers': ['file'],
|
||||
'level': 'INFO',
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Available Loggers
|
||||
|
||||
* `netbox.<app>.<model>` - Generic form for model-specific log messages
|
||||
* `netbox.auth.*` - Authentication events
|
||||
* `netbox.api.views.*` - Views which handle business logic for the REST API
|
||||
* `netbox.reports.*` - Report execution (`module.name`)
|
||||
* `netbox.scripts.*` - Custom script execution (`module.name`)
|
||||
* `netbox.views.*` - Views which handle business logic for the web UI
|
||||
|
||||
---
|
||||
|
||||
## MEDIA_ROOT
|
||||
|
||||
Default: $INSTALL_ROOT/netbox/media/
|
||||
|
||||
The file path to the location where media files (such as image attachments) are stored. By default, this is the `netbox/media/` directory within the base NetBox installation path.
|
||||
|
||||
---
|
||||
|
||||
## REPORTS_ROOT
|
||||
|
||||
Default: `$INSTALL_ROOT/netbox/reports/`
|
||||
|
||||
The file path to the location where [custom reports](../customization/reports.md) will be kept. By default, this is the `netbox/reports/` directory within the base NetBox installation path.
|
||||
|
||||
---
|
||||
|
||||
## SCRIPTS_ROOT
|
||||
|
||||
Default: `$INSTALL_ROOT/netbox/scripts/`
|
||||
|
||||
The file path to the location where [custom scripts](../customization/custom-scripts.md) will be kept. By default, this is the `netbox/scripts/` directory within the base NetBox installation path.
|
||||
|
||||
---
|
||||
|
||||
## SEARCH_BACKEND
|
||||
|
||||
Default: `'netbox.search.backends.CachedValueSearchBackend'`
|
||||
|
||||
The dotted path to the desired search backend class. `CachedValueSearchBackend` is currently the only search backend provided in NetBox, however this setting can be used to enable a custom backend.
|
||||
|
||||
---
|
||||
|
||||
## STORAGE_BACKEND
|
||||
|
||||
Default: None (local storage)
|
||||
|
||||
The backend storage engine for handling uploaded files (e.g. image attachments). NetBox supports integration with the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) package, which provides backends for several popular file storage services. If not configured, local filesystem storage will be used.
|
||||
|
||||
The configuration parameters for the specified storage backend are defined under the `STORAGE_CONFIG` setting.
|
||||
|
||||
---
|
||||
|
||||
## STORAGE_CONFIG
|
||||
|
||||
Default: Empty
|
||||
|
||||
A dictionary of configuration parameters for the storage backend configured as `STORAGE_BACKEND`. The specific parameters to be used here are specific to each backend; see the [`django-storages` documentation](https://django-storages.readthedocs.io/en/stable/) for more detail.
|
||||
|
||||
If `STORAGE_BACKEND` is not defined, this setting will be ignored.
|
||||
|
||||
---
|
||||
104
docs/customization/custom-fields.md
Normal file
104
docs/customization/custom-fields.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# Custom Fields
|
||||
|
||||
Each model in NetBox is represented in the database as a discrete table, and each attribute of a model exists as a column within its table. For example, sites are stored in the `dcim_site` table, which has columns named `name`, `facility`, `physical_address`, and so on. As new attributes are added to objects throughout the development of NetBox, tables are expanded to include new rows.
|
||||
|
||||
However, some users might want to store additional object attributes that are somewhat esoteric in nature, and that would not make sense to include in the core NetBox database schema. For instance, suppose your organization needs to associate each device with a ticket number correlating it with an internal support system record. This is certainly a legitimate use for NetBox, but it's not a common enough need to warrant including a field for _every_ NetBox installation. Instead, you can create a custom field to hold this data.
|
||||
|
||||
Within the database, custom fields are stored as JSON data directly alongside each object. This alleviates the need for complex queries when retrieving objects.
|
||||
|
||||
## Creating Custom Fields
|
||||
|
||||
Custom fields may be created by navigating to Customization > Custom Fields. NetBox supports many types of custom field:
|
||||
|
||||
* Text: Free-form text (intended for single-line use)
|
||||
* Long text: Free-form of any length; supports Markdown rendering
|
||||
* Integer: A whole number (positive or negative)
|
||||
* Decimal: A fixed-precision decimal number (4 decimal places)
|
||||
* Boolean: True or false
|
||||
* Date: A date in ISO 8601 format (YYYY-MM-DD)
|
||||
* Date & time: A date and time in ISO 8601 format (YYYY-MM-DD HH:MM:SS)
|
||||
* URL: This will be presented as a link in the web UI
|
||||
* JSON: Arbitrary data stored in JSON format
|
||||
* Selection: A selection of one of several pre-defined custom choices
|
||||
* Multiple selection: A selection field which supports the assignment of multiple values
|
||||
* Object: A single NetBox object of the type defined by `object_type`
|
||||
* Multiple object: One or more NetBox objects of the type defined by `object_type`
|
||||
|
||||
Each custom field must have a name. This should be a simple database-friendly string (e.g. `tps_report`) and may contain only alphanumeric characters and underscores. You may also assign a corresponding human-friendly label (e.g. "TPS report"); the label will be displayed on web forms. A weight is also required: Higher-weight fields will be ordered lower within a form. (The default weight is 100.) If a description is provided, it will appear beneath the field in a form.
|
||||
|
||||
Marking a field as required will force the user to provide a value for the field when creating a new object or when saving an existing object. A default value for the field may also be provided. Use "true" or "false" for boolean fields, or the exact value of a choice for selection fields.
|
||||
|
||||
A custom field must be assigned to one or more object types, or models, in NetBox. Once created, custom fields will automatically appear as part of these models in the web UI and REST API. Note that not all models support custom fields.
|
||||
|
||||
### Filtering
|
||||
|
||||
The filter logic controls how values are matched when filtering objects by the custom field. Loose filtering (the default) matches on a partial value, whereas exact matching requires a complete match of the given string to a field's value. For example, exact filtering with the string "red" will only match the exact value "red", whereas loose filtering will match on the values "red", "red-orange", or "bored". Setting the filter logic to "disabled" disables filtering by the field entirely.
|
||||
|
||||
### Grouping
|
||||
|
||||
Related custom fields can be grouped together within the UI by assigning each the same group name. When at least one custom field for an object type has a group defined, it will appear under the group heading within the custom fields panel under the object view. All custom fields with the same group name will appear under that heading. (Note that the group names must match exactly, or each will appear as a separate heading.)
|
||||
|
||||
This parameter has no effect on the API representation of custom field data.
|
||||
|
||||
### Visibility
|
||||
|
||||
When creating a custom field, there are three options for UI visibility. These control how and whether the custom field is displayed within the NetBox UI.
|
||||
|
||||
* **Read/write** (default): The custom field is included when viewing and editing objects.
|
||||
* **Read-only**: The custom field is displayed when viewing an object, but it cannot be edited via the UI. (It will appear in the form as a read-only field.)
|
||||
* **Hidden**: The custom field will never be displayed within the UI. This option is recommended for fields which are not intended for use by human users.
|
||||
|
||||
Note that this setting has no impact on the REST or GraphQL APIs: Custom field data will always be available via either API.
|
||||
|
||||
### Validation
|
||||
|
||||
NetBox supports limited custom validation for custom field values. Following are the types of validation enforced for each field type:
|
||||
|
||||
* Text: Regular expression (optional)
|
||||
* Integer: Minimum and/or maximum value (optional)
|
||||
* Selection: Must exactly match one of the prescribed choices
|
||||
|
||||
### Custom Selection Fields
|
||||
|
||||
Each custom selection field must designate a [choice set](../models/extras/customfieldchoiceset.md) containing at least two choices. These are specified as a comma-separated list.
|
||||
|
||||
If a default value is specified for a selection field, it must exactly match one of the provided choices. The value of a multiple selection field will always return a list, even if only one value is selected.
|
||||
|
||||
### Custom Object Fields
|
||||
|
||||
An object or multi-object custom field can be used to refer to a particular NetBox object or objects as the "value" for a custom field. These custom fields must define an `object_type`, which determines the type of object to which custom field instances point.
|
||||
|
||||
## Custom Fields in Templates
|
||||
|
||||
Several features within NetBox, such as export templates and webhooks, utilize Jinja2 templating. For convenience, objects which support custom field assignment expose custom field data through the `cf` property. This is a bit cleaner than accessing custom field data through the actual field (`custom_field_data`).
|
||||
|
||||
For example, a custom field named `foo123` on the Site model is accessible on an instance as `{{ site.cf.foo123 }}`.
|
||||
|
||||
## Custom Fields and the REST API
|
||||
|
||||
When retrieving an object via the REST API, all of its custom data will be included within the `custom_fields` attribute. For example, below is the partial output of a site with two custom fields defined:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 123,
|
||||
"url": "http://localhost:8000/api/dcim/sites/123/",
|
||||
"name": "Raleigh 42",
|
||||
...
|
||||
"custom_fields": {
|
||||
"deployed": "2018-06-19",
|
||||
"site_code": "US-NC-RAL42"
|
||||
},
|
||||
...
|
||||
```
|
||||
|
||||
To set or change these values, simply include nested JSON data. For example:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "New Site",
|
||||
"slug": "new-site",
|
||||
"custom_fields": {
|
||||
"deployed": "2019-03-24"
|
||||
}
|
||||
}
|
||||
```
|
||||
65
docs/customization/custom-links.md
Normal file
65
docs/customization/custom-links.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# Custom Links
|
||||
|
||||
Custom links allow users to display arbitrary hyperlinks to external content within NetBox object views. These are helpful for cross-referencing related records in systems outside NetBox. For example, you might create a custom link on the device view which links to the current device in a Network Monitoring System (NMS).
|
||||
|
||||
Custom links are created by navigating to Customization > Custom Links. Each link is associated with a particular NetBox object type (site, device, prefix, etc.) and will be displayed on relevant views. Each link has display text and a URL, and data from the NetBox item being viewed can be included in the link using [Jinja2 template code](https://jinja2docs.readthedocs.io/en/stable/) through the variable `object`, and custom fields through `object.cf`.
|
||||
|
||||
For example, you might define a link like this:
|
||||
|
||||
* Text: `View NMS`
|
||||
* URL: `https://nms.example.com/nodes/?name={{ object.name }}`
|
||||
|
||||
When viewing a device named Router4, this link would render as:
|
||||
|
||||
```no-highlight
|
||||
<a href="https://nms.example.com/nodes/?name=Router4">View NMS</a>
|
||||
```
|
||||
|
||||
Custom links appear as buttons in the top right corner of the page. Numeric weighting can be used to influence the ordering of links, and each link can be enabled or disabled individually.
|
||||
|
||||
!!! warning
|
||||
Custom links rely on user-created code to generate arbitrary HTML output, which may be dangerous. Only grant permission to create or modify custom links to trusted users.
|
||||
|
||||
## Context Data
|
||||
|
||||
The following context data is available within the template when rendering a custom link's text or URL.
|
||||
|
||||
| Variable | Description |
|
||||
|-----------|-------------------------------------------------------------------------------------------------------------------|
|
||||
| `object` | The NetBox object being displayed |
|
||||
| `debug` | A boolean indicating whether debugging is enabled |
|
||||
| `request` | The current WSGI request |
|
||||
| `user` | The current user (if authenticated) |
|
||||
| `perms` | The [permissions](https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions) assigned to the user |
|
||||
|
||||
While most of the context variables listed above will have consistent attributes, the object will be an instance of the specific object being viewed when the link is rendered. Different models have different fields and properties, so you may need to some research to determine the attributes available for use within your template for a specific object type.
|
||||
|
||||
Checking the REST API representation of an object is generally a convenient way to determine what attributes are available. You can also reference the NetBox source code directly for a comprehensive list.
|
||||
|
||||
## Conditional Rendering
|
||||
|
||||
Only links which render with non-empty text are included on the page. You can employ conditional Jinja2 logic to control the conditions under which a link gets rendered.
|
||||
|
||||
For example, if you only want to display a link for active devices, you could set the link text to
|
||||
|
||||
```jinja2
|
||||
{% if object.status == 'active' %}View NMS{% endif %}
|
||||
```
|
||||
|
||||
The link will not appear when viewing a device with any status other than "active."
|
||||
|
||||
As another example, if you wanted to show only devices belonging to a certain manufacturer, you could do something like this:
|
||||
|
||||
```jinja2
|
||||
{% if object.device_type.manufacturer.name == 'Cisco' %}View NMS{% endif %}
|
||||
```
|
||||
|
||||
The link will only appear when viewing a device with a manufacturer name of "Cisco."
|
||||
|
||||
## Link Groups
|
||||
|
||||
Group names can be specified to organize links into groups. Links with the same group name will render as a dropdown menu beneath a single button bearing the name of the group.
|
||||
|
||||
## Table Columns
|
||||
|
||||
Custom links can also be included in object tables by selecting the desired links from the table configuration form. When displayed, each link will render as a hyperlink for its corresponding object. When exported (e.g. as CSV data), each link render only its URL.
|
||||
412
docs/customization/custom-scripts.md
Normal file
412
docs/customization/custom-scripts.md
Normal file
@@ -0,0 +1,412 @@
|
||||
# Custom Scripts
|
||||
|
||||
Custom scripting was introduced to provide a way for users to execute custom logic from within the NetBox UI. Custom scripts enable the user to directly and conveniently manipulate NetBox data in a prescribed fashion. They can be used to accomplish myriad tasks, such as:
|
||||
|
||||
* Automatically populate new devices and cables in preparation for a new site deployment
|
||||
* Create a range of new reserved prefixes or IP addresses
|
||||
* Fetch data from an external source and import it to NetBox
|
||||
|
||||
Custom scripts are Python code and exist outside of the official NetBox code base, so they can be updated and changed without interfering with the core NetBox installation. And because they're completely custom, there is no inherent limitation on what a script can accomplish.
|
||||
|
||||
## Writing Custom Scripts
|
||||
|
||||
All custom scripts must inherit from the `extras.scripts.Script` base class. This class provides the functionality necessary to generate forms and log activity.
|
||||
|
||||
```python
|
||||
from extras.scripts import Script
|
||||
|
||||
class MyScript(Script):
|
||||
...
|
||||
```
|
||||
|
||||
Scripts comprise two core components: a set of variables and a `run()` method. Variables allow your script to accept user input via the NetBox UI, but they are optional: If your script does not require any user input, there is no need to define any variables.
|
||||
|
||||
The `run()` method is where your script's execution logic lives. (Note that your script can have as many methods as needed: this is merely the point of invocation for NetBox.)
|
||||
|
||||
```python
|
||||
class MyScript(Script):
|
||||
var1 = StringVar(...)
|
||||
var2 = IntegerVar(...)
|
||||
var3 = ObjectVar(...)
|
||||
|
||||
def run(self, data, commit):
|
||||
...
|
||||
```
|
||||
|
||||
The `run()` method should accept two arguments:
|
||||
|
||||
* `data` - A dictionary containing all the variable data passed via the web form.
|
||||
* `commit` - A boolean indicating whether database changes will be committed.
|
||||
|
||||
Defining script variables is optional: You may create a script with only a `run()` method if no user input is needed.
|
||||
|
||||
Any output generated by the script during its execution will be displayed under the "output" tab in the UI.
|
||||
|
||||
By default, scripts within a module are ordered alphabetically in the scripts list page. To return scripts in a specific order, you can define the `script_order` variable at the end of your module. The `script_order` variable is a tuple which contains each Script class in the desired order. Any scripts that are omitted from this list will be listed last.
|
||||
|
||||
```python
|
||||
from extras.scripts import Script
|
||||
|
||||
class MyCustomScript(Script):
|
||||
...
|
||||
|
||||
class AnotherCustomScript(Script):
|
||||
...
|
||||
|
||||
script_order = (MyCustomScript, AnotherCustomScript)
|
||||
```
|
||||
|
||||
## Module Attributes
|
||||
|
||||
### `name`
|
||||
|
||||
You can define `name` within a script module (the Python file which contains one or more scripts) to set the module name. If `name` is not defined, the module's file name will be used.
|
||||
|
||||
## Script Attributes
|
||||
|
||||
Script attributes are defined under a class named `Meta` within the script. These are optional, but encouraged.
|
||||
|
||||
### `name`
|
||||
|
||||
This is the human-friendly names of your script. If omitted, the class name will be used.
|
||||
|
||||
### `description`
|
||||
|
||||
A human-friendly description of what your script does.
|
||||
|
||||
### `field_order`
|
||||
|
||||
By default, script variables will be ordered in the form as they are defined in the script. `field_order` may be defined as an iterable of field names to determine the order in which variables are rendered within a default "Script Data" group. Any fields not included in this iterable be listed last. If `fieldsets` is defined, `field_order` will be ignored. A fieldset group for "Script Execution Parameters" will be added to the end of the form by default for the user.
|
||||
|
||||
### `fieldsets`
|
||||
|
||||
`fieldsets` may be defined as an iterable of field groups and their field names to determine the order in which variables are group and rendered. Any fields not included in this iterable will not be displayed in the form. If `fieldsets` is defined, `field_order` will be ignored. A fieldset group for "Script Execution Parameters" will be added to the end of the fieldsets by default for the user.
|
||||
|
||||
An example fieldset definition is provided below:
|
||||
|
||||
```python
|
||||
class MyScript(Script):
|
||||
class Meta:
|
||||
fieldsets = (
|
||||
('First group', ('field1', 'field2', 'field3')),
|
||||
('Second group', ('field4', 'field5')),
|
||||
)
|
||||
```
|
||||
|
||||
### `commit_default`
|
||||
|
||||
The checkbox to commit database changes when executing a script is checked by default. Set `commit_default` to False under the script's Meta class to leave this option unchecked by default.
|
||||
|
||||
```python
|
||||
commit_default = False
|
||||
```
|
||||
|
||||
### `scheduling_enabled`
|
||||
|
||||
By default, a script can be scheduled for execution at a later time. Setting `scheduling_enabled` to False disables this ability: Only immediate execution will be possible. (This also disables the ability to set a recurring execution interval.)
|
||||
|
||||
### `job_timeout`
|
||||
|
||||
Set the maximum allowed runtime for the script. If not set, `RQ_DEFAULT_TIMEOUT` will be used.
|
||||
|
||||
## Accessing Request Data
|
||||
|
||||
Details of the current HTTP request (the one being made to execute the script) are available as the instance attribute `self.request`. This can be used to infer, for example, the user executing the script and the client IP address:
|
||||
|
||||
```python
|
||||
username = self.request.user.username
|
||||
ip_address = self.request.META.get('HTTP_X_FORWARDED_FOR') or \
|
||||
self.request.META.get('REMOTE_ADDR')
|
||||
self.log_info(f"Running as user {username} (IP: {ip_address})...")
|
||||
```
|
||||
|
||||
For a complete list of available request parameters, please see the [Django documentation](https://docs.djangoproject.com/en/stable/ref/request-response/).
|
||||
|
||||
## Reading Data from Files
|
||||
|
||||
The Script class provides two convenience methods for reading data from files:
|
||||
|
||||
* `load_yaml`
|
||||
* `load_json`
|
||||
|
||||
These two methods will load data in YAML or JSON format, respectively, from files within the local path (i.e. `SCRIPTS_ROOT`).
|
||||
|
||||
## Logging
|
||||
|
||||
The Script object provides a set of convenient functions for recording messages at different severity levels:
|
||||
|
||||
* `log_debug`
|
||||
* `log_success`
|
||||
* `log_info`
|
||||
* `log_warning`
|
||||
* `log_failure`
|
||||
|
||||
Log messages are returned to the user upon execution of the script. Markdown rendering is supported for log messages.
|
||||
|
||||
## Change Logging
|
||||
|
||||
To generate the correct change log data when editing an existing object, a snapshot of the object must be taken before making any changes to the object.
|
||||
|
||||
```python
|
||||
if obj.pk and hasattr(obj, 'snapshot'):
|
||||
obj.snapshot()
|
||||
|
||||
obj.property = "New Value"
|
||||
obj.full_clean()
|
||||
obj.save()
|
||||
```
|
||||
|
||||
## Error handling
|
||||
|
||||
Sometimes things go wrong and a script will run into an `Exception`. If that happens and an uncaught exception is raised by the custom script, the execution is aborted and a full stack trace is reported.
|
||||
|
||||
Although this is helpful for debugging, in some situations it might be required to cleanly abort the execution of a custom script (e.g. because of invalid input data) and thereby make sure no changes are performed on the database. In this case the script can throw an `AbortScript` exception, which will prevent the stack trace from being reported, but still terminating the script's execution and reporting a given error message.
|
||||
|
||||
```python
|
||||
from utilities.exceptions import AbortScript
|
||||
|
||||
if some_error:
|
||||
raise AbortScript("Some meaningful error message")
|
||||
```
|
||||
|
||||
## Variable Reference
|
||||
|
||||
### Default Options
|
||||
|
||||
All custom script variables support the following default options:
|
||||
|
||||
* `default` - The field's default value
|
||||
* `description` - A brief user-friendly description of the field
|
||||
* `label` - The field name to be displayed in the rendered form
|
||||
* `required` - Indicates whether the field is mandatory (all fields are required by default)
|
||||
* `widget` - The class of form widget to use (see the [Django documentation](https://docs.djangoproject.com/en/stable/ref/forms/widgets/))
|
||||
|
||||
### StringVar
|
||||
|
||||
Stores a string of characters (i.e. text). Options include:
|
||||
|
||||
* `min_length` - Minimum number of characters
|
||||
* `max_length` - Maximum number of characters
|
||||
* `regex` - A regular expression against which the provided value must match
|
||||
|
||||
Note that `min_length` and `max_length` can be set to the same number to effect a fixed-length field.
|
||||
|
||||
### TextVar
|
||||
|
||||
Arbitrary text of any length. Renders as a multi-line text input field.
|
||||
|
||||
### IntegerVar
|
||||
|
||||
Stores a numeric integer. Options include:
|
||||
|
||||
* `min_value` - Minimum value
|
||||
* `max_value` - Maximum value
|
||||
|
||||
### BooleanVar
|
||||
|
||||
A true/false flag. This field has no options beyond the defaults listed above.
|
||||
|
||||
### ChoiceVar
|
||||
|
||||
A set of choices from which the user can select one.
|
||||
|
||||
* `choices` - A list of `(value, label)` tuples representing the available choices. For example:
|
||||
|
||||
```python
|
||||
CHOICES = (
|
||||
('n', 'North'),
|
||||
('s', 'South'),
|
||||
('e', 'East'),
|
||||
('w', 'West')
|
||||
)
|
||||
|
||||
direction = ChoiceVar(choices=CHOICES)
|
||||
```
|
||||
|
||||
In the example above, selecting the choice labeled "North" will submit the value `n`.
|
||||
|
||||
### MultiChoiceVar
|
||||
|
||||
Similar to `ChoiceVar`, but allows for the selection of multiple choices.
|
||||
|
||||
### ObjectVar
|
||||
|
||||
A particular object within NetBox. Each ObjectVar must specify a particular model, and allows the user to select one of the available instances. ObjectVar accepts several arguments, listed below.
|
||||
|
||||
* `model` - The model class
|
||||
* `query_params` - A dictionary of query parameters to use when retrieving available options (optional)
|
||||
* `null_option` - A label representing a "null" or empty choice (optional)
|
||||
|
||||
To limit the selections available within the list, additional query parameters can be passed as the `query_params` dictionary. For example, to show only devices with an "active" status:
|
||||
|
||||
```python
|
||||
device = ObjectVar(
|
||||
model=Device,
|
||||
query_params={
|
||||
'status': 'active'
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
Multiple values can be specified by assigning a list to the dictionary key. It is also possible to reference the value of other fields in the form by prepending a dollar sign (`$`) to the variable's name.
|
||||
|
||||
```python
|
||||
region = ObjectVar(
|
||||
model=Region
|
||||
)
|
||||
site = ObjectVar(
|
||||
model=Site,
|
||||
query_params={
|
||||
'region_id': '$region'
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
### MultiObjectVar
|
||||
|
||||
Similar to `ObjectVar`, but allows for the selection of multiple objects.
|
||||
|
||||
### FileVar
|
||||
|
||||
An uploaded file. Note that uploaded files are present in memory only for the duration of the script's execution: They will not be automatically saved for future use. The script is responsible for writing file contents to disk where necessary.
|
||||
|
||||
### IPAddressVar
|
||||
|
||||
An IPv4 or IPv6 address, without a mask. Returns a `netaddr.IPAddress` object.
|
||||
|
||||
### IPAddressWithMaskVar
|
||||
|
||||
An IPv4 or IPv6 address with a mask. Returns a `netaddr.IPNetwork` object which includes the mask.
|
||||
|
||||
### IPNetworkVar
|
||||
|
||||
An IPv4 or IPv6 network with a mask. Returns a `netaddr.IPNetwork` object. Two attributes are available to validate the provided mask:
|
||||
|
||||
* `min_prefix_length` - Minimum length of the mask
|
||||
* `max_prefix_length` - Maximum length of the mask
|
||||
|
||||
## Running Custom Scripts
|
||||
|
||||
!!! note
|
||||
To run a custom script, a user must be assigned the `extras.run_script` permission. This is achieved by assigning the user (or group) a permission on the Script object and specifying the `run` action in the admin UI as shown below.
|
||||
|
||||

|
||||
|
||||
### Via the Web UI
|
||||
|
||||
Custom scripts can be run via the web UI by navigating to the script, completing any required form data, and clicking the "run script" button. It is possible to schedule a script to be executed at specified time in the future. A scheduled script can be canceled by deleting the associated job result object.
|
||||
|
||||
### Via the API
|
||||
|
||||
To run a script via the REST API, issue a POST request to the script's endpoint specifying the form data and commitment. For example, to run a script named `example.MyReport`, we would make a request such as the following:
|
||||
|
||||
```no-highlight
|
||||
curl -X POST \
|
||||
-H "Authorization: Token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Accept: application/json; indent=4" \
|
||||
http://netbox/api/extras/scripts/example.MyReport/ \
|
||||
--data '{"data": {"foo": "somevalue", "bar": 123}, "commit": true}'
|
||||
```
|
||||
|
||||
Optionally `schedule_at` can be passed in the form data with a datetime string to schedule a script at the specified date and time.
|
||||
|
||||
### Via the CLI
|
||||
|
||||
Scripts can be run on the CLI by invoking the management command:
|
||||
|
||||
```
|
||||
python3 manage.py runscript [--commit] [--loglevel {debug,info,warning,error,critical}] [--data "<data>"] <module>.<script>
|
||||
```
|
||||
|
||||
The required ``<module>.<script>`` argument is the script to run where ``<module>`` is the name of the python file in the ``scripts`` directory without the ``.py`` extension and ``<script>`` is the name of the script class in the ``<module>`` to run.
|
||||
|
||||
The optional ``--data "<data>"`` argument is the data to send to the script
|
||||
|
||||
The optional ``--loglevel`` argument is the desired logging level to output to the console.
|
||||
|
||||
The optional ``--commit`` argument will commit any changes in the script to the database.
|
||||
|
||||
## Example
|
||||
|
||||
Below is an example script that creates new objects for a planned site. The user is prompted for three variables:
|
||||
|
||||
* The name of the new site
|
||||
* The device model (a filtered list of defined device types)
|
||||
* The number of access switches to create
|
||||
|
||||
These variables are presented as a web form to be completed by the user. Once submitted, the script's `run()` method is called to create the appropriate objects.
|
||||
|
||||
```python
|
||||
from django.utils.text import slugify
|
||||
|
||||
from dcim.choices import DeviceStatusChoices, SiteStatusChoices
|
||||
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
|
||||
from extras.scripts import *
|
||||
|
||||
|
||||
class NewBranchScript(Script):
|
||||
|
||||
class Meta:
|
||||
name = "New Branch"
|
||||
description = "Provision a new branch site"
|
||||
field_order = ['site_name', 'switch_count', 'switch_model']
|
||||
|
||||
site_name = StringVar(
|
||||
description="Name of the new site"
|
||||
)
|
||||
switch_count = IntegerVar(
|
||||
description="Number of access switches to create"
|
||||
)
|
||||
manufacturer = ObjectVar(
|
||||
model=Manufacturer,
|
||||
required=False
|
||||
)
|
||||
switch_model = ObjectVar(
|
||||
description="Access switch model",
|
||||
model=DeviceType,
|
||||
query_params={
|
||||
'manufacturer_id': '$manufacturer'
|
||||
}
|
||||
)
|
||||
|
||||
def run(self, data, commit):
|
||||
|
||||
# Create the new site
|
||||
site = Site(
|
||||
name=data['site_name'],
|
||||
slug=slugify(data['site_name']),
|
||||
status=SiteStatusChoices.STATUS_PLANNED
|
||||
)
|
||||
site.full_clean()
|
||||
site.save()
|
||||
self.log_success(f"Created new site: {site}")
|
||||
|
||||
# Create access switches
|
||||
switch_role = DeviceRole.objects.get(name='Access Switch')
|
||||
for i in range(1, data['switch_count'] + 1):
|
||||
switch = Device(
|
||||
device_type=data['switch_model'],
|
||||
name=f'{site.slug}-switch{i}',
|
||||
site=site,
|
||||
status=DeviceStatusChoices.STATUS_PLANNED,
|
||||
role=switch_role
|
||||
)
|
||||
switch.full_clean()
|
||||
switch.save()
|
||||
self.log_success(f"Created new switch: {switch}")
|
||||
|
||||
# Generate a CSV table of new devices
|
||||
output = [
|
||||
'name,make,model'
|
||||
]
|
||||
for switch in Device.objects.filter(site=site):
|
||||
attrs = [
|
||||
switch.name,
|
||||
switch.device_type.manufacturer.name,
|
||||
switch.device_type.model
|
||||
]
|
||||
output.append(','.join(attrs))
|
||||
|
||||
return '\n'.join(output)
|
||||
```
|
||||
118
docs/customization/custom-validation.md
Normal file
118
docs/customization/custom-validation.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# Custom Validation
|
||||
|
||||
NetBox validates every object prior to it being written to the database to ensure data integrity. This validation includes things like checking for proper formatting and that references to related objects are valid. However, you may wish to supplement this validation with some rules of your own. For example, perhaps you require that every site's name conforms to a specific pattern. This can be done using custom validation rules.
|
||||
|
||||
## Custom Validation Rules
|
||||
|
||||
Custom validation rules are expressed as a mapping of model attributes to a set of rules to which that attribute must conform. For example:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": {
|
||||
"min_length": 5,
|
||||
"max_length": 30
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This defines a custom validator which checks that the length of the `name` attribute for an object is at least five characters long, and no longer than 30 characters. This validation is executed _after_ NetBox has performed its own internal validation.
|
||||
|
||||
The `CustomValidator` class supports several validation types:
|
||||
|
||||
* `min`: Minimum value
|
||||
* `max`: Maximum value
|
||||
* `min_length`: Minimum string length
|
||||
* `max_length`: Maximum string length
|
||||
* `regex`: Application of a [regular expression](https://en.wikipedia.org/wiki/Regular_expression)
|
||||
* `required`: A value must be specified
|
||||
* `prohibited`: A value must _not_ be specified
|
||||
|
||||
The `min` and `max` types should be defined for numeric values, whereas `min_length`, `max_length`, and `regex` are suitable for character strings (text values). The `required` and `prohibited` validators may be used for any field, and should be passed a value of `True`.
|
||||
|
||||
!!! warning
|
||||
Bear in mind that these validators merely supplement NetBox's own validation: They will not override it. For example, if a certain model field is required by NetBox, setting a validator for it with `{'prohibited': True}` will not work.
|
||||
|
||||
### Custom Validation Logic
|
||||
|
||||
There may be instances where the provided validation types are insufficient. NetBox provides a `CustomValidator` class which can be extended to enforce arbitrary validation logic by overriding its `validate()` method, and calling `fail()` when an unsatisfactory condition is detected.
|
||||
|
||||
```python
|
||||
from extras.validators import CustomValidator
|
||||
|
||||
class MyValidator(CustomValidator):
|
||||
|
||||
def validate(self, instance):
|
||||
if instance.status == 'active' and not instance.description:
|
||||
self.fail("Active sites must have a description set!", field='status')
|
||||
```
|
||||
|
||||
The `fail()` method may optionally specify a field with which to associate the supplied error message. If specified, the error message will appear to the user as associated with this field. If omitted, the error message will not be associated with any field.
|
||||
|
||||
## Assigning Custom Validators
|
||||
|
||||
Custom validators are associated with specific NetBox models under the [CUSTOM_VALIDATORS](../configuration/data-validation.md#custom_validators) configuration parameter. There are three manners by which custom validation rules can be defined:
|
||||
|
||||
1. Plain JSON mapping (no custom logic)
|
||||
2. Dotted path to a custom validator class
|
||||
3. Direct reference to a custom validator class
|
||||
|
||||
### Plain Data
|
||||
|
||||
For cases where custom logic is not needed, it is sufficient to pass validation rules as plain JSON-compatible objects. This approach typically affords the most portability for your configuration. For instance:
|
||||
|
||||
```python
|
||||
CUSTOM_VALIDATORS = {
|
||||
"dcim.site": [
|
||||
{
|
||||
"name": {
|
||||
"min_length": 5,
|
||||
"max_length": 30,
|
||||
}
|
||||
}
|
||||
],
|
||||
"dcim.device": [
|
||||
{
|
||||
"platform": {
|
||||
"required": True,
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Dotted Path
|
||||
|
||||
In instances where a custom validator class is needed, it can be referenced by its Python path (relative to NetBox's working directory):
|
||||
|
||||
```python
|
||||
CUSTOM_VALIDATORS = {
|
||||
'dcim.site': (
|
||||
'my_validators.Validator1',
|
||||
'my_validators.Validator2',
|
||||
),
|
||||
'dcim.device': (
|
||||
'my_validators.Validator3',
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
### Direct Class Reference
|
||||
|
||||
This approach requires each class being instantiated to be imported directly within the Python configuration file.
|
||||
|
||||
```python
|
||||
from my_validators import Validator1, Validator2, Validator3
|
||||
|
||||
CUSTOM_VALIDATORS = {
|
||||
'dcim.site': (
|
||||
Validator1(),
|
||||
Validator2(),
|
||||
),
|
||||
'dcim.device': (
|
||||
Validator3(),
|
||||
)
|
||||
}
|
||||
```
|
||||
|
||||
!!! note
|
||||
Even if defining only a single validator, it must be passed as an iterable.
|
||||
81
docs/customization/export-templates.md
Normal file
81
docs/customization/export-templates.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Export Templates
|
||||
|
||||
NetBox allows users to define custom templates that can be used when exporting objects. To create an export template, navigate to Customization > Export Templates.
|
||||
|
||||
Each export template is associated with a certain type of object. For instance, if you create an export template for VLANs, your custom template will appear under the "Export" button on the VLANs list. Each export template must have a name, and may optionally designate a specific export [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) and/or file extension.
|
||||
|
||||
Export templates must be written in [Jinja2](https://jinja.palletsprojects.com/).
|
||||
|
||||
!!! note
|
||||
The name `table` is reserved for internal use.
|
||||
|
||||
!!! warning
|
||||
Export templates are rendered using user-submitted code, which may pose security risks under certain conditions. Only grant permission to create or modify export templates to trusted users.
|
||||
|
||||
The list of objects returned from the database when rendering an export template is stored in the `queryset` variable, which you'll typically want to iterate through using a `for` loop. Object properties can be access by name. For example:
|
||||
|
||||
```jinja2
|
||||
{% for rack in queryset %}
|
||||
Rack: {{ rack.name }}
|
||||
Site: {{ rack.site.name }}
|
||||
Height: {{ rack.u_height }}U
|
||||
{% endfor %}
|
||||
```
|
||||
|
||||
To access custom fields of an object within a template, use the `cf` attribute. For example, `{{ obj.cf.color }}` will return the value (if any) for a custom field named `color` on `obj`.
|
||||
|
||||
If you need to use the config context data in an export template, you'll should use the function `get_config_context` to get all the config context data. For example:
|
||||
```
|
||||
{% for server in queryset %}
|
||||
{% set data = server.get_config_context() %}
|
||||
{{ data.syslog }}
|
||||
{% endfor %}
|
||||
```
|
||||
|
||||
The `as_attachment` attribute of an export template controls its behavior when rendered. If true, the rendered content will be returned to the user as a downloadable file. If false, it will be displayed within the browser. (This may be handy e.g. for generating HTML content.)
|
||||
|
||||
A MIME type and file extension can optionally be defined for each export template. The default MIME type is `text/plain`.
|
||||
|
||||
|
||||
## REST API Integration
|
||||
|
||||
When it is necessary to provide authentication credentials (such as when [`LOGIN_REQUIRED`](../configuration/security.md#login_required) has been enabled), it is recommended to render export templates via the REST API. This allows the client to specify an authentication token. To render an export template via the REST API, make a `GET` request to the model's list endpoint and append the `export` parameter specifying the export template name. For example:
|
||||
|
||||
```
|
||||
GET /api/dcim/sites/?export=MyTemplateName
|
||||
```
|
||||
|
||||
Note that the body of the response will contain only the rendered export template content, as opposed to a JSON object or list.
|
||||
|
||||
## Example
|
||||
|
||||
Here's an example device export template that will generate a simple Nagios configuration from a list of devices.
|
||||
|
||||
```
|
||||
{% for device in queryset %}{% if device.status and device.primary_ip %}define host{
|
||||
use generic-switch
|
||||
host_name {{ device.name }}
|
||||
address {{ device.primary_ip.address.ip }}
|
||||
}
|
||||
{% endif %}{% endfor %}
|
||||
```
|
||||
|
||||
The generated output will look something like this:
|
||||
|
||||
```
|
||||
define host{
|
||||
use generic-switch
|
||||
host_name switch1
|
||||
address 192.0.2.1
|
||||
}
|
||||
define host{
|
||||
use generic-switch
|
||||
host_name switch2
|
||||
address 192.0.2.2
|
||||
}
|
||||
define host{
|
||||
use generic-switch
|
||||
host_name switch3
|
||||
address 192.0.2.3
|
||||
}
|
||||
```
|
||||
167
docs/customization/reports.md
Normal file
167
docs/customization/reports.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# NetBox Reports
|
||||
|
||||
A NetBox report is a mechanism for validating the integrity of data within NetBox. Running a report allows the user to verify that the objects defined within NetBox meet certain arbitrary conditions. For example, you can write reports to check that:
|
||||
|
||||
* All top-of-rack switches have a console connection
|
||||
* Every router has a loopback interface with an IP address assigned
|
||||
* Each interface description conforms to a standard format
|
||||
* Every site has a minimum set of VLANs defined
|
||||
* All IP addresses have a parent prefix
|
||||
|
||||
...and so on. Reports are completely customizable, so there's practically no limit to what you can test for.
|
||||
|
||||
## Writing Reports
|
||||
|
||||
Reports must be saved as files in the [`REPORTS_ROOT`](../configuration/system.md#reports_root) path (which defaults to `netbox/reports/`). Each file created within this path is considered a separate module. Each module holds one or more reports (Python classes), each of which performs a certain function. The logic of each report is broken into discrete test methods, each of which applies a small portion of the logic comprising the overall test.
|
||||
|
||||
!!! warning
|
||||
The reports path includes a file named `__init__.py`, which registers the path as a Python module. Do not delete this file.
|
||||
|
||||
For example, we can create a module named `devices.py` to hold all of our reports which pertain to devices in NetBox. Within that module, we might define several reports. Each report is defined as a Python class inheriting from `extras.reports.Report`.
|
||||
|
||||
```
|
||||
from extras.reports import Report
|
||||
|
||||
class DeviceConnectionsReport(Report):
|
||||
description = "Validate the minimum physical connections for each device"
|
||||
|
||||
class DeviceIPsReport(Report):
|
||||
description = "Check that every device has a primary IP address assigned"
|
||||
```
|
||||
|
||||
Within each report class, we'll create a number of test methods to execute our report's logic. In DeviceConnectionsReport, for instance, we want to ensure that every live device has a console connection, an out-of-band management connection, and two power connections.
|
||||
|
||||
```
|
||||
from dcim.choices import DeviceStatusChoices
|
||||
from dcim.models import ConsolePort, Device, PowerPort
|
||||
from extras.reports import Report
|
||||
|
||||
|
||||
class DeviceConnectionsReport(Report):
|
||||
description = "Validate the minimum physical connections for each device"
|
||||
|
||||
def test_console_connection(self):
|
||||
|
||||
# Check that every console port for every active device has a connection defined.
|
||||
active = DeviceStatusChoices.STATUS_ACTIVE
|
||||
for console_port in ConsolePort.objects.prefetch_related('device').filter(device__status=active):
|
||||
if not console_port.connected_endpoints:
|
||||
self.log_failure(
|
||||
console_port.device,
|
||||
"No console connection defined for {}".format(console_port.name)
|
||||
)
|
||||
elif not console_port.connection_status:
|
||||
self.log_warning(
|
||||
console_port.device,
|
||||
"Console connection for {} marked as planned".format(console_port.name)
|
||||
)
|
||||
else:
|
||||
self.log_success(console_port.device)
|
||||
|
||||
def test_power_connections(self):
|
||||
|
||||
# Check that every active device has at least two connected power supplies.
|
||||
for device in Device.objects.filter(status=DeviceStatusChoices.STATUS_ACTIVE):
|
||||
connected_ports = 0
|
||||
for power_port in PowerPort.objects.filter(device=device):
|
||||
if power_port.connected_endpoints:
|
||||
connected_ports += 1
|
||||
if not power_port.path.is_active:
|
||||
self.log_warning(
|
||||
device,
|
||||
"Power connection for {} marked as planned".format(power_port.name)
|
||||
)
|
||||
if connected_ports < 2:
|
||||
self.log_failure(
|
||||
device,
|
||||
"{} connected power supplies found (2 needed)".format(connected_ports)
|
||||
)
|
||||
else:
|
||||
self.log_success(device)
|
||||
```
|
||||
|
||||
As you can see, reports are completely customizable. Validation logic can be as simple or as complex as needed. Also note that the `description` attribute support markdown syntax. It will be rendered in the report list page.
|
||||
|
||||
!!! warning
|
||||
Reports should never alter data: If you find yourself using the `create()`, `save()`, `update()`, or `delete()` methods on objects within reports, stop and re-evaluate what you're trying to accomplish. Note that there are no safeguards against the accidental alteration or destruction of data.
|
||||
|
||||
## Report Attributes
|
||||
|
||||
### `description`
|
||||
|
||||
A human-friendly description of what your report does.
|
||||
|
||||
### `scheduling_enabled`
|
||||
|
||||
By default, a report can be scheduled for execution at a later time. Setting `scheduling_enabled` to False disables this ability: Only immediate execution will be possible. (This also disables the ability to set a recurring execution interval.)
|
||||
|
||||
### `job_timeout`
|
||||
|
||||
Set the maximum allowed runtime for the report. If not set, `RQ_DEFAULT_TIMEOUT` will be used.
|
||||
|
||||
## Logging
|
||||
|
||||
The following methods are available to log results within a report:
|
||||
|
||||
* log(message)
|
||||
* log_success(object, message=None)
|
||||
* log_info(object, message)
|
||||
* log_warning(object, message)
|
||||
* log_failure(object, message)
|
||||
|
||||
The recording of one or more failure messages will automatically flag a report as failed. It is advised to log a success for each object that is evaluated so that the results will reflect how many objects are being reported on. (The inclusion of a log message is optional for successes.) Messages recorded with `log()` will appear in a report's results but are not associated with a particular object or status. Log messages also support using markdown syntax and will be rendered on the report result page.
|
||||
|
||||
To perform additional tasks, such as sending an email or calling a webhook, before or after a report is run, extend the `pre_run()` and/or `post_run()` methods, respectively.
|
||||
|
||||
By default, reports within a module are ordered alphabetically in the reports list page. To return reports in a specific order, you can define the `report_order` variable at the end of your module. The `report_order` variable is a tuple which contains each Report class in the desired order. Any reports that are omitted from this list will be listed last.
|
||||
|
||||
```
|
||||
from extras.reports import Report
|
||||
|
||||
class DeviceConnectionsReport(Report)
|
||||
pass
|
||||
|
||||
class DeviceIPsReport(Report)
|
||||
pass
|
||||
|
||||
report_order = (DeviceIPsReport, DeviceConnectionsReport)
|
||||
```
|
||||
|
||||
Once you have created a report, it will appear in the reports list. Initially, reports will have no results associated with them. To generate results, run the report.
|
||||
|
||||
## Running Reports
|
||||
|
||||
!!! note
|
||||
To run a report, a user must be assigned the `extras.run_report` permission. This is achieved by assigning the user (or group) a permission on the Report object and specifying the `run` action in the admin UI as shown below.
|
||||
|
||||

|
||||
|
||||
### Via the Web UI
|
||||
|
||||
Reports can be run via the web UI by navigating to the report and clicking the "run report" button at top right. Once a report has been run, its associated results will be included in the report view. It is possible to schedule a report to be executed at specified time in the future. A scheduled report can be canceled by deleting the associated job result object.
|
||||
|
||||
### Via the API
|
||||
|
||||
To run a report via the API, simply issue a POST request to its `run` endpoint. Reports are identified by their module and class name.
|
||||
|
||||
```
|
||||
POST /api/extras/reports/<module>.<name>/run/
|
||||
```
|
||||
|
||||
Our example report above would be called as:
|
||||
|
||||
```
|
||||
POST /api/extras/reports/devices.DeviceConnectionsReport/run/
|
||||
```
|
||||
|
||||
Optionally `schedule_at` can be passed in the form data with a datetime string to schedule a script at the specified date and time.
|
||||
|
||||
### Via the CLI
|
||||
|
||||
Reports can be run on the CLI by invoking the management command:
|
||||
|
||||
```
|
||||
python3 manage.py runreport <module>
|
||||
```
|
||||
|
||||
where ``<module>`` is the name of the python file in the ``reports`` directory without the ``.py`` extension. One or more report modules may be specified.
|
||||
96
docs/dcim.md
96
docs/dcim.md
@@ -1,96 +0,0 @@
|
||||
<h1>DCIM</h1>
|
||||
|
||||
Data center infrastructure management (DCIM) entails all physical assets: sites, racks, devices, cabling, etc.
|
||||
|
||||
[TOC]
|
||||
|
||||
# Sites
|
||||
|
||||
How you define sites will depend on the nature of your organization, but typically a site will equate a building or campus. For example, a chain of banks might create a site to represent each of its branches, a site for its corporate headquarters, and two additional sites for its presence in two colocation facilities.
|
||||
|
||||
Sites can be assigned an optional facility ID to identify the actual facility housing colocated equipment.
|
||||
|
||||
---
|
||||
|
||||
# Racks
|
||||
|
||||
Within each site exist one or more racks. Each rack within NetBox represents a physical two- or four-post equipment rack in which equipment is mounted. Rack height is measured in *rack units *(U); most racks are between 42U and 48U, but NetBox allows you to define racks of any height. Each rack has two faces (front and rear) on which devices can be mounted.
|
||||
|
||||
Each rack is assigned a name and (optionally) a separate facility ID. This is helpful when leasing space in a data center your organization does not own: The facility will often assign a seemingly arbitrary ID to a rack (for example, M204.313) whereas internally you refer to is simply as "R113." The facility ID can alternatively be used to store a rack's serial number.
|
||||
|
||||
### Rack Groups
|
||||
|
||||
Racks can be arranged into groups. As with sites, how you choose to designate rack groups will depend on the nature of your organization. For example, if each site is a campus, each group might be a building. If each site is a building, each rack group might be a floor or room.
|
||||
|
||||
Each group is assigned to a parent site for easy navigation. Hierarchical recursion of rack groups is not currently supported.
|
||||
|
||||
---
|
||||
|
||||
# Device Types
|
||||
|
||||
A device type represents a particular manufacturer and model of equipment. Device types describe the physical attributes of a device (rack height and depth), its class (e.g. console server, PDU, etc.), and its individual components (console, power, and data).
|
||||
|
||||
### Manufacturers
|
||||
|
||||
Each device type belongs to one manufacturer; e.g. Cisco, Opengear, or APC. Manufacturers are used to group different models of device.
|
||||
|
||||
### Component Templates
|
||||
|
||||
Each device type is assigned a number of component templates which describe the console, power, and data ports a device has. These are:
|
||||
|
||||
* Console port templates
|
||||
* Console server port templates
|
||||
* Power port templates
|
||||
* Power outlet templates
|
||||
* Interface templates
|
||||
|
||||
Whenever a new device is created, it is automatically assigned console, power, and interface components per the templates assigned to its device type. For example, suppose your network employs Juniper EX4300-48T switches. You would create a device type with a model name "EX4300-48T" and assign it to the manufacturer "Juniper." You might then also create the following templates for it:
|
||||
|
||||
* One template for a console port ("Console")
|
||||
* Two templates for power ports ("PSU0" and "PSU1")
|
||||
* 48 templates for 1GE interfaces ("ge-0/0/0" through "ge-0/0/47")
|
||||
* Four templates for 10GE interfaces ("xe-0/2/0" through "xe-0/2/3")
|
||||
|
||||
Once you've done this, every new device that you create as an instance of this type will automatically be assigned each of the components listed above.
|
||||
|
||||
Note that assignment of components from templates occurs only at the time of device creation: If you modify the templates of a device type, it will not affect devices which have already been created. However, you always have the option of adding, modifying, or deleting components of existing devices individually.
|
||||
|
||||
---
|
||||
|
||||
# Devices
|
||||
|
||||
Every piece of hardware which is installed within a rack exists in NetBox as a device. Devices are measured in rack units (U) and whether they are full depth. 0U devices which can be installed in a rack but don't consume vertical rack space (such as a vertically-mounted power distribution unit) can also be defined.
|
||||
|
||||
A device is said to be "full depth" if its installation on one rack face prevents the installation of any other device on the opposite face within the same rack unit(s). This could be either because the device is physically too deep to allow a device behind it, or because the installation of an opposing device would impede air flow.
|
||||
|
||||
Each device has a physical device type (make and model), which is discussed below.
|
||||
|
||||
### Roles
|
||||
|
||||
NetBox allows for the definition of arbitrary device roles by which devices can be organized. For example, you might create roles for core switches, distribution switches, and access switches. In the interest of simplicity, device can only belong to one device role.
|
||||
|
||||
### Platforms
|
||||
|
||||
A device's platform is used to denote the type of software running on it. This can be helpful when it is necessary to distinguish between, for instance, different feature sets. Note that two devices of same type may be assigned different platforms: for example, one Juniper MX240 running Junos 14 and another running Junos 15.
|
||||
|
||||
The assignment of platforms to devices is an entirely optional feature, and may be disregarded if not desired.
|
||||
|
||||
### Modules
|
||||
|
||||
A device can be assigned modules which represent internal components. Currently, these are used merely for inventory tracking, although future development might see their functionality expand.
|
||||
|
||||
### Components
|
||||
|
||||
There are five types of device components which comprise all of the interconnection logic with NetBox:
|
||||
|
||||
* Console ports
|
||||
* Console server ports
|
||||
* Power ports
|
||||
* Power outlets
|
||||
* Interfaces
|
||||
|
||||
Console ports connect only to console server ports, and power ports connect only to power outlets. Interfaces connect to one another in a symmetric manner: If interface A connects to interface B, interface B therefore connects to interface A. (The relationship between two interfaces is actually represented in the database by an InterfaceConnection object, but this is transparent to the user.)
|
||||
|
||||
Each type of connection can be defined as either *planned* or *connected*. This allows for easily denoting connections which have not yet been installed.
|
||||
|
||||
In addition to a connecting peer, interfaces are also assigned a form factor and may be designated as management-only (for out-of-band management). Interfaces may also be assigned a short description.
|
||||
96
docs/development/adding-models.md
Normal file
96
docs/development/adding-models.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# Adding Models
|
||||
|
||||
## 1. Define the model class
|
||||
|
||||
Models within each app are stored in either `models.py` or within a submodule under the `models/` directory. When creating a model, be sure to subclass the [appropriate base model](models.md) from `netbox.models`. This will typically be NetBoxModel or OrganizationalModel. Remember to add the model class to the `__all__` listing for the module.
|
||||
|
||||
Each model should define, at a minimum:
|
||||
|
||||
* A `Meta` class specifying a deterministic ordering (if ordered by fields other than the primary ID)
|
||||
* A `__str__()` method returning a user-friendly string representation of the instance
|
||||
* A `get_absolute_url()` method returning an instance's direct URL (using `reverse()`)
|
||||
|
||||
## 2. Define field choices
|
||||
|
||||
If the model has one or more fields with static choices, define those choices in `choices.py` by subclassing `utilities.choices.ChoiceSet`.
|
||||
|
||||
## 3. Generate database migrations
|
||||
|
||||
Once your model definition is complete, generate database migrations by running `manage.py makemigrations -n $NAME --no-header`. Always specify a short unique name when generating migrations.
|
||||
|
||||
!!! info "Configuration Required"
|
||||
Set `DEVELOPER = True` in your NetBox configuration to enable the creation of new migrations.
|
||||
|
||||
## 4. Add all standard views
|
||||
|
||||
Most models will need view classes created in `views.py` to serve the following operations:
|
||||
|
||||
* List view
|
||||
* Detail view
|
||||
* Edit view
|
||||
* Delete view
|
||||
* Bulk import
|
||||
* Bulk edit
|
||||
* Bulk delete
|
||||
|
||||
## 5. Add URL paths
|
||||
|
||||
Add the relevant URL path for each view created in the previous step to `urls.py`.
|
||||
|
||||
## 6. Add relevant forms
|
||||
|
||||
Depending on the type of model being added, you may need to define several types of form classes. These include:
|
||||
|
||||
* A base model form (for creating/editing individual objects)
|
||||
* A bulk edit form
|
||||
* A bulk import form (for CSV-based import)
|
||||
* A filterset form (for filtering the object list view)
|
||||
|
||||
## 7. Create the FilterSet
|
||||
|
||||
Each model should have a corresponding FilterSet class defined. This is used to filter UI and API queries. Subclass the appropriate class from `netbox.filtersets` that matches the model's parent class.
|
||||
|
||||
## 8. Create the table class
|
||||
|
||||
Create a table class for the model in `tables.py` by subclassing `utilities.tables.BaseTable`. Under the table's `Meta` class, be sure to list both the fields and default columns.
|
||||
|
||||
## 9. Create a SearchIndex subclass
|
||||
|
||||
If this model will be included in global search results, create a subclass of `netbox.search.SearchIndex` for it and specify the fields to be indexed.
|
||||
|
||||
## 10. Create the object template
|
||||
|
||||
Create the HTML template for the object view. (The other views each typically employ a generic template.) This template should extend `generic/object.html`.
|
||||
|
||||
## 11. Add the model to the navigation menu
|
||||
|
||||
Add the relevant navigation menu items in `netbox/netbox/navigation/menu.py`.
|
||||
|
||||
## 12. REST API components
|
||||
|
||||
Create the following for each model:
|
||||
|
||||
* Detailed (full) model serializer in `api/serializers.py`
|
||||
* Nested serializer in `api/nested_serializers.py`
|
||||
* API view in `api/views.py`
|
||||
* Endpoint route in `api/urls.py`
|
||||
|
||||
## 13. GraphQL API components
|
||||
|
||||
Create a Graphene object type for the model in `graphql/types.py` by subclassing the appropriate class from `netbox.graphql.types`.
|
||||
|
||||
Also extend the schema class defined in `graphql/schema.py` with the individual object and object list fields per the established convention.
|
||||
|
||||
## 14. Add tests
|
||||
|
||||
Add tests for the following:
|
||||
|
||||
* UI views
|
||||
* API views
|
||||
* Filter sets
|
||||
|
||||
## 15. Documentation
|
||||
|
||||
Create a new documentation page for the model in `docs/models/<app_label>/<model_name>.md`. Include this file under the "features" documentation where appropriate.
|
||||
|
||||
Also add your model to the index in `docs/development/models.md`.
|
||||
54
docs/development/application-registry.md
Normal file
54
docs/development/application-registry.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Application Registry
|
||||
|
||||
The registry is an in-memory data structure which houses various application-wide parameters, such as the list of enabled plugins. It is not exposed to the user and is not intended to be modified by any code outside of NetBox core.
|
||||
|
||||
The registry behaves essentially like a Python dictionary, with the notable exception that once a store (key) has been declared, it cannot be deleted or overwritten. The value of a store can, however, be modified; e.g. by appending a value to a list. Store values generally do not change once the application has been initialized.
|
||||
|
||||
The registry can be inspected by importing `registry` from `extras.registry`.
|
||||
|
||||
## Stores
|
||||
|
||||
### `counter_fields`
|
||||
|
||||
A dictionary mapping of models to foreign keys with which cached counter fields are associated.
|
||||
|
||||
### `data_backends`
|
||||
|
||||
A dictionary mapping data backend types to their respective classes. These are used to interact with [remote data sources](../models/core/datasource.md).
|
||||
|
||||
### `denormalized_fields`
|
||||
|
||||
Stores registration made using `netbox.denormalized.register()`. For each model, a list of related models and their field mappings is maintained to facilitate automatic updates.
|
||||
|
||||
### `model_features`
|
||||
|
||||
A dictionary of particular features (e.g. custom fields) mapped to the NetBox models which support them, arranged by app. For example:
|
||||
|
||||
```python
|
||||
{
|
||||
'custom_fields': {
|
||||
'circuits': ['provider', 'circuit'],
|
||||
'dcim': ['site', 'rack', 'devicetype', ...],
|
||||
...
|
||||
},
|
||||
'webhooks': {
|
||||
'extras': ['configcontext', 'tag', ...],
|
||||
'dcim': ['site', 'rack', 'devicetype', ...],
|
||||
},
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
Supported model features are listed in the [features matrix](./models.md#features-matrix).
|
||||
|
||||
### `plugins`
|
||||
|
||||
This store maintains all registered items for plugins, such as navigation menus, template extensions, etc.
|
||||
|
||||
### `search`
|
||||
|
||||
A dictionary mapping each model (identified by its app and label) to its search index class, if one has been registered for it.
|
||||
|
||||
### `views`
|
||||
|
||||
A hierarchical mapping of registered views for each model. Mappings are added using the `register_model_view()` decorator, and URLs paths can be generated from these using `get_model_urls()`.
|
||||
81
docs/development/extending-models.md
Normal file
81
docs/development/extending-models.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Extending Models
|
||||
|
||||
Below is a list of tasks to consider when adding a new field to a core model.
|
||||
|
||||
## 1. Generate and run database migrations
|
||||
|
||||
[Django migrations](https://docs.djangoproject.com/en/stable/topics/migrations/) are used to express changes to the database schema. In most cases, Django can generate these automatically, however very complex changes may require manual intervention. Always remember to specify a short but descriptive name when generating a new migration.
|
||||
|
||||
```
|
||||
./manage.py makemigrations <app> -n <name>
|
||||
./manage.py migrate
|
||||
```
|
||||
|
||||
Where possible, try to merge related changes into a single migration. For example, if three new fields are being added to different models within an app, these can be expressed in a single migration. You can merge a newly generated migration with an existing one by combining their `operations` lists.
|
||||
|
||||
!!! warning "Do not alter existing migrations"
|
||||
Migrations can only be merged within a release. Once a new release has been published, its migrations cannot be altered (other than for the purpose of correcting a bug).
|
||||
|
||||
## 2. Add validation logic to `clean()`
|
||||
|
||||
If the new field introduces additional validation requirements (beyond what's included with the field itself), implement them in the model's `clean()` method. Remember to call the model's original method using `super()` before or after your custom validation as appropriate:
|
||||
|
||||
```
|
||||
class Foo(models.Model):
|
||||
|
||||
def clean(self):
|
||||
super().clean()
|
||||
|
||||
# Custom validation goes here
|
||||
if self.bar is None:
|
||||
raise ValidationError()
|
||||
```
|
||||
|
||||
## 3. Update relevant querysets
|
||||
|
||||
If you're adding a relational field (e.g. `ForeignKey`) and intend to include the data when retrieving a list of objects, be sure to include the field using `prefetch_related()` as appropriate. This will optimize the view and avoid extraneous database queries.
|
||||
|
||||
## 4. Update API serializer
|
||||
|
||||
Extend the model's API serializer in `<app>.api.serializers` to include the new field. In most cases, it will not be necessary to also extend the nested serializer, which produces a minimal representation of the model.
|
||||
|
||||
## 5. Add fields to forms
|
||||
|
||||
Extend any forms to include the new field(s) as appropriate. These are found under the `forms/` directory within each app. Common forms include:
|
||||
|
||||
* **Credit/edit** - Manipulating a single object
|
||||
* **Bulk edit** - Performing a change on many objects at once
|
||||
* **CSV import** - The form used when bulk importing objects in CSV format
|
||||
* **Filter** - Displays the options available for filtering a list of objects (both UI and API)
|
||||
|
||||
## 6. Extend object filter set
|
||||
|
||||
If the new field should be filterable, add it to the `FilterSet` for the model. If the field should be searchable, remember to query it in the FilterSet's `search()` method.
|
||||
|
||||
## 7. Add column to object table
|
||||
|
||||
If the new field will be included in the object list view, add a column to the model's table. For simple fields, adding the field name to `Meta.fields` will be sufficient. More complex fields may require declaring a custom column. Also add the field name to `default_columns` if the column should be present in the table by default.
|
||||
|
||||
## 8. Update the SearchIndex
|
||||
|
||||
Where applicable, add the new field to the model's SearchIndex for inclusion in global search.
|
||||
|
||||
## 9. Update the UI templates
|
||||
|
||||
Edit the object's view template to display the new field. There may also be a custom add/edit form template that needs to be updated.
|
||||
|
||||
## 10. Create/extend test cases
|
||||
|
||||
Create or extend the relevant test cases to verify that the new field and any accompanying validation logic perform as expected. This is especially important for relational fields. NetBox incorporates various test suites, including:
|
||||
|
||||
* API serializer/view tests
|
||||
* Filter tests
|
||||
* Form tests
|
||||
* Model tests
|
||||
* View tests
|
||||
|
||||
Be diligent to ensure all of the relevant test suites are adapted or extended as necessary to test any new functionality.
|
||||
|
||||
## 11. Update the model's documentation
|
||||
|
||||
Each model has a dedicated page in the documentation, at `models/<app>/<model>.md`. Update this file to include any relevant information about the new field.
|
||||
202
docs/development/getting-started.md
Normal file
202
docs/development/getting-started.md
Normal file
@@ -0,0 +1,202 @@
|
||||
# Getting Started
|
||||
|
||||
## Setting up a Development Environment
|
||||
|
||||
Getting started with NetBox development is pretty straightforward, and should feel very familiar to anyone with Django development experience. There are a few things you'll need:
|
||||
|
||||
* A Linux system or compatible environment
|
||||
* A PostgreSQL server, which can be installed locally [per the documentation](../installation/1-postgresql.md)
|
||||
* A Redis server, which can also be [installed locally](../installation/2-redis.md)
|
||||
* Python 3.8 or later
|
||||
|
||||
### 1. Fork the Repo
|
||||
|
||||
Assuming you'll be working on your own fork, your first step will be to fork the [official git repository](https://github.com/netbox-community/netbox). (If you're a maintainer who's going to be working directly with the official repo, skip this step.) Click the "fork" button at top right (be sure that you've logged into GitHub first).
|
||||
|
||||

|
||||
|
||||
Copy the URL provided in the dialog box.
|
||||
|
||||

|
||||
|
||||
You can then clone your GitHub fork locally for development:
|
||||
|
||||
```no-highlight hl_lines="1 9"
|
||||
$ git clone https://github.com/$username/netbox.git
|
||||
Cloning into 'netbox'...
|
||||
remote: Enumerating objects: 85949, done.
|
||||
remote: Counting objects: 100% (4672/4672), done.
|
||||
remote: Compressing objects: 100% (1224/1224), done.
|
||||
remote: Total 85949 (delta 3538), reused 4332 (delta 3438), pack-reused 81277
|
||||
Receiving objects: 100% (85949/85949), 55.16 MiB | 44.90 MiB/s, done.
|
||||
Resolving deltas: 100% (68008/68008), done.
|
||||
$ ls netbox/
|
||||
base_requirements.txt contrib docs mkdocs.yml NOTICE requirements.txt upgrade.sh
|
||||
CHANGELOG.md CONTRIBUTING.md LICENSE.txt netbox README.md scripts
|
||||
```
|
||||
|
||||
### 2. Create a New Branch
|
||||
|
||||
The NetBox project utilizes three persistent git branches to track work:
|
||||
|
||||
* `master` - Serves as a snapshot of the current stable release
|
||||
* `develop` - All development on the upcoming stable (patch) release occurs here
|
||||
* `feature` - Tracks work on an upcoming minor release
|
||||
|
||||
Typically, you'll base pull requests off of the `develop` branch, or off of `feature` if you're working on a new major release. For example, assume that the current NetBox release is v3.3.5. Work applied to the `develop` branch will appear in v3.3.6, and work done under the `feature` branch will be included in the next minor release (v3.4.0).
|
||||
|
||||
!!! warning
|
||||
**Never** merge pull requests into the `master` branch: This branch only ever merges pull requests from the `develop` branch, to effect a new release.
|
||||
|
||||
To create a new branch, first ensure that you've checked out the desired base branch, then run:
|
||||
|
||||
```no-highlight
|
||||
git checkout -B $branchname
|
||||
```
|
||||
|
||||
When naming a new git branch, contributors are strongly encouraged to use the relevant issue number followed by a very brief description of the work:
|
||||
|
||||
```no-highlight
|
||||
$issue-$description
|
||||
```
|
||||
|
||||
The description should be just two or three words to imply the focus of the work being performed. For example, bug #1234 to fix a TypeError exception when creating a device might be named `1234-device-typerror`. This ensures that branches are always follow some logical ordering (e.g. when running `git branch -a`) and helps other developers quickly identify the purpose of each.
|
||||
|
||||
### 3. Enable Pre-Commit Hooks
|
||||
|
||||
NetBox ships with a [git pre-commit hook](https://githooks.com/) script that automatically checks for style compliance and missing database migrations prior to committing changes. This helps avoid erroneous commits that result in CI test failures. You are encouraged to enable it by creating a link to `scripts/git-hooks/pre-commit`:
|
||||
|
||||
```no-highlight
|
||||
cd .git/hooks/
|
||||
ln -s ../../scripts/git-hooks/pre-commit
|
||||
```
|
||||
For the pre-commit hooks to work, you will also need to install the pycodestyle package:
|
||||
|
||||
```no-highlight
|
||||
python -m pip install pycodestyle
|
||||
```
|
||||
...and set up the yarn packages as shown in the [Web UI Development Guide](web-ui.md)
|
||||
|
||||
### 4. Create a Python Virtual Environment
|
||||
|
||||
A [virtual environment](https://docs.python.org/3/tutorial/venv.html) (or "venv" for short) is like a container for a set of Python packages. These allow you to build environments suited to specific projects without interfering with system packages or other projects. When installed per the documentation, NetBox uses a virtual environment in production.
|
||||
|
||||
Create a virtual environment using the `venv` Python module:
|
||||
|
||||
```no-highlight
|
||||
mkdir ~/.venv
|
||||
python3 -m venv ~/.venv/netbox
|
||||
```
|
||||
|
||||
This will create a directory named `.venv/netbox/` in your home directory, which houses a virtual copy of the Python executable and its related libraries and tooling. When running NetBox for development, it will be run using the Python binary at `~/.venv/netbox/bin/python`.
|
||||
|
||||
!!! tip "Virtual Environments"
|
||||
Keeping virtual environments in `~/.venv/` is a common convention but entirely optional: Virtual environments can be created almost wherever you please. Also consider using [`virtualenvwrapper`](https://virtualenvwrapper.readthedocs.io/en/stable/) to simplify the management of multiple environments.
|
||||
|
||||
Once created, activate the virtual environment:
|
||||
|
||||
```no-highlight
|
||||
source ~/.venv/netbox/bin/activate
|
||||
```
|
||||
|
||||
Notice that the console prompt changes to indicate the active environment. This updates the necessary system environment variables to ensure that any Python scripts are run within the virtual environment.
|
||||
|
||||
### 5. Install Required Packages
|
||||
|
||||
With the virtual environment activated, install the project's required Python packages using the `pip` module. Required packages are defined in `requirements.txt`. Each line in this file specifies the name and specific version of a required package.
|
||||
|
||||
```no-highlight
|
||||
python -m pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 6. Configure NetBox
|
||||
|
||||
Within the `netbox/netbox/` directory, copy `configuration_example.py` to `configuration.py` and update the following parameters:
|
||||
|
||||
* `ALLOWED_HOSTS`: This can be set to `['*']` for development purposes
|
||||
* `DATABASE`: PostgreSQL database connection parameters
|
||||
* `REDIS`: Redis configuration (if different from the defaults)
|
||||
* `SECRET_KEY`: Set to a random string (use `generate_secret_key.py` in the parent directory to generate a suitable key)
|
||||
* `DEBUG`: Set to `True`
|
||||
* `DEVELOPER`: Set to `True` (this enables the creation of new database migrations)
|
||||
|
||||
### 7. Start the Development Server
|
||||
|
||||
Django provides a lightweight, auto-updating [HTTP/WSGI server](https://docs.djangoproject.com/en/stable/ref/django-admin/#runserver) for development use. It is started with the `runserver` management command:
|
||||
|
||||
```no-highlight hl_lines="1"
|
||||
$ ./manage.py runserver
|
||||
Performing system checks...
|
||||
|
||||
System check identified no issues (0 silenced).
|
||||
August 18, 2022 - 15:17:52
|
||||
Django version 4.0.7, using settings 'netbox.settings'
|
||||
Starting development server at http://127.0.0.1:8000/
|
||||
Quit the server with CONTROL-C.
|
||||
```
|
||||
|
||||
This ensures that your development environment is now complete and operational. The development server will monitor the development environment and automatically reload in response to any changes made.
|
||||
|
||||
!!! tip "IDE Integration"
|
||||
Some IDEs, such as the highly-recommended [PyCharm](https://www.jetbrains.com/pycharm/), will integrate with Django's development server and allow you to run it directly within the IDE. This is strongly encouraged as it makes for a much more convenient development environment.
|
||||
|
||||
## UI Development
|
||||
|
||||
For UI development you will need to review the [Web UI Development Guide](web-ui.md)
|
||||
|
||||
## Populating Demo Data
|
||||
|
||||
Once you have your development environment up and running, it might be helpful to populate some "dummy" data to make interacting with the UI and APIs more convenient. Check out the [netbox-demo-data](https://github.com/netbox-community/netbox-demo-data) repo on GitHub, which houses a collection of sample data that can be easily imported to any new NetBox deployment. (This sample data is used to populate the public demo instance at <https://demo.netbox.dev>.)
|
||||
|
||||
The demo data is provided in JSON format and loaded into an empty database using Django's `loaddata` management command. Consult the demo data repo's `README` file for complete instructions on populating the data.
|
||||
|
||||
## Running Tests
|
||||
|
||||
Prior to committing any substantial changes to the code base, be sure to run NetBox's test suite to catch potential errors. Tests are run using the `test` management command, which employs Python's [`unittest`](https://docs.python.org/3/library/unittest.html#module-unittest) library. Remember to ensure that the Python virtual environment is active before running this command. Also keep in mind that these commands are executed in the `netbox/` directory, not the root directory of the repository.
|
||||
|
||||
To avoid potential issues with your local configuration file, set the `NETBOX_CONFIGURATION` to point to the packaged test configuration at `netbox/configuration_testing.py`. This will handle things like ensuring that the dummy plugin is enabled for comprehensive testing.
|
||||
|
||||
```no-highlight
|
||||
export NETBOX_CONFIGURATION=netbox.configuration_testing
|
||||
cd netbox/
|
||||
python manage.py test
|
||||
```
|
||||
|
||||
In cases where you haven't made any changes to the database schema (which is typical), you can append the `--keepdb` argument to this command to reuse the test database between runs. This cuts down on the time it takes to run the test suite since the database doesn't have to be rebuilt each time. (Note that this argument will cause errors if you've modified any model fields since the previous test run.)
|
||||
|
||||
```no-highlight
|
||||
python manage.py test --keepdb
|
||||
```
|
||||
|
||||
You can also reduce testing time by enabling parallel test execution with the `--parallel` flag. (By default, this will run as many parallel tests as you have processors. To avoid sluggishness, it's a good idea to specify a lower number of parallel tests.) This flag can be combined with `--keepdb`, although if you encounter any strange errors, try running the test suite again with parallelization disabled.
|
||||
|
||||
```no-highlight
|
||||
python manage.py test --parallel <n>
|
||||
```
|
||||
|
||||
Finally, it's possible to limit the run to a specific set of tests, specified by their Python path. For example, to run only IPAM and DCIM view tests:
|
||||
|
||||
```no-highlight
|
||||
python manage.py test dcim.tests.test_views ipam.tests.test_views
|
||||
```
|
||||
|
||||
This is handy for instances where just a few tests are failing and you want to re-run them individually.
|
||||
|
||||
!!! info
|
||||
NetBox uses [django-rich](https://github.com/adamchainz/django-rich) to enhance Django's default `test` management command.
|
||||
|
||||
## Submitting Pull Requests
|
||||
|
||||
Once you're happy with your work and have verified that all tests pass, commit your changes and push it upstream to your fork. Always provide descriptive (but not excessively verbose) commit messages. Be sure to prefix your commit message with the word "Fixes" or "Closes" and the relevant issue number (with a hash mark). This tells GitHub to automatically close the referenced issue once the commit has been merged.
|
||||
|
||||
```no-highlight
|
||||
git commit -m "Closes #1234: Add IPv5 support"
|
||||
git push origin
|
||||
```
|
||||
|
||||
Once your fork has the new commit, submit a [pull request](https://github.com/netbox-community/netbox/compare) to the NetBox repo to propose the changes. Be sure to provide a detailed accounting of the changes being made and the reasons for doing so.
|
||||
|
||||
Once submitted, a maintainer will review your pull request and either merge it or request changes. If changes are needed, you can make them via new commits to your fork: The pull request will update automatically.
|
||||
|
||||
!!! warning
|
||||
Remember, pull requests are permitted only for **accepted** issues. If an issue you want to work on hasn't been approved by a maintainer yet, it's best to avoid risking your time and effort on a change that might not be accepted. (The one exception to this is trivial changes to the documentation or other non-critical resources.)
|
||||
388
docs/development/git-cheat-sheet.md
Normal file
388
docs/development/git-cheat-sheet.md
Normal file
@@ -0,0 +1,388 @@
|
||||
# git Cheat Sheet
|
||||
|
||||
This cheat sheet serves as a convenient reference for NetBox contributors who already somewhat familiar with using git. For a general introduction to the tooling and workflows involved, please see GitHub's guide [Getting started with git](https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git).
|
||||
|
||||
## Common Operations
|
||||
|
||||
### Clone a Repo
|
||||
|
||||
This copies a remote git repository (e.g. from GitHub) to your local workstation. It will create a new directory bearing the repo's name in the current path.
|
||||
|
||||
``` title="Command"
|
||||
git clone https://github.com/$org-name/$repo-name
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git clone https://github.com/netbox-community/netbox
|
||||
Cloning into 'netbox'...
|
||||
remote: Enumerating objects: 95112, done.
|
||||
remote: Counting objects: 100% (682/682), done.
|
||||
remote: Compressing objects: 100% (246/246), done.
|
||||
remote: Total 95112 (delta 448), reused 637 (delta 436), pack-reused 94430
|
||||
Receiving objects: 100% (95112/95112), 60.40 MiB | 45.82 MiB/s, done.
|
||||
Resolving deltas: 100% (74979/74979), done.
|
||||
```
|
||||
|
||||
### Pull New Commits
|
||||
|
||||
To update your local branch with any recent upstream commits, run `git pull`.
|
||||
|
||||
``` title="Command"
|
||||
git pull
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git pull
|
||||
remote: Enumerating objects: 1, done.
|
||||
remote: Counting objects: 100% (1/1), done.
|
||||
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
|
||||
Unpacking objects: 100% (1/1), done.
|
||||
From https://github.com/netbox-community/netbox
|
||||
28bc76695..e0741cc9a develop -> origin/develop
|
||||
Updating 28bc76695..e0741cc9a
|
||||
Fast-forward
|
||||
docs/release-notes/version-3.3.md | 1 +
|
||||
netbox/netbox/settings.py | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
```
|
||||
|
||||
### List Branches
|
||||
|
||||
`git branch` lists all local branches. Appending `-a` to this command will list both local (green) and remote (red) branches.
|
||||
|
||||
``` title="Command"
|
||||
git branch -a
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git branch -a
|
||||
* develop
|
||||
remotes/origin/10170-changelog
|
||||
remotes/origin/HEAD -> origin/develop
|
||||
remotes/origin/develop
|
||||
remotes/origin/feature
|
||||
remotes/origin/master
|
||||
```
|
||||
|
||||
### Switch Branches
|
||||
|
||||
To switch to a different branch, use the `checkout` command.
|
||||
|
||||
``` title="Command"
|
||||
git checkout $branchname
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git checkout feature
|
||||
Branch 'feature' set up to track remote branch 'feature' from 'origin'.
|
||||
Switched to a new branch 'feature'
|
||||
```
|
||||
|
||||
### Create a New Branch
|
||||
|
||||
Use the `-b` argument with `checkout` to create a new _local_ branch from the current branch.
|
||||
|
||||
``` title="Command"
|
||||
git checkout -b $newbranch
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git checkout -b 123-fix-foo
|
||||
Switched to a new branch '123-fix-foo'
|
||||
```
|
||||
|
||||
### Rename a Branch
|
||||
|
||||
To rename the current branch, use the `git branch` command with the `-m` argument (for "modify").
|
||||
|
||||
``` title="Command"
|
||||
git branch -m $newname
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git branch -m jstretch-testing
|
||||
$ git branch
|
||||
develop
|
||||
feature
|
||||
* jstretch-testing
|
||||
```
|
||||
|
||||
### Merge a Branch
|
||||
|
||||
To merge one branch into another, use the `git merge` command. Start by checking out the _destination_ branch, and merge the _source_ branch into it.
|
||||
|
||||
``` title="Command"
|
||||
git merge $sourcebranch
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git checkout testing
|
||||
Switched to branch 'testing'
|
||||
Your branch is up to date with 'origin/testing'.
|
||||
$ git merge branch2
|
||||
Updating 9a12b5b5f..8ee42390b
|
||||
Fast-forward
|
||||
newfile.py | 0
|
||||
1 file changed, 0 insertions(+), 0 deletions(-)
|
||||
create mode 100644 newfile.py
|
||||
```
|
||||
|
||||
!!! warning "Avoid Merging Remote Branches"
|
||||
You generally want to avoid merging branches that exist on the remote (upstream) repository, such as `develop` and `feature`: Merges into these branches should be done via a pull request on GitHub. Only merge branches when it is necessary to consolidate work you've done locally.
|
||||
|
||||
### Show Pending Changes
|
||||
|
||||
After making changes to files in the repo, `git status` will display a summary of created, modified, and deleted files.
|
||||
|
||||
``` title="Command"
|
||||
git status
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git status
|
||||
On branch 123-fix-foo
|
||||
Changes not staged for commit:
|
||||
(use "git add <file>..." to update what will be committed)
|
||||
(use "git checkout -- <file>..." to discard changes in working directory)
|
||||
|
||||
modified: README.md
|
||||
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
|
||||
foo.py
|
||||
|
||||
no changes added to commit (use "git add" and/or "git commit -a")
|
||||
```
|
||||
|
||||
### Stage Changed Files
|
||||
|
||||
Before creating a new commit, modified files must be staged. This is typically done with the `git add` command. You can specify a particular path, or just append `-A` to automatically staged _all_ changed files within the current directory. Run `git status` again to verify what files have been staged.
|
||||
|
||||
``` title="Command"
|
||||
git add -A
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git add -A
|
||||
$ git status
|
||||
On branch 123-fix-foo
|
||||
Changes to be committed:
|
||||
(use "git reset HEAD <file>..." to unstage)
|
||||
|
||||
modified: README.md
|
||||
new file: foo.py
|
||||
|
||||
```
|
||||
|
||||
### Review Staged Files
|
||||
|
||||
It's a good idea to thoroughly review all staged changes immediately prior to creating a new commit. This can be done using the `git diff` command. Appending the `--staged` argument will show staged changes; omitting it will show changes that have not yet been staged.
|
||||
|
||||
``` title="Command"
|
||||
git diff --staged
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git diff --staged
|
||||
diff --git a/README.md b/README.md
|
||||
index 93e125079..4344fb514 100644
|
||||
--- a/README.md
|
||||
+++ b/README.md
|
||||
@@ -1,3 +1,8 @@
|
||||
+
|
||||
+Added some lines here
|
||||
+and here
|
||||
+and here too
|
||||
+
|
||||
<div align="center">
|
||||
<img src="https://raw.githubusercontent.com/netbox-community/netbox/develop/docs/netbox_logo.svg" width="400" alt="NetBox logo" />
|
||||
</div>
|
||||
diff --git a/foo.py b/foo.py
|
||||
new file mode 100644
|
||||
index 000000000..e69de29bb
|
||||
```
|
||||
|
||||
### Create a New Commit
|
||||
|
||||
The `git commit` command records your changes to the current branch. Specify a commit message with the `-m` argument. (If omitted, a file editor will be opened to provide a message.
|
||||
|
||||
``` title="Command"
|
||||
git commit -m "Fixes #123: Fixed the thing that was broken"
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git commit -m "Fixes #123: Fixed the thing that was broken"
|
||||
[123-fix-foo 9a12b5b5f] Fixes #123: Fixed the thing that was broken
|
||||
2 files changed, 5 insertions(+)
|
||||
create mode 100644 foo.py
|
||||
```
|
||||
|
||||
!!! tip "Automatically Closing Issues"
|
||||
GitHub will [automatically close](https://github.blog/2013-01-22-closing-issues-via-commit-messages/) any issues referenced in a commit message by `Fixes:` or `Closes:` when the commit is merged into the repository's default branch. Contributors are strongly encouraged to follow this convention when forming commit messages. (Use "Closes" for feature requests and "Fixes" for bugs.)
|
||||
|
||||
### Push a Commit Upstream
|
||||
|
||||
Once you've made a commit locally, it needs to be pushed upstream to the _remote_ repository (typically called "origin"). This is done with the `git push` command. If this is a new branch that doesn't yet exist on the remote repository, you'll need to set the upstream for it when pushing.
|
||||
|
||||
``` title="Command"
|
||||
git push -u origin $branchname
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git push -u origin testing
|
||||
Counting objects: 3, done.
|
||||
Delta compression using up to 16 threads.
|
||||
Compressing objects: 100% (3/3), done.
|
||||
Writing objects: 100% (3/3), 377 bytes | 377.00 KiB/s, done.
|
||||
Total 3 (delta 2), reused 0 (delta 0)
|
||||
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
|
||||
remote:
|
||||
remote: Create a pull request for 'testing' on GitHub by visiting:
|
||||
remote: https://github.com/netbox-community/netbox/pull/new/testing
|
||||
remote:
|
||||
To https://github.com/netbox-community/netbox
|
||||
* [new branch] testing -> testing
|
||||
Branch 'testing' set up to track remote branch 'testing' from 'origin'.
|
||||
```
|
||||
|
||||
!!! tip
|
||||
You can apply the following git configuration to automatically set the upstream for all new branches. This obviates the need to specify `-u origin`.
|
||||
|
||||
```
|
||||
git config --global push.default current
|
||||
```
|
||||
|
||||
## The GitHub CLI Client
|
||||
|
||||
GitHub provides a [free CLI client](https://cli.github.com/) to simplify many aspects of interacting with GitHub repositories. Note that this utility is separate from `git`, and must be [installed separately](https://github.com/cli/cli#installation).
|
||||
|
||||
This guide provides some examples of common operations, but be sure to check out the [GitHub CLI manual](https://cli.github.com/manual/) for a complete accounting of available commands.
|
||||
|
||||
### List Open Pull Requests
|
||||
|
||||
``` title="Command"
|
||||
gh pr list
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ gh pr list
|
||||
|
||||
Showing 3 of 3 open pull requests in netbox-community/netbox
|
||||
|
||||
#10223 #7503 API Bulk-Create of Devices does not check Rack-Space 7503-bulkdevice about 17 hours ago
|
||||
#9716 Closes #9599: Add cursor pagination mode lyuyangh:cursor-pagination about 1 month ago
|
||||
#9498 Adds replication and adoption for module import sleepinggenius2:issue_9361 about 2 months ago
|
||||
```
|
||||
|
||||
### Check Out a PR
|
||||
|
||||
This command will automatically check out the remote branch associated with an open pull request.
|
||||
|
||||
``` title="Command"
|
||||
gh pr checkout $number
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ gh pr checkout 10223
|
||||
Branch '7503-bulkdevice' set up to track remote branch '7503-bulkdevice' from 'origin'.
|
||||
Switched to a new branch '7503-bulkdevice'
|
||||
```
|
||||
|
||||
## Fixing Mistakes
|
||||
|
||||
### Modify the Previous Commit
|
||||
|
||||
Sometimes you'll find that you've overlooked a necessary change and need to commit again. If you haven't pushed your most recent commit and just need to make a small tweak or two, you can _amend_ your most recent commit instead of creating a new one.
|
||||
|
||||
First, stage the desired files with `git add` and verify the changes, the issue the `git commit` command with the `--amend` argument. You can also append the `--no-edit` argument if you would like to keep the previous commit message.
|
||||
|
||||
``` title="Command"
|
||||
git commit --amend --no-edit
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git add -A
|
||||
$ git diff --staged
|
||||
$ git commit --amend --no-edit
|
||||
[testing 239b16921] Added a new file
|
||||
Date: Fri Aug 26 16:30:05 2022 -0400
|
||||
2 files changed, 1 insertion(+)
|
||||
create mode 100644 newfile.py
|
||||
```
|
||||
|
||||
!!! danger "Don't Amend After Pushing"
|
||||
Never amend a commit you've already pushed upstream unless you're **certain** no one else is working on the same branch. Force-pushing will overwrite the change history, which will break any commits from other contributors. When in doubt, create a new commit instead.
|
||||
|
||||
### Undo the Last Commit
|
||||
|
||||
The `git reset` command can be used to undo the most recent commit. (`HEAD~` is equivalent to `HEAD~1` and references the commit prior to the current HEAD.) After making and staging your changes, commit using `-c ORIG_HEAD` to replace the erroneous commit.
|
||||
|
||||
``` title="Command"
|
||||
git reset HEAD~
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git add -A
|
||||
$ git commit -m "Erroneous commit"
|
||||
[testing 09ce06736] Erroneous commit
|
||||
Date: Mon Aug 29 15:20:04 2022 -0400
|
||||
1 file changed, 1 insertion(+)
|
||||
create mode 100644 BADCHANGE
|
||||
$ git reset HEAD~
|
||||
$ rm BADFILE
|
||||
$ git add -A
|
||||
$ git commit -m "Fixed commit"
|
||||
[testing c585709f3] Fixed commit
|
||||
Date: Mon Aug 29 15:22:38 2022 -0400
|
||||
1 file changed, 65 insertions(+), 20 deletions(-)
|
||||
```
|
||||
|
||||
!!! danger "Don't Reset After Pushing"
|
||||
Resetting only works until you've pushed your local changes upstream. If you've already pushed upstream, use `git revert` instead. This will create a _new_ commit that reverts the erroneous one, but ensures that the git history remains intact.
|
||||
|
||||
### Rebase from Upstream
|
||||
|
||||
If a change has been pushed to the upstream branch since you most recently pulled it, attempting to push a new local commit will fail:
|
||||
|
||||
```
|
||||
$ git push
|
||||
To https://github.com/netbox-community/netbox.git
|
||||
! [rejected] develop -> develop (fetch first)
|
||||
error: failed to push some refs to 'https://github.com/netbox-community/netbox.git'
|
||||
hint: Updates were rejected because the remote contains work that you do
|
||||
hint: not have locally. This is usually caused by another repository pushing
|
||||
hint: to the same ref. You may want to first integrate the remote changes
|
||||
hint: (e.g., 'git pull ...') before pushing again.
|
||||
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
|
||||
```
|
||||
|
||||
To resolve this, first fetch the upstream branch to update your local copy, and then [rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) your local branch to include the new changes. Once the rebase has completed, you can push your local commits upstream.
|
||||
|
||||
``` title="Commands"
|
||||
git fetch
|
||||
git rebase origin/$branchname
|
||||
```
|
||||
|
||||
``` title="Example"
|
||||
$ git fetch
|
||||
remote: Enumerating objects: 1, done.
|
||||
remote: Counting objects: 100% (1/1), done.
|
||||
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
|
||||
Unpacking objects: 100% (1/1), done.
|
||||
From https://github.com/netbox-community/netbox
|
||||
815b2d8a2..8c35ebbb7 develop -> origin/develop
|
||||
$ git rebase origin/develop
|
||||
First, rewinding head to replay your work on top of it...
|
||||
Applying: Further tweaks to the PR template
|
||||
Applying: Changelog for #10176, #10217
|
||||
$ git push
|
||||
Counting objects: 9, done.
|
||||
Delta compression using up to 16 threads.
|
||||
Compressing objects: 100% (9/9), done.
|
||||
Writing objects: 100% (9/9), 1.02 KiB | 1.02 MiB/s, done.
|
||||
Total 9 (delta 6), reused 0 (delta 0)
|
||||
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
|
||||
To https://github.com/netbox-community/netbox.git
|
||||
8c35ebbb7..ada745324 develop -> develop
|
||||
```
|
||||
60
docs/development/index.md
Normal file
60
docs/development/index.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# NetBox Development
|
||||
|
||||
Thanks for your interest in contributing to NetBox! This introduction covers a few important things to know before you get started.
|
||||
|
||||
## The Code
|
||||
|
||||
NetBox and many of its related projects are maintained on [GitHub](https://github.com/netbox-community/netbox). GitHub also serves as one of our primary discussion forums. While all the code and discussion is publicly accessible, you'll need register for a [free GitHub account](https://github.com/signup) to engage in participation. Most people begin by [forking](https://docs.github.com/en/get-started/quickstart/fork-a-repo) the NetBox repository under their own GitHub account to begin working on the code.
|
||||
|
||||

|
||||
|
||||
There are three permanent branches in the repository:
|
||||
|
||||
* `master` - The current stable release. Individual changes should never be pushed directly to this branch, but rather merged from `develop`.
|
||||
* `develop` - Active development for the upcoming patch release. Pull requests will typically be based on this branch unless they introduce breaking changes that must be deferred until the next minor release.
|
||||
* `feature` - New feature work to be introduced in the next minor release (e.g. from v3.3 to v3.4).
|
||||
|
||||
NetBox components are arranged into Django apps. Each app holds the models, views, and other resources relevant to a particular function:
|
||||
|
||||
* `circuits`: Communications circuits and providers (not to be confused with power circuits)
|
||||
* `dcim`: Datacenter infrastructure management (sites, racks, and devices)
|
||||
* `extras`: Additional features not considered part of the core data model
|
||||
* `ipam`: IP address management (VRFs, prefixes, IP addresses, and VLANs)
|
||||
* `tenancy`: Tenants (such as customers) to which NetBox objects may be assigned
|
||||
* `users`: Authentication and user preferences
|
||||
* `utilities`: Resources which are not user-facing (extendable classes, etc.)
|
||||
* `virtualization`: Virtual machines and clusters
|
||||
* `wireless`: Wireless links and LANs
|
||||
|
||||
All core functionality is stored within the `netbox/` subdirectory. HTML templates are stored in a common `templates/` directory, with model- and view-specific templates arranged by app. Documentation is kept in the `docs/` root directory.
|
||||
|
||||
## Proposing Changes
|
||||
|
||||
All substantial changes made to the code base are tracked using [GitHub issues](https://docs.github.com/en/issues). Feature requests, bug reports, and similar proposals must all be filed as issues and approved by a maintainer before work begins. This ensures that all changes to the code base are properly documented for future reference.
|
||||
|
||||
To submit a new feature request or bug report for NetBox, select and complete the appropriate [issue template](https://github.com/netbox-community/netbox/issues/new/choose). Once your issue has been approved, you're welcome to submit a [pull request](https://docs.github.com/en/pull-requests) containing your proposed changes.
|
||||
|
||||

|
||||
|
||||
Check out our [issue intake policy](https://github.com/netbox-community/netbox/wiki/Issue-Intake-Policy) for an overview of the issue triage and approval processes.
|
||||
|
||||
!!! tip
|
||||
Avoid starting work on a proposal before it has been accepted. Not all proposed changes will be accepted, and we'd hate for you to waste time working on code that might not make it into the project.
|
||||
|
||||
## Getting Help
|
||||
|
||||
There are two primary forums for getting assistance with NetBox development:
|
||||
|
||||
* [GitHub discussions](https://github.com/netbox-community/netbox/discussions) - The preferred forum for general discussion and support issues. Ideal for shaping a feature requests prior to submitting an issue.
|
||||
* [#netbox on NetDev Community Slack](https://netdev.chat/) - Good for quick chats. Avoid any discussion that might need to be referenced later on, as the chat history is not retained indefinitely.
|
||||
|
||||
!!! note
|
||||
Don't use GitHub issues to ask for help: These are reserved for proposed code changes only.
|
||||
|
||||
## Governance
|
||||
|
||||
NetBox follows the [benevolent dictator](http://oss-watch.ac.uk/resources/benevolentdictatorgovernancemodel) model of governance, with [Jeremy Stretch](https://github.com/jeremystretch) ultimately responsible for all changes to the code base. While community contributions are welcomed and encouraged, the lead maintainer's primary role is to ensure the project's long-term maintainability and continued focus on its primary functions.
|
||||
|
||||
## Licensing
|
||||
|
||||
The entire NetBox project is licensed as open source under the [Apache 2.0 license](https://github.com/netbox-community/netbox/blob/master/LICENSE.txt). This is a very permissive license which allows unlimited redistribution of all code within the project. Note that all submissions to the project are subject to the same license.
|
||||
123
docs/development/internationalization.md
Normal file
123
docs/development/internationalization.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Internationalization
|
||||
|
||||
Beginning with NetBox v4.0, NetBox will leverage [Django's automatic translation](https://docs.djangoproject.com/en/stable/topics/i18n/translation/) to support languages other than English. This page details the areas of the project which require special attention to ensure functioning translation support. Briefly, these include:
|
||||
|
||||
* The `verbose_name` and `verbose_name_plural` Meta attributes for each model
|
||||
* The `verbose_name` and (if defined) `help_text` for each model field
|
||||
* The `label` for each form field
|
||||
* Headers for `fieldsets` on each form class
|
||||
* The `verbose_name` for each table column
|
||||
* All human-readable strings within templates must be wrapped with `{% trans %}` or `{% blocktrans %}`
|
||||
|
||||
The rest of this document elaborates on each of the items above.
|
||||
|
||||
## General Guidance
|
||||
|
||||
* Wrap human-readable strings with Django's `gettext()` or `gettext_lazy()` utility functions to enable automatic translation. Generally, `gettext_lazy()` is preferred (and sometimes required) to defer translation until the string is displayed.
|
||||
|
||||
* By convention, the preferred translation function is typically imported as an underscore (`_`) to minimize boilerplate code. Thus, you will often see translation as e.g. `_("Some text")`. It is still an option to import and use alternative translation functions (e.g. `pgettext()` and `ngettext()`) normally as needed.
|
||||
|
||||
* Avoid passing markup and other non-natural language where possible. Everything wrapped by a translation function gets exported to a messages file for translation by a human.
|
||||
|
||||
* Where the intended meaning of the translated string may not be obvious, use `pgettext()` or `pgettext_lazy()` to include assisting context for the translator. For example:
|
||||
|
||||
```python
|
||||
# Context, string
|
||||
pgettext("month name", "May")
|
||||
```
|
||||
|
||||
* **Format strings do not support translation.** Avoid "f" strings for messages that must support translation. Instead, use `format()` to accomplish variable replacement:
|
||||
|
||||
```python
|
||||
# Translation will not work
|
||||
f"There are {count} objects"
|
||||
|
||||
# Do this instead
|
||||
"There are {count} objects".format(count=count)
|
||||
```
|
||||
|
||||
## Models
|
||||
|
||||
1. Import `gettext_lazy` as `_`.
|
||||
2. Ensure both `verbose_name` and `verbose_name_plural` are defined under the model's `Meta` class and wrapped with the `gettext_lazy()` shortcut.
|
||||
3. Ensure each model field specifies a `verbose_name` wrapped with `gettext_lazy()`.
|
||||
4. Ensure any `help_text` attributes on model fields are also wrapped with `gettext_lazy()`.
|
||||
|
||||
```python
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
class Circuit(PrimaryModel):
|
||||
commit_rate = models.PositiveIntegerField(
|
||||
...
|
||||
verbose_name=_('commit rate (Kbps)'),
|
||||
help_text=_("Committed rate")
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('circuit')
|
||||
verbose_name_plural = _('circuits')
|
||||
```
|
||||
|
||||
## Forms
|
||||
|
||||
1. Import `gettext_lazy` as `_`.
|
||||
2. All form fields must specify a `label` wrapped with `gettext_lazy()`.
|
||||
3. All headers under a form's `fieldsets` property must be wrapped with `gettext_lazy()`.
|
||||
|
||||
```python
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
class CircuitBulkEditForm(NetBoxModelBulkEditForm):
|
||||
description = forms.CharField(
|
||||
label=_('Description'),
|
||||
...
|
||||
)
|
||||
|
||||
fieldsets = (
|
||||
(_('Circuit'), ('provider', 'type', 'status', 'description')),
|
||||
)
|
||||
```
|
||||
|
||||
## Tables
|
||||
|
||||
1. Import `gettext_lazy` as `_`.
|
||||
2. All table columns must specify a `verbose_name` wrapped with `gettext_lazy()`.
|
||||
|
||||
```python
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
|
||||
provider = tables.Column(
|
||||
verbose_name=_('Provider'),
|
||||
...
|
||||
)
|
||||
```
|
||||
|
||||
## Templates
|
||||
|
||||
1. Ensure translation support is enabled by including `{% load i18n %}` at the top of the template.
|
||||
2. Use the [`{% trans %}`](https://docs.djangoproject.com/en/stable/topics/i18n/translation/#translate-template-tag) tag (short for "translate") to wrap short strings.
|
||||
3. Longer strings may be enclosed between [`{% blocktrans %}`](https://docs.djangoproject.com/en/stable/topics/i18n/translation/#blocktranslate-template-tag) and `{% endblocktrans %}` tags to improve readability and to enable variable replacement. (Remember to include the `trimmed` argument to trim whitespace between the tags.)
|
||||
4. Avoid passing HTML within translated strings where possible, as this can complicate the work needed of human translators to develop message maps.
|
||||
|
||||
```
|
||||
{% load i18n %}
|
||||
|
||||
{# A short string #}
|
||||
<h5 class="card-header">{% trans "Circuit List" %}</h5>
|
||||
|
||||
{# A longer string with a context variable #}
|
||||
{% blocktrans trimmed with count=object.circuits.count %}
|
||||
There are {count} circuits. Would you like to continue?
|
||||
{% endblocktrans %}
|
||||
```
|
||||
|
||||
!!! warning
|
||||
The `{% blocktrans %}` tag supports only **limited variable replacement**, comparable to the `format()` method on Python strings. It does not permit access to object attributes or the use of other template tags or filters inside it. Ensure that any necessary context is passed as simple variables.
|
||||
|
||||
!!! info
|
||||
The `{% trans %}` and `{% blocktrans %}` support the inclusion of contextual hints for translators using the `context` argument:
|
||||
|
||||
```nohighlight
|
||||
{% trans "May" context "month name" %}
|
||||
```
|
||||
125
docs/development/models.md
Normal file
125
docs/development/models.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# NetBox Models
|
||||
|
||||
## Model Types
|
||||
|
||||
A NetBox model represents a discrete object type such as a device or IP address. Per [Django convention](https://docs.djangoproject.com/en/stable/topics/db/models/), each model is defined as a Python class and has its own table in the PostgreSQL database. All NetBox data models can be categorized by type.
|
||||
|
||||
The Django [content types](https://docs.djangoproject.com/en/stable/ref/contrib/contenttypes/) framework is used to map Django models to database tables. A ContentType instance references a model by its `app_label` and `name`: For example, the Site model within the DCIM app is referred to as `dcim.site`. The content type combined with an object's primary key form a globally unique identifier for the object (e.g. `dcim.site:123`).
|
||||
|
||||
### Features Matrix
|
||||
|
||||
Depending on its classification, each NetBox model may support various features which enhance its operation. Each feature is enabled by inheriting from its designated mixin class, and some features also make use of the [application registry](./application-registry.md#model_features).
|
||||
|
||||
| Feature | Feature Mixin | Registry Key | Description |
|
||||
|------------------------------------------------------------|-------------------------|--------------------|--------------------------------------------------------------------------------|
|
||||
| [Change logging](../features/change-logging.md) | `ChangeLoggingMixin` | - | Changes to these objects are automatically recorded in the change log |
|
||||
| Cloning | `CloningMixin` | - | Provides the `clone()` method to prepare a copy |
|
||||
| [Custom fields](../customization/custom-fields.md) | `CustomFieldsMixin` | `custom_fields` | These models support the addition of user-defined fields |
|
||||
| [Custom links](../customization/custom-links.md) | `CustomLinksMixin` | `custom_links` | These models support the assignment of custom links |
|
||||
| [Custom validation](../customization/custom-validation.md) | `CustomValidationMixin` | - | Supports the enforcement of custom validation rules |
|
||||
| [Export templates](../customization/export-templates.md) | `ExportTemplatesMixin` | `export_templates` | Users can create custom export templates for these models |
|
||||
| [Job results](../features/background-jobs.md) | `JobsMixin` | `jobs` | Users can create custom export templates for these models |
|
||||
| [Journaling](../features/journaling.md) | `JournalingMixin` | `journaling` | These models support persistent historical commentary |
|
||||
| [Synchronized data](../integrations/synchronized-data.md) | `SyncedDataMixin` | `synced_data` | Certain model data can be automatically synchronized from a remote data source |
|
||||
| [Tagging](../models/extras/tag.md) | `TagsMixin` | `tags` | The models can be tagged with user-defined tags |
|
||||
| [Webhooks](../integrations/webhooks.md) | `WebhooksMixin` | `webhooks` | NetBox is capable of generating outgoing webhooks for these objects |
|
||||
|
||||
## Models Index
|
||||
|
||||
### Primary Models
|
||||
|
||||
These are considered the "core" application models which are used to model network infrastructure.
|
||||
|
||||
* [circuits.Circuit](../models/circuits/circuit.md)
|
||||
* [circuits.Provider](../models/circuits/provider.md)
|
||||
* [circuits.ProviderAccount](../models/circuits/provideraccount.md)
|
||||
* [circuits.ProviderNetwork](../models/circuits/providernetwork.md)
|
||||
* [core.DataSource](../models/core/datasource.md)
|
||||
* [dcim.Cable](../models/dcim/cable.md)
|
||||
* [dcim.Device](../models/dcim/device.md)
|
||||
* [dcim.DeviceType](../models/dcim/devicetype.md)
|
||||
* [dcim.Module](../models/dcim/module.md)
|
||||
* [dcim.ModuleType](../models/dcim/moduletype.md)
|
||||
* [dcim.PowerFeed](../models/dcim/powerfeed.md)
|
||||
* [dcim.PowerPanel](../models/dcim/powerpanel.md)
|
||||
* [dcim.Rack](../models/dcim/rack.md)
|
||||
* [dcim.RackReservation](../models/dcim/rackreservation.md)
|
||||
* [dcim.Site](../models/dcim/site.md)
|
||||
* [dcim.VirtualChassis](../models/dcim/virtualchassis.md)
|
||||
* [dcim.VirtualDeviceContext](../models/dcim/virtualdevicecontext.md)
|
||||
* [ipam.Aggregate](../models/ipam/aggregate.md)
|
||||
* [ipam.ASN](../models/ipam/asn.md)
|
||||
* [ipam.FHRPGroup](../models/ipam/fhrpgroup.md)
|
||||
* [ipam.IPAddress](../models/ipam/ipaddress.md)
|
||||
* [ipam.IPRange](../models/ipam/iprange.md)
|
||||
* [ipam.L2VPN](../models/ipam/l2vpn.md)
|
||||
* [ipam.Prefix](../models/ipam/prefix.md)
|
||||
* [ipam.RouteTarget](../models/ipam/routetarget.md)
|
||||
* [ipam.Service](../models/ipam/service.md)
|
||||
* [ipam.ServiceTemplate](../models/ipam/servicetemplate.md)
|
||||
* [ipam.VLAN](../models/ipam/vlan.md)
|
||||
* [ipam.VRF](../models/ipam/vrf.md)
|
||||
* [tenancy.Contact](../models/tenancy/contact.md)
|
||||
* [tenancy.Tenant](../models/tenancy/tenant.md)
|
||||
* [virtualization.Cluster](../models/virtualization/cluster.md)
|
||||
* [virtualization.VirtualMachine](../models/virtualization/virtualmachine.md)
|
||||
* [wireless.WirelessLAN](../models/wireless/wirelesslan.md)
|
||||
* [wireless.WirelessLink](../models/wireless/wirelesslink.md)
|
||||
|
||||
### Organizational Models
|
||||
|
||||
Organization models are used to organize and classify primary models.
|
||||
|
||||
* [circuits.CircuitType](../models/circuits/circuittype.md)
|
||||
* [dcim.DeviceRole](../models/dcim/devicerole.md)
|
||||
* [dcim.Manufacturer](../models/dcim/manufacturer.md)
|
||||
* [dcim.Platform](../models/dcim/platform.md)
|
||||
* [dcim.RackRole](../models/dcim/rackrole.md)
|
||||
* [ipam.RIR](../models/ipam/rir.md)
|
||||
* [ipam.Role](../models/ipam/role.md)
|
||||
* [ipam.VLANGroup](../models/ipam/vlangroup.md)
|
||||
* [tenancy.ContactRole](../models/tenancy/contactrole.md)
|
||||
* [virtualization.ClusterGroup](../models/virtualization/clustergroup.md)
|
||||
* [virtualization.ClusterType](../models/virtualization/clustertype.md)
|
||||
|
||||
### Nested Group Models
|
||||
|
||||
Nested group models behave like organizational model, but self-nest within a recursive hierarchy. For example, the Region model can be used to represent a hierarchy of countries, states, and cities.
|
||||
|
||||
* [dcim.Location](../models/dcim/location.md) (formerly RackGroup)
|
||||
* [dcim.Region](../models/dcim/region.md)
|
||||
* [dcim.SiteGroup](../models/dcim/sitegroup.md)
|
||||
* [tenancy.ContactGroup](../models/tenancy/contactgroup.md)
|
||||
* [tenancy.TenantGroup](../models/tenancy/tenantgroup.md)
|
||||
* [wireless.WirelessLANGroup](../models/wireless/wirelesslangroup.md)
|
||||
|
||||
### Component Models
|
||||
|
||||
Component models represent individual physical or virtual components belonging to a device or virtual machine.
|
||||
|
||||
* [dcim.ConsolePort](../models/dcim/consoleport.md)
|
||||
* [dcim.ConsoleServerPort](../models/dcim/consoleserverport.md)
|
||||
* [dcim.DeviceBay](../models/dcim/devicebay.md)
|
||||
* [dcim.FrontPort](../models/dcim/frontport.md)
|
||||
* [dcim.Interface](../models/dcim/interface.md)
|
||||
* [dcim.InventoryItem](../models/dcim/inventoryitem.md)
|
||||
* [dcim.ModuleBay](../models/dcim/modulebay.md)
|
||||
* [dcim.PowerOutlet](../models/dcim/poweroutlet.md)
|
||||
* [dcim.PowerPort](../models/dcim/powerport.md)
|
||||
* [dcim.RearPort](../models/dcim/rearport.md)
|
||||
* [virtualization.VMInterface](../models/virtualization/vminterface.md)
|
||||
|
||||
### Component Template Models
|
||||
|
||||
These function as templates to effect the replication of device and virtual machine components. Component template models support a limited feature set, including change logging, custom validation, and webhooks.
|
||||
|
||||
* [dcim.ConsolePortTemplate](../models/dcim/consoleporttemplate.md)
|
||||
* [dcim.ConsoleServerPortTemplate](../models/dcim/consoleserverporttemplate.md)
|
||||
* [dcim.DeviceBayTemplate](../models/dcim/devicebaytemplate.md)
|
||||
* [dcim.FrontPortTemplate](../models/dcim/frontporttemplate.md)
|
||||
* [dcim.InterfaceTemplate](../models/dcim/interfacetemplate.md)
|
||||
* [dcim.InventoryItemTemplate](../models/dcim/inventoryitemtemplate.md)
|
||||
* [dcim.ModuleBayTemplate](../models/dcim/modulebaytemplate.md)
|
||||
* [dcim.PowerOutletTemplate](../models/dcim/poweroutlettemplate.md)
|
||||
* [dcim.PowerPortTemplate](../models/dcim/powerporttemplate.md)
|
||||
* [dcim.RearPortTemplate](../models/dcim/rearporttemplate.md)
|
||||
120
docs/development/release-checklist.md
Normal file
120
docs/development/release-checklist.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# Release Checklist
|
||||
|
||||
This documentation describes the process of packaging and publishing a new NetBox release. There are three types of release:
|
||||
|
||||
* Major release (e.g. v2.11 to v3.0)
|
||||
* Minor release (e.g. v3.2 to v3.3)
|
||||
* Patch release (e.g. v3.3.0 to v3.3.1)
|
||||
|
||||
While major releases generally introduce some very substantial change to the application, they are typically treated the same as minor version increments for the purpose of release packaging.
|
||||
|
||||
## Minor Version Releases
|
||||
|
||||
### Address Constrained Dependencies
|
||||
|
||||
Sometimes it becomes necessary to constrain dependencies to a particular version, e.g. to work around a bug in a newer release or to avoid a breaking change that we have yet to accommodate. (Another common example is to limit the upstream Django release.) For example:
|
||||
|
||||
```
|
||||
# https://github.com/encode/django-rest-framework/issues/6053
|
||||
djangorestframework==3.8.1
|
||||
```
|
||||
|
||||
These version constraints are added to `base_requirements.txt` to ensure that newer packages are not installed when updating the pinned dependencies in `requirements.txt` (see the [Update Requirements](#update-requirements) section below). Before each new minor version of NetBox is released, all such constraints on dependent packages should be addressed if feasible. This guards against the collection of stale constraints over time.
|
||||
|
||||
### Close the Release Milestone
|
||||
|
||||
Close the [release milestone](https://github.com/netbox-community/netbox/milestones) on GitHub after ensuring there are no remaining open issues associated with it.
|
||||
|
||||
### Update the Release Notes
|
||||
|
||||
Check that a link to the release notes for the new version is present in the navigation menu (defined in `mkdocs.yml`), and that a summary of all major new features has been added to `docs/index.md`.
|
||||
|
||||
### Manually Perform a New Install
|
||||
|
||||
Start the documentation server and navigate to the current version of the installation docs:
|
||||
|
||||
```no-highlight
|
||||
mkdocs serve
|
||||
```
|
||||
|
||||
Follow these instructions to perform a new installation of NetBox in a temporary environment. This process must not be automated: The goal of this step is to catch any errors or omissions in the documentation, and ensure that it is kept up-to-date for each release. Make any necessary changes to the documentation before proceeding with the release.
|
||||
|
||||
### Merge the Release Branch
|
||||
|
||||
Submit a pull request to merge the `feature` branch into the `develop` branch in preparation for its release. Once it has been merged, continue with the section for patch releases below.
|
||||
|
||||
### Rebuild Demo Data (After Release)
|
||||
|
||||
After the release of a new minor version, generate a new demo data snapshot compatible with the new release. See the [`netbox-demo-data`](https://github.com/netbox-community/netbox-demo-data) repository for instructions.
|
||||
|
||||
---
|
||||
|
||||
## Patch Releases
|
||||
|
||||
### Notify netbox-docker Project of Any Relevant Changes
|
||||
|
||||
Notify the [`netbox-docker`](https://github.com/netbox-community/netbox-docker) maintainers (in **#netbox-docker**) of any changes that may be relevant to their build process, including:
|
||||
|
||||
* Significant changes to `upgrade.sh`
|
||||
* Increases in minimum versions for service dependencies (PostgreSQL, Redis, etc.)
|
||||
* Any changes to the reference installation
|
||||
|
||||
### Update Requirements
|
||||
|
||||
Before each release, update each of NetBox's Python dependencies to its most recent stable version. These are defined in `requirements.txt`, which is updated from `base_requirements.txt` using `pip`. To do this:
|
||||
|
||||
1. Upgrade the installed version of all required packages in your environment (`pip install -U -r base_requirements.txt`).
|
||||
2. Run all tests and check that the UI and API function as expected.
|
||||
3. Review each requirement's release notes for any breaking or otherwise noteworthy changes.
|
||||
4. Update the package versions in `requirements.txt` as appropriate.
|
||||
|
||||
In cases where upgrading a dependency to its most recent release is breaking, it should be constrained to its current minor version in `base_requirements.txt` with an explanatory comment and revisited for the next major NetBox release (see the [Address Constrained Dependencies](#address-constrained-dependencies) section above).
|
||||
|
||||
### Rebuild the Device Type Definition Schema
|
||||
|
||||
Run the following command to update the device type definition validation schema:
|
||||
|
||||
```nohighlight
|
||||
./manage.py buildschema --write
|
||||
```
|
||||
|
||||
This will automatically update the schema file at `contrib/generated_schema.json`.
|
||||
|
||||
### Update Version and Changelog
|
||||
|
||||
* Update the `VERSION` constant in `settings.py` to the new release version.
|
||||
* Update the example version numbers in the feature request and bug report templates under `.github/ISSUE_TEMPLATES/`.
|
||||
* Replace the "FUTURE" placeholder in the release notes with the current date.
|
||||
|
||||
Commit these changes to the `develop` branch and push upstream.
|
||||
|
||||
### Verify CI Build Status
|
||||
|
||||
Ensure that continuous integration testing on the `develop` branch is completing successfully. If it fails, take action to correct the failure before proceding with the release.
|
||||
|
||||
### Submit a Pull Request
|
||||
|
||||
Submit a pull request titled **"Release vX.Y.Z"** to merge the `develop` branch into `master`. Copy the documented release notes into the pull request's body.
|
||||
|
||||
Once CI has completed on the PR, merge it. This effects a new release in the `master` branch.
|
||||
|
||||
### Create a New Release
|
||||
|
||||
Create a [new release](https://github.com/netbox-community/netbox/releases/new) on GitHub with the following parameters.
|
||||
|
||||
* **Tag:** Current version (e.g. `v3.3.1`)
|
||||
* **Target:** `master`
|
||||
* **Title:** Version and date (e.g. `v3.3.1 - 2022-08-25`)
|
||||
* **Description:** Copy from the pull request body
|
||||
|
||||
Once created, the release will become available for users to install.
|
||||
|
||||
### Update the Development Version
|
||||
|
||||
On the `develop` branch, update `VERSION` in `settings.py` to point to the next release. For example, if you just released v3.3.1, set:
|
||||
|
||||
```
|
||||
VERSION = 'v3.3.2-dev'
|
||||
```
|
||||
|
||||
Commit this change with the comment "PRVB" (for _post-release version bump_) and push the commit upstream.
|
||||
37
docs/development/search.md
Normal file
37
docs/development/search.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Search
|
||||
|
||||
NetBox v3.4 introduced a new global search mechanism, which employs the `extras.CachedValue` model to store discrete field values from many models in a single table.
|
||||
|
||||
## SearchIndex
|
||||
|
||||
To enable search support for a model, declare and register a subclass of `netbox.search.SearchIndex` for it. Typically, this will be done within an app's `search.py` module.
|
||||
|
||||
```python
|
||||
from netbox.search import SearchIndex, register_search
|
||||
|
||||
@register_search
|
||||
class MyModelIndex(SearchIndex):
|
||||
model = MyModel
|
||||
fields = (
|
||||
('name', 100),
|
||||
('description', 500),
|
||||
('comments', 5000),
|
||||
)
|
||||
```
|
||||
|
||||
A SearchIndex subclass defines both its model and a list of two-tuples specifying which model fields to be indexed and the weight (precedence) associated with each. Guidance on weight assignment for fields is provided below.
|
||||
|
||||
### Field Weight Guidance
|
||||
|
||||
| Weight | Field Role | Examples |
|
||||
|--------|--------------------------------------------------|----------------------------------------------------|
|
||||
| 50 | Unique serialized attribute | Device.asset_tag |
|
||||
| 60 | Unique serialized attribute (per related object) | Device.serial |
|
||||
| 100 | Primary human identifier | Device.name, Circuit.cid, Cable.label |
|
||||
| 110 | Slug | Site.slug |
|
||||
| 200 | Secondary identifier | ProviderAccount.account, DeviceType.part_number |
|
||||
| 300 | Highly unique descriptive attribute | CircuitTermination.xconnect_id, IPAddress.dns_name |
|
||||
| 500 | Description | Site.description |
|
||||
| 1000 | Custom field default | - |
|
||||
| 2000 | Other discrete attribute | CircuitTermination.port_speed |
|
||||
| 5000 | Comment field | Site.comments |
|
||||
11
docs/development/signals.md
Normal file
11
docs/development/signals.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Signals
|
||||
|
||||
In addition to [Django's built-in signals](https://docs.djangoproject.com/en/stable/topics/signals/), NetBox defines some of its own, listed below.
|
||||
|
||||
## post_clean
|
||||
|
||||
This signal is sent by models which inherit from `CustomValidationMixin` at the end of their `clean()` method.
|
||||
|
||||
### Receivers
|
||||
|
||||
* `extras.signals.run_custom_validators()`
|
||||
79
docs/development/style-guide.md
Normal file
79
docs/development/style-guide.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Style Guide
|
||||
|
||||
NetBox generally follows the [Django style guide](https://docs.djangoproject.com/en/stable/internals/contributing/writing-code/coding-style/), which is itself based on [PEP 8](https://www.python.org/dev/peps/pep-0008/). [Pycodestyle](https://github.com/pycqa/pycodestyle) is used to validate code formatting, ignoring certain violations.
|
||||
|
||||
## Code
|
||||
|
||||
### General Guidance
|
||||
|
||||
* When in doubt, remain consistent: It is better to be consistently incorrect than inconsistently correct. If you notice in the course of unrelated work a pattern that should be corrected, continue to follow the pattern for now and submit a separate bug report so that the entire code base can be evaluated at a later point.
|
||||
|
||||
* Prioritize readability over concision. Python is a very flexible language that typically offers several multiple options for expressing a given piece of logic, but some may be more friendly to the reader than others. (List comprehensions are particularly vulnerable to over-optimization.) Always remain considerate of the future reader who may need to interpret your code without the benefit of the context within which you are writing it.
|
||||
|
||||
* Include a newline at the end of every file.
|
||||
|
||||
* No easter eggs. While they can be fun, NetBox must be considered as a business-critical tool. The potential, however minor, for introducing a bug caused by unnecessary code is best avoided entirely.
|
||||
|
||||
* Constants (variables which do not change) should be declared in `constants.py` within each app. Wildcard imports from the file are acceptable.
|
||||
|
||||
* Every model must have a [docstring](https://peps.python.org/pep-0257/). Every custom method should include an explanation of its function.
|
||||
|
||||
* Nested API serializers generate minimal representations of an object. These are stored separately from the primary serializers to avoid circular dependencies. Always import nested serializers from other apps directly. For example, from within the DCIM app you would write `from ipam.api.nested_serializers import NestedIPAddressSerializer`.
|
||||
|
||||
### PEP 8 Exceptions
|
||||
|
||||
NetBox ignores certain PEP8 assertions. These are listed below.
|
||||
|
||||
#### Wildcard Imports
|
||||
|
||||
Wildcard imports (for example, `from .constants import *`) are acceptable under any of the following conditions:
|
||||
|
||||
* The library being import contains only constant declarations (e.g. `constants.py`)
|
||||
* The library being imported explicitly defines `__all__`
|
||||
|
||||
#### Maximum Line Length (E501)
|
||||
|
||||
NetBox does not restrict lines to a maximum length of 79 characters. We use a maximum line length of 120 characters, however this is not enforced by CI. The maximum length does not apply to HTML templates or to automatically generated code (e.g. database migrations).
|
||||
|
||||
#### Line Breaks Following Binary Operators (W504)
|
||||
|
||||
Line breaks are permitted following binary operators.
|
||||
|
||||
### Enforcing Code Style
|
||||
|
||||
The [`pycodestyle`](https://pypi.org/project/pycodestyle/) utility (formerly `pep8`) is used by the CI process to enforce code style. A [pre-commit hook](./getting-started.md#2-enable-pre-commit-hooks) which runs this automatically is included with NetBox. To invoke `pycodestyle` manually, run:
|
||||
|
||||
```
|
||||
pycodestyle --ignore=W504,E501 netbox/
|
||||
```
|
||||
|
||||
### Introducing New Dependencies
|
||||
|
||||
The introduction of a new dependency is best avoided unless it is absolutely necessary. For small features, it's generally preferable to replicate functionality within the NetBox code base rather than to introduce reliance on an external project. This reduces both the burden of tracking new releases and our exposure to outside bugs and supply chain attacks.
|
||||
|
||||
If there's a strong case for introducing a new dependency, it must meet the following criteria:
|
||||
|
||||
* Its complete source code must be published and freely accessible without registration.
|
||||
* Its license must be conducive to inclusion in an open source project.
|
||||
* It must be actively maintained, with no longer than one year between releases.
|
||||
* It must be available via the [Python Package Index](https://pypi.org/) (PyPI).
|
||||
|
||||
When adding a new dependency, a short description of the package and the URL of its code repository must be added to `base_requirements.txt`. Additionally, a line specifying the package name pinned to the current stable release must be added to `requirements.txt`. This ensures that NetBox will install only the known-good release.
|
||||
|
||||
## Written Works
|
||||
|
||||
### General Guidance
|
||||
|
||||
* Written material must always meet a reasonable professional standard, with proper grammar, spelling, and punctuation.
|
||||
|
||||
* Use two line breaks between paragraphs.
|
||||
|
||||
* Use only a single space between sentences.
|
||||
|
||||
* All documentation is to be written in [Markdown](../reference/markdown.md), with modest amounts of HTML permitted where needed to overcome technical limitations.
|
||||
|
||||
### Branding
|
||||
|
||||
* When referring to NetBox in writing, use the proper form "NetBox," with the letters N and B capitalized. The lowercase form "netbox" should be used in code, filenames, etc. but never "Netbox" or any other deviation.
|
||||
|
||||
* There is an SVG form of the NetBox logo at [docs/netbox_logo.svg](../netbox_logo.svg). It is preferred to use this logo for all purposes as it scales to arbitrary sizes without loss of resolution. If a raster image is required, the SVG logo should be converted to a PNG image of the prescribed size.
|
||||
14
docs/development/user-preferences.md
Normal file
14
docs/development/user-preferences.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# User Preferences
|
||||
|
||||
The `users.UserConfig` model holds individual preferences for each user in the form of JSON data. This page serves as a manifest of all recognized user preferences in NetBox.
|
||||
|
||||
## Available Preferences
|
||||
|
||||
| Name | Description |
|
||||
|--------------------------|---------------------------------------------------------------|
|
||||
| data_format | Preferred format when rendering raw data (JSON or YAML) |
|
||||
| pagination.per_page | The number of items to display per page of a paginated table |
|
||||
| pagination.placement | Where to display the paginator controls relative to the table |
|
||||
| tables.${table}.columns | The ordered list of columns to display when viewing the table |
|
||||
| tables.${table}.ordering | A list of column names by which the table should be ordered |
|
||||
| ui.colormode | Light or dark mode in the user interface |
|
||||
99
docs/development/web-ui.md
Normal file
99
docs/development/web-ui.md
Normal file
@@ -0,0 +1,99 @@
|
||||
# Web UI Development
|
||||
|
||||
## Front End Technologies
|
||||
|
||||
The NetBox UI is built on languages and frameworks:
|
||||
|
||||
### Styling & HTML Elements
|
||||
|
||||
#### [Bootstrap](https://getbootstrap.com/) 5
|
||||
|
||||
The majority of the NetBox UI is made up of stock Bootstrap components, with some styling modifications and custom components added on an as-needed basis. Bootstrap uses [Sass](https://sass-lang.com/), and NetBox extends Bootstrap's core Sass files for theming and customization.
|
||||
|
||||
### Client-side Scripting
|
||||
|
||||
#### [TypeScript](https://www.typescriptlang.org/)
|
||||
|
||||
All client-side scripting is transpiled from TypeScript to JavaScript and served by Django. In development, TypeScript is an _extremely_ effective tool for accurately describing and checking the code, which leads to significantly fewer bugs, a better development experience, and more predictable/readable code.
|
||||
|
||||
As part of the [bundling](#bundling) process, Bootstrap's JavaScript plugins are imported and bundled alongside NetBox's front-end code.
|
||||
|
||||
!!! danger "NetBox is jQuery-free"
|
||||
Following the Bootstrap team's deprecation of jQuery in Bootstrap 5, NetBox also no longer uses jQuery in front-end code.
|
||||
|
||||
## Guidance
|
||||
|
||||
NetBox generally follows the following guidelines for front-end code:
|
||||
|
||||
- Bootstrap utility classes may be used to solve one-off issues or to implement singular components, as long as the class list does not exceed 4-5 classes. If an element needs more than 5 utility classes, a custom SCSS class should be added that contains the required style properties.
|
||||
- Custom classes must be commented, explaining the general purpose of the class and where it is used.
|
||||
- Reuse SCSS variables whenever possible. CSS values should (almost) never be hard-coded.
|
||||
- All TypeScript functions must have, at a minimum, a basic [JSDoc](https://jsdoc.app/) description of what the function is for and where it is used. If possible, document all function arguments via [`@param` JSDoc block tags](https://jsdoc.app/tags-param.html).
|
||||
- Expanding on NetBox's [dependency policy](style-guide.md#introducing-new-dependencies), new front-end dependencies should be avoided unless absolutely necessary. Every new front-end dependency adds to the CSS/JavaScript file size that must be loaded by the client and this should be minimized as much as possible. If adding a new dependency is unavoidable, use a tool like [Bundlephobia](https://bundlephobia.com/) to ensure the smallest possible library is used.
|
||||
- All UI elements must be usable on all common screen sizes, including mobile devices. Be sure to test newly implemented solutions (JavaScript included) on as many screen sizes and device types as possible.
|
||||
- NetBox aligns with Bootstrap's [supported Browsers and Devices](https://getbootstrap.com/docs/5.1/getting-started/browsers-devices/) list.
|
||||
|
||||
## UI Development
|
||||
|
||||
To contribute to the NetBox UI, you'll need to review the main [Getting Started guide](getting-started.md) in order to set up your base environment.
|
||||
|
||||
### Tools
|
||||
|
||||
Once you have a working NetBox development environment, you'll need to install a few more tools to work with the NetBox UI:
|
||||
|
||||
- [NodeJS](https://nodejs.org/en/download/) (the LTS release should suffice)
|
||||
- [Yarn](https://yarnpkg.com/getting-started/install) (version 1)
|
||||
|
||||
After Node and Yarn are installed on your system, you'll need to install all the NetBox UI dependencies:
|
||||
|
||||
```console
|
||||
$ cd netbox/project-static
|
||||
$ yarn
|
||||
```
|
||||
|
||||
!!! warning "Check Your Working Directory"
|
||||
You need to be in the `netbox/project-static` directory to run the below `yarn` commands.
|
||||
|
||||
### Bundling
|
||||
|
||||
In order for the TypeScript and Sass (SCSS) source files to be usable by a browser, they must first be transpiled (TypeScript → JavaScript, Sass → CSS), bundled, and minified. After making changes to TypeScript or Sass source files, run `yarn bundle`.
|
||||
|
||||
`yarn bundle` is a wrapper around the following subcommands, any of which can be run individually:
|
||||
|
||||
| Command | Action |
|
||||
| :-------------------- | :---------------------------------------------- |
|
||||
| `yarn bundle` | Bundle TypeScript and Sass (SCSS) source files. |
|
||||
| `yarn bundle:styles` | Bundle Sass (SCSS) source files only. |
|
||||
| `yarn bundle:scripts` | Bundle TypeScript source files only. |
|
||||
|
||||
All output files will be written to `netbox/project-static/dist`, where Django will pick them up when `manage.py collectstatic` is run.
|
||||
|
||||
!!! info "Remember to re-run `manage.py collectstatic`"
|
||||
If you're running the development web server — `manage.py runserver` — you'll need to run `manage.py collectstatic` to see your changes.
|
||||
|
||||
### Linting, Formatting & Type Checking
|
||||
|
||||
Before committing any changes to TypeScript files, and periodically throughout the development process, you should run `yarn validate` to catch formatting, code quality, or type errors.
|
||||
|
||||
!!! tip "IDE Integrations"
|
||||
If you're using an IDE, it is strongly recommended to install [ESLint](https://eslint.org/docs/user-guide/integrations), [TypeScript](https://github.com/Microsoft/TypeScript/wiki/TypeScript-Editor-Support), and [Prettier](https://prettier.io/docs/en/editors.html) integrations, if available. Most of them will automatically check and/or correct issues in the code as you develop, which can significantly increase your productivity as a contributor.
|
||||
|
||||
`yarn validate` is a wrapper around the following subcommands, any of which can be run individually:
|
||||
|
||||
| Command | Action |
|
||||
| :--------------------------------- | :--------------------------------------------------------------- |
|
||||
| `yarn validate` | Run all validation. |
|
||||
| `yarn validate:lint` | Validate TypeScript code via [ESLint](https://eslint.org/) only. |
|
||||
| `yarn validate:types` | Validate TypeScript code compilation only. |
|
||||
| `yarn validate:formatting` | Validate code formatting of JavaScript & Sass/SCSS files. |
|
||||
| `yarn validate:formatting:styles` | Validate code formatting Sass/SCSS only. |
|
||||
| `yarn validate:formatting:scripts` | Validate code formatting TypeScript only. |
|
||||
|
||||
You can also run the following commands to automatically fix formatting issues:
|
||||
|
||||
| Command | Action |
|
||||
| :-------------------- | :---------------------------------------------- |
|
||||
| `yarn format` | Format TypeScript and Sass (SCSS) source files. |
|
||||
| `yarn format:styles` | Format Sass (SCSS) source files only. |
|
||||
| `yarn format:scripts` | Format TypeScript source files only. |
|
||||
|
||||
29
docs/extra.css
Normal file
29
docs/extra.css
Normal file
@@ -0,0 +1,29 @@
|
||||
/* Images */
|
||||
img {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
table {
|
||||
margin-bottom: 24px;
|
||||
width: 100%;
|
||||
}
|
||||
th {
|
||||
padding: 6px;
|
||||
font-weight: bold;
|
||||
}
|
||||
td {
|
||||
padding: 6px;
|
||||
}
|
||||
/* Remove table header coloring. */
|
||||
.md-typeset table:not([class]) th {
|
||||
color: unset !important;
|
||||
background-color: unset !important;
|
||||
}
|
||||
thead tr {
|
||||
/* Colorize table headers. */
|
||||
background-color: var(--md-code-bg-color);
|
||||
color: var(--md-code-fg-color);
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
<h1>Extras</h1>
|
||||
|
||||
This section entails features of NetBox which are not crucial to its primary functions, but that provide additional value.
|
||||
|
||||
[TOC]
|
||||
|
||||
# Export Templates
|
||||
|
||||
NetBox allows users to define custom templates that can be used when exporting objects. To create an export template, navigate to Extras > Export Templates under the admin interface.
|
||||
|
||||
Each export template is associated with a certain type of object. For instance, if you create an export template for VLANs, your custom template will appear under the "Export" button on the VLANs list.
|
||||
|
||||
Export templates are written in [Django's template language](https://docs.djangoproject.com/en/1.9/ref/templates/language/), which is very similar to Jinja2. The list of objects returned from the database is stored in the `queryset` variable. Typically, you'll want to iterate through this list using a for loop.
|
||||
|
||||
A MIME type and file extension can optionally be defined for each export template. The default MIME type is `text/plain`.
|
||||
|
||||
## Example
|
||||
|
||||
Here's an example device export template that will generate a simple Nagios configuration from a list of devices.
|
||||
|
||||
```
|
||||
{% for d in queryset %}{% if d.status and d.primary_ip %}define host{
|
||||
use generic-switch
|
||||
host_name {{ d.name }}
|
||||
address {{ d.primary_ip.address.ip }}
|
||||
}
|
||||
{% endif %}{% endfor %}
|
||||
```
|
||||
|
||||
The generated output will look something like this:
|
||||
|
||||
```
|
||||
define host{
|
||||
use generic-switch
|
||||
host_name switch1
|
||||
address 192.0.2.1
|
||||
}
|
||||
define host{
|
||||
use generic-switch
|
||||
host_name switch2
|
||||
address 192.0.2.2
|
||||
}
|
||||
define host{
|
||||
use generic-switch
|
||||
host_name switch3
|
||||
address 192.0.2.3
|
||||
}
|
||||
```
|
||||
|
||||
# Graphs
|
||||
|
||||
NetBox does not generate graphs itself. This feature allows you to embed contextual graphs from an external resources inside certain NetBox views. Each embedded graph must be defined with the following parameters:
|
||||
|
||||
* **Type:** Interface, provider, or site. This determines where the graph will be displayed.
|
||||
* **Weight:** Determines the order in which graphs are displayed (lower weights are displayed first). Graphs with equal weights will be ordered alphabetically by name.
|
||||
* **Name:** The title to display above the graph.
|
||||
* **Source URL:** The source of the image to be embedded. The associated object will be available as a template variable named `obj`.
|
||||
* **Link URL (optional):** A URL to which the graph will be linked. The associated object will be available as a template variable named `obj`.
|
||||
|
||||
# Topology Maps
|
||||
|
||||
NetBox can generate simple topology maps from the physical network connections recorded in its database. First, you'll need to create a topology map definition under the admin UI at Extras > Topology Maps.
|
||||
|
||||
Each topology map is associated with a site. A site can have multiple topology maps, which might each illustrate a different aspect of its infrastructure (for example, production versus backend connectivity).
|
||||
|
||||
To define the scope of a topology map, decide which devices you want to include. The map will only include interface connections with both points terminated on an included device. Specify the devices to include in the **device patterns** field by entering a list of [regular expressions](https://en.wikipedia.org/wiki/Regular_expression) matching device names. For example, if you wanted to include "mgmt-switch1" through "mgmt-switch99", you might use the regex `mgmt-switch\d+`.
|
||||
|
||||
Each line of the **device patterns** field represents a hierarchical layer within the topology map. For example, you might map a traditional network with core, distribution, and access tiers like this:
|
||||
|
||||
```
|
||||
core-switch-[abcd]
|
||||
dist-switch\d
|
||||
access-switch\d+,oob-switch\d+
|
||||
```
|
||||
|
||||
Note that you can combine multiple regexes onto one line using commas. (Commas can only be used for separating regexes; they will not be processed as part of a regex.) The order in which regexes are listed on a line is significant: devices matching the first regex will be rendered first, and subsequent groups will be rendered to the right of those.
|
||||
35
docs/features/api-integration.md
Normal file
35
docs/features/api-integration.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# API & Integration
|
||||
|
||||
NetBox includes a slew of features which enable integration with other tools and resources powering your network.
|
||||
|
||||
## REST API
|
||||
|
||||
NetBox's REST API, powered by the [Django REST Framework](https://www.django-rest-framework.org/), provides a robust yet accessible interface for creating, modifying, and deleting objects. Employing HTTP for transfer and JSON for data encapsulation, the REST API is easily consumed by clients on any platform and extremely well suited for automation tasks.
|
||||
|
||||
```no-highlight
|
||||
curl -s -X POST \
|
||||
-H "Authorization: Token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
http://netbox/api/ipam/prefixes/ \
|
||||
--data '{"prefix": "192.0.2.0/24", "site": {"name": "Branch 12"}}'
|
||||
```
|
||||
|
||||
The REST API employs token-based authentication, which maps API clients to user accounts and their assigned permissions. The API endpoints are fully documented using OpenAPI, and NetBox even includes a convenient browser-based version of the API for exploration. The open source [pynetbox](https://github.com/netbox-community/pynetbox) and [go-netbox](https://github.com/netbox-community/go-netbox) API client libraries are also available for Python and Go, respectively.
|
||||
|
||||
To learn more about this feature, check out the [REST API documentation](../integrations/rest-api.md).
|
||||
|
||||
## GraphQL API
|
||||
|
||||
NetBox also provides a [GraphQL](https://graphql.org/) API to complement its REST API. GraphQL enables complex queries for arbitrary objects and fields, enabling the client to retrieve only the specific data it needs from NetBox. This is a special-purpose read-only API intended for efficient queries. Like the REST API, the GraphQL API employs token-based authentication.
|
||||
|
||||
To learn more about this feature, check out the [GraphQL API documentation](../integrations/graphql-api.md).
|
||||
|
||||
## Webhooks
|
||||
|
||||
A webhook is a mechanism for conveying to some external system a change that took place in NetBox. For example, you may want to notify a monitoring system whenever the status of a device is updated in NetBox. This can be done by creating a webhook for the device model in NetBox and identifying the webhook receiver. When NetBox detects a change to a device, an HTTP request containing the details of the change and who made it be sent to the specified receiver. Webhooks are an excellent mechanism for building event-based automation processes.
|
||||
|
||||
To learn more about this feature, check out the [webhooks documentation](../integrations/webhooks.md).
|
||||
|
||||
## Prometheus Metrics
|
||||
|
||||
NetBox includes a special `/metrics` view which exposes metrics for a [Prometheus](https://prometheus.io/) scraper, powered by the open source [django-prometheus](https://github.com/korfuri/django-prometheus) library. To learn more about this feature, check out the [Prometheus metrics documentation](../integrations/prometheus-metrics.md).
|
||||
49
docs/features/authentication-permissions.md
Normal file
49
docs/features/authentication-permissions.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Authentication & Permissions
|
||||
|
||||
## Object-Based Permissions
|
||||
|
||||
NetBox boasts a very robust permissions system which extends well beyond the model-based permissions of the underlying Django framework. Assigning permissions in NetBox involves several dimensions:
|
||||
|
||||
* The type(s) of object to which the permission applies
|
||||
* The users and/or groups being granted the permissions
|
||||
* The action(s) permitted by the permission (e.g. view, add, change, etc.)
|
||||
* Any constraints limiting application of the permission to a particular subset of objects
|
||||
|
||||
The implementation of constrains is what enables NetBox administrators to assign per-object permissions: Users can be limited to viewing or interacting with arbitrary subsets of objects based on the objects' attributes. For example, you might restrict a particular user to viewing only those prefixes or IP addresses within a particular VRF. Or you might restrict a group to modifying devices within a particular region.
|
||||
|
||||
Permission constraints are declared in JSON format when creating a permission, and operate very similarly to Django ORM queries. For instance, here's a constraint that matches reserved VLANs with a VLAN ID between 100 and 199:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"vid__gte": 100,
|
||||
"vid__lt": 200
|
||||
},
|
||||
{
|
||||
"status": "reserved"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Check out the [permissions documentation](../administration/permissions.md) for more information about permission constraints.
|
||||
|
||||
## LDAP Authentication
|
||||
|
||||
NetBox includes a built-in authentication backend for authenticating users against a remote LDAP server. The [installation documentation](../installation/6-ldap.md) provides more detail on this capability.
|
||||
|
||||
## Single Sign-On (SSO)
|
||||
|
||||
NetBox integrates with the open source [python-social-auth](https://github.com/python-social-auth) library to provide [myriad options](https://python-social-auth.readthedocs.io/en/latest/backends/index.html#supported-backends) for single sign-on (SSO) authentication. These include:
|
||||
|
||||
* Cognito
|
||||
* GitHub & GitHub Enterprise
|
||||
* GitLab
|
||||
* Google
|
||||
* Hashicorp Vault
|
||||
* Keycloak
|
||||
* Microsoft Azure AD
|
||||
* Microsoft Graph
|
||||
* Okta
|
||||
* OIDC
|
||||
|
||||
...and many others. It's also possible to build your own custom backends as needed using python-social-auth's base OAuth, OpenID, and SAML classes. You can find some examples of configuring SSO in NetBox' [authentication documentation](../administration/authentication/overview.md).
|
||||
13
docs/features/background-jobs.md
Normal file
13
docs/features/background-jobs.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Background Jobs
|
||||
|
||||
NetBox includes the ability to execute certain functions as background tasks. These include:
|
||||
|
||||
* [Report](../customization/reports.md) execution
|
||||
* [Custom script](../customization/custom-scripts.md) execution
|
||||
* Synchronization of [remote data sources](../integrations/synchronized-data.md)
|
||||
|
||||
Additionally, NetBox plugins can enqueue their own background tasks. This is accomplished using the [Job model](../models/core/job.md). Background tasks are executed by the `rqworker` process(es).
|
||||
|
||||
## Scheduled Jobs
|
||||
|
||||
Background jobs can be configured to run immediately, or at a set time in the future. Scheduled jobs can also be configured to repeat at a set interval.
|
||||
13
docs/features/change-logging.md
Normal file
13
docs/features/change-logging.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Change Logging
|
||||
|
||||
Every time an object in NetBox is created, updated, or deleted, a serialized copy of that object taken both before and after the change is saved to the database, along with metadata including the current time and the user associated with the change. These records form a persistent record of changes both for each individual object as well as NetBox as a whole. The global change log can be viewed by navigating to Other > Change Log.
|
||||
|
||||
A serialized representation of the instance being modified is included in JSON format. This is similar to how objects are conveyed within the REST API, but does not include any nested representations. For instance, the `tenant` field of a site will record only the tenant's ID, not a representation of the tenant.
|
||||
|
||||
When a request is made, a UUID is generated and attached to any change records resulting from that request. For example, editing three objects in bulk will create a separate change record for each (three in total), and each of those objects will be associated with the same UUID. This makes it easy to identify all the change records resulting from a particular request.
|
||||
|
||||
Change records are exposed in the API via the read-only endpoint `/api/extras/object-changes/`. They may also be exported via the web UI in CSV format.
|
||||
|
||||
## Correlating Changes by Request
|
||||
|
||||
Every request made to NetBox is assigned a random unique ID that can be used to correlate change records. For example, if you change the status of three sites using the UI's bulk edit feature, you will see three new change records (one for each site) all referencing the same request ID. This shows that all three changes were made as part of the same request.
|
||||
35
docs/features/circuits.md
Normal file
35
docs/features/circuits.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Circuits
|
||||
|
||||
NetBox is ideal for managing your network's transit and peering providers and circuits. It provides all the flexibility needed to model physical circuits in both data center and enterprise environments, and allows for "connecting" circuits directly to device interfaces via cables.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
ASN --> Provider
|
||||
Provider --> ProviderNetwork & ProviderAccount & Circuit
|
||||
ProviderAccount --> Circuit
|
||||
CircuitType --> Circuit
|
||||
|
||||
click ASN "../../models/circuits/asn/"
|
||||
click Circuit "../../models/circuits/circuit/"
|
||||
click CircuitType "../../models/circuits/circuittype/"
|
||||
click Provider "../../models/circuits/provider/"
|
||||
click ProviderAccount "../../models/circuits/provideraccount/"
|
||||
click ProviderNetwork "../../models/circuits/providernetwork/"
|
||||
```
|
||||
|
||||
## Providers
|
||||
|
||||
A provider is any organization which provides Internet or private connectivity. Typically, these are large carriers, however they might also include regional providers or even internal services. Each provider can be assigned account and contact details, and may have one or more AS numbers assigned to it.
|
||||
|
||||
Sometimes you'll need to model provider networks into which you don't have full visibility; these are typically represented on topology diagrams with cloud icons. NetBox facilitates this through its provider network model: A provider network represents a "black box" network to which your circuits can connect. A common example is a provider MPLS network connecting multiple sites.
|
||||
|
||||
## Circuits
|
||||
|
||||
A circuit is a physical connection between two points, which is installed and maintained by an external provider. For example, an Internet connection delivered as a fiber optic cable would be modeled as a circuit in NetBox.
|
||||
|
||||
Each circuit is associated with a provider and assigned a circuit ID, which must be unique to that provider. A circuit is also assigned a user-defined type, operational status, and various other operating characteristics. Provider accounts can also be employed to further categorize circuits belonging to a common provider: These may represent different business units or technologies.
|
||||
|
||||
Each circuit may have up to two terminations (A and Z) defined. Each termination can be associated with a particular site or provider network. In the case of the former, a cable can be connected between the circuit termination and a device component to map its physical connectivity.
|
||||
|
||||
!!! warning "Physical vs. Virtual Circuits"
|
||||
The circuit model in NetBox represents **physical** connections. Don't confuse these with _virtual_ circuits which may be offered by providers overlaid on physical infrastructure. (For example, a VLAN-tagged subinterface would be a virtual circuit.) A good rule of thumb: If you can't point to it, it's not a physical circuit.
|
||||
87
docs/features/configuration-rendering.md
Normal file
87
docs/features/configuration-rendering.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# Configuration Rendering
|
||||
|
||||
One of the critical aspects of operating a network is ensuring that every network node is configured correctly. By leveraging configuration templates and [context data](./context-data.md), NetBox can render complete configuration files for each device on your network.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
ConfigContext & ConfigTemplate --> Config{{Rendered configuration}}
|
||||
|
||||
click ConfigContext "../../models/extras/configcontext/"
|
||||
click ConfigTemplate "../../models/extras/configtemplate/"
|
||||
```
|
||||
|
||||
## Configuration Templates
|
||||
|
||||
Configuration templates are written in the [Jinja2 templating language](https://jinja.palletsprojects.com/), and may be automatically populated from remote data sources. Context data is applied to a template during rendering to output a complete configuration file. Below is an example Jinja2 template which renders a simple network switch configuration file.
|
||||
|
||||
```jinja2
|
||||
{% extends 'base.j2' %}
|
||||
|
||||
{% block content %}
|
||||
system {
|
||||
host-name {{ device.name }};
|
||||
domain-name example.com;
|
||||
time-zone UTC;
|
||||
authentication-order [ password radius ];
|
||||
ntp {
|
||||
{% for server in ntp_servers %}
|
||||
server {{ server }};
|
||||
{% endfor %}
|
||||
}
|
||||
}
|
||||
{% for interface in device.interfaces.all() %}
|
||||
{% include 'common/interface.j2' %}
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
```
|
||||
|
||||
When rendered for a specific NetBox device, the template's `device` variable will be populated with the device instance, and `ntp_servers` will be pulled from the device's available context data. The resulting output will be a valid configuration segment that can be applied directly to a compatible network device.
|
||||
|
||||
### Context Data
|
||||
|
||||
The objet for which the configuration is being rendered is made available as template context as `device` or `virtualmachine` for devices and virtual machines, respectively. Additionally, NetBox model classes can be accessed by the app or plugin in which they reside. For example:
|
||||
|
||||
```
|
||||
There are {{ dcim.Site.objects.count() }} sites.
|
||||
```
|
||||
|
||||
## Rendering Templates
|
||||
|
||||
### Device Configurations
|
||||
|
||||
NetBox provides a REST API endpoint specifically for rendering the default configuration template for a specific device. This is accomplished by sending a POST request to the device's unique URL, optionally including additional context data.
|
||||
|
||||
```no-highlight
|
||||
curl -X POST \
|
||||
-H "Authorization: Token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Accept: application/json; indent=4" \
|
||||
http://netbox:8000/api/dcim/devices/123/render-config/ \
|
||||
--data '{
|
||||
"extra_data": "abc123"
|
||||
}'
|
||||
```
|
||||
|
||||
This request will trigger resolution of the device's preferred config template in the following order:
|
||||
|
||||
* The config template assigned to the individual device
|
||||
* The config template assigned to the device's role
|
||||
* The config template assigned to the device's platform
|
||||
|
||||
If no config template has been assigned to any of these three objects, the request will fail.
|
||||
|
||||
### General Purpose Use
|
||||
|
||||
NetBox config templates can also be rendered without being tied to any specific device, using a separate general purpose REST API endpoint. Any data included with a POST request to this endpoint will be passed as context data for the template.
|
||||
|
||||
```no-highlight
|
||||
curl -X POST \
|
||||
-H "Authorization: Token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Accept: application/json; indent=4" \
|
||||
http://netbox:8000/api/extras/config-templates/123/render/ \
|
||||
--data '{
|
||||
"foo": "abc",
|
||||
"bar": 123
|
||||
}'
|
||||
```
|
||||
46
docs/features/contacts.md
Normal file
46
docs/features/contacts.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Contacts
|
||||
|
||||
Much like [tenancy](./tenancy.md), contact assignment enables you to track ownership of resources modeled in NetBox. A contact represents an individual responsible for a resource within the context of its assigned role.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
ContactGroup --> ContactGroup & Contact
|
||||
ContactRole & Contact --> assignment([Assignment])
|
||||
assignment --> Object
|
||||
|
||||
click Contact "../../models/tenancy/contact/"
|
||||
click ContactGroup "../../models/tenancy/contactgroup/"
|
||||
click ContactRole "../../models/tenancy/contactrole/"
|
||||
```
|
||||
|
||||
## Contact Groups
|
||||
|
||||
Contacts can be grouped arbitrarily into a recursive hierarchy, and a contact can be assigned to a group at any level within the hierarchy.
|
||||
|
||||
## Contact Roles
|
||||
|
||||
A contact role defines the relationship of a contact to an assigned object. For example, you might define roles for administrative, operational, and emergency contacts.
|
||||
|
||||
## Contacts
|
||||
|
||||
A contact should represent an individual or permanent point of contact. Each contact must define a name, and may optionally include a title, phone number, email address, and related details.
|
||||
|
||||
Contacts are reused for assignments, so each unique contact must be created only once and can be assigned to any number of NetBox objects, and there is no limit to the number of assigned contacts an object may have. Most core objects in NetBox can have contacts assigned to them.
|
||||
|
||||
The following models support the assignment of contacts:
|
||||
|
||||
* circuits.Circuit
|
||||
* circuits.Provider
|
||||
* circuits.ProviderAccount
|
||||
* dcim.Device
|
||||
* dcim.Location
|
||||
* dcim.Manufacturer
|
||||
* dcim.PowerPanel
|
||||
* dcim.Rack
|
||||
* dcim.Region
|
||||
* dcim.Site
|
||||
* dcim.SiteGroup
|
||||
* tenancy.Tenant
|
||||
* virtualization.Cluster
|
||||
* virtualization.ClusterGroup
|
||||
* virtualization.VirtualMachine
|
||||
86
docs/features/context-data.md
Normal file
86
docs/features/context-data.md
Normal file
@@ -0,0 +1,86 @@
|
||||
# Context Data
|
||||
|
||||
Configuration context data (or "config contexts" for short) is a powerful feature that enables users to define arbitrary data that applies to device and virtual machines based on certain characteristics. For example, suppose you want to define syslog servers for devices assigned to sites within a particular region. In NetBox, you can create a config context instance containing this data and apply it to the desired region. All devices within this region will now include this data when fetched via an API.
|
||||
|
||||
```json
|
||||
{
|
||||
"syslog-servers": [
|
||||
"192.168.43.107",
|
||||
"192.168.48.112"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Context data can be consumed by remote API clients, or it can be employed natively to render [configuration templates](./configuration-rendering.md).
|
||||
|
||||
Config contexts can be computed for objects based on the following criteria:
|
||||
|
||||
| Type | Devices | Virtual Machines |
|
||||
|---------------|------------------|------------------|
|
||||
| Region | :material-check: | :material-check: |
|
||||
| Site group | :material-check: | :material-check: |
|
||||
| Site | :material-check: | :material-check: |
|
||||
| Location | :material-check: | |
|
||||
| Device type | :material-check: | |
|
||||
| Role | :material-check: | :material-check: |
|
||||
| Platform | :material-check: | :material-check: |
|
||||
| Cluster type | | :material-check: |
|
||||
| Cluster group | | :material-check: |
|
||||
| Cluster | | :material-check: |
|
||||
| Tenant group | :material-check: | :material-check: |
|
||||
| Tenant | :material-check: | :material-check: |
|
||||
| Tag | :material-check: | :material-check: |
|
||||
|
||||
There are no restrictions around what data can be stored in a configuration context, so long as it can be expressed in JSON.
|
||||
|
||||
## Hierarchical Rendering
|
||||
|
||||
While this is handy on its own, the real power of context data stems from its ability to be merged and overridden using multiple instances. For example, perhaps you need to define _different_ syslog servers within the region for a particular device role. You can create a second config context with the appropriate data and a higher weight, and apply it to the desired role. This will override the lower-weight data that applies to the entire region. As you can imagine, this flexibility can cater to many complex use cases.
|
||||
|
||||
For example, suppose we want to specify a set of syslog and NTP servers for all devices within a region. We could create a config context instance with a weight of 1000 assigned to the region, with the following JSON data:
|
||||
|
||||
```json
|
||||
{
|
||||
"ntp-servers": [
|
||||
"172.16.10.22",
|
||||
"172.16.10.33"
|
||||
],
|
||||
"syslog-servers": [
|
||||
"172.16.9.100",
|
||||
"172.16.9.101"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
But suppose there's a problem at one particular site within this region preventing traffic from reaching the regional syslog server. Devices there need to use a local syslog server instead of the two defined above. We'll create a second config context assigned only to that site with a weight of 2000 and the following data:
|
||||
|
||||
```json
|
||||
{
|
||||
"syslog-servers": [
|
||||
"192.168.43.107"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
When the context data for a device at this site is rendered, the second, higher-weight data overwrite the first, resulting in the following:
|
||||
|
||||
```json
|
||||
{
|
||||
"ntp-servers": [
|
||||
"172.16.10.22",
|
||||
"172.16.10.33"
|
||||
],
|
||||
"syslog-servers": [
|
||||
"192.168.43.107"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Data from the higher-weight context overwrites conflicting data from the lower-weight context, while the non-conflicting portion of the lower-weight context (the list of NTP servers) is preserved.
|
||||
|
||||
## Local Context Data
|
||||
|
||||
Devices and virtual machines may also have a local context data defined. This local context will _always_ take precedence over any separate config context objects which apply to the device/VM. This is useful in situations where we need to call out a specific deviation in the data for a particular object.
|
||||
|
||||
!!! warning
|
||||
If you find that you're routinely defining local context data for many individual devices or virtual machines, [custom fields](./customization.md#custom-fields) may offer a more effective solution.
|
||||
90
docs/features/customization.md
Normal file
90
docs/features/customization.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# Customization
|
||||
|
||||
While NetBox strives to meet the needs of every network, the needs of users to cater to their own unique environments cannot be ignored. NetBox was built with this in mind, and can be customized in many ways to better suit your particular needs.
|
||||
|
||||
## Tags
|
||||
|
||||
Most objects in NetBox can be assigned user-created tags to aid with organization and filtering. Tag values are completely arbitrary: They may be used to store data in key-value pairs, or they may be employed simply as labels against which objects can be filtered. Each tag can also be assigned a color for quicker differentiation in the user interface.
|
||||
|
||||
Objects can be filtered by the tags they have applied. For example, the following API request will retrieve all devices tagged as "monitored":
|
||||
|
||||
```no-highlight
|
||||
GET /api/dcim/devices/?tag=monitored
|
||||
```
|
||||
|
||||
The `tag` filter can be specified multiple times to match only objects which have _all_ the specified tags assigned:
|
||||
|
||||
```no-highlight
|
||||
GET /api/dcim/devices/?tag=monitored&tag=deprecated
|
||||
```
|
||||
|
||||
## Bookmarks
|
||||
|
||||
!!! info "This feature was introduced in NetBox v3.6."
|
||||
|
||||
Users can bookmark their most commonly visited objects for convenient access. Bookmarks are listed under a user's profile, and can be displayed with custom filtering and ordering on the user's personal dashboard.
|
||||
|
||||
## Custom Fields
|
||||
|
||||
While NetBox provides a rather extensive data model out of the box, the need may arise to store certain additional data associated with NetBox objects. For example, you might need to record the invoice ID alongside an installed device, or record an approving authority when creating a new IP prefix. NetBox administrators can create custom fields on built-in objects to meet these needs.
|
||||
|
||||
NetBox supports many types of custom field, from basic data types like strings and integers, to complex structures like selection lists or raw JSON. It's even possible to add a custom field which references other NetBox objects. Custom field data is stored directly alongside the object to which it is applied in the database, which ensures minimal performance impact. And custom field data can be written and read via the REST API, just like built-in fields.
|
||||
|
||||
To learn more about this feature, check out the [custom field documentation](../customization/custom-fields.md).
|
||||
|
||||
## Custom Links
|
||||
|
||||
Custom links allow you to conveniently reference external resources related to NetBox objects from within the NetBox UI. For example, you might wish to link each virtual machine modeled in NetBox to its corresponding view in some orchestration application. You can do this by creating a templatized custom link for the virtual machine model, specifying something like the following for the link URL:
|
||||
|
||||
```no-highlight
|
||||
http://server.local/vms/?name={{ object.name }}
|
||||
```
|
||||
|
||||
Now, when viewing a virtual machine in NetBox, a user will see a handy button with the chosen title and link (complete with the name of the VM being viewed). Both the text and URL of custom links can be templatized in this manner, and custom links can be grouped together into dropdowns for more efficient display.
|
||||
|
||||
To learn more about this feature, check out the [custom link documentation](../customization/custom-links.md).
|
||||
|
||||
## Custom Validation
|
||||
|
||||
While NetBox employs robust built-in object validation to ensure the integrity of its database, you might wish to enforce additional rules governing the creation and modification of certain objects. For example, perhaps you require that every device defined in NetBox adheres to a particular naming scheme and includes an asset tag. You can configure a custom validation rule in NetBox to enforce these requirements for the device model:
|
||||
|
||||
```python
|
||||
CUSTOM_VALIDATORS = {
|
||||
"dcim.device": [
|
||||
{
|
||||
"name": {
|
||||
"regex": "[a-z]+\d{3}"
|
||||
},
|
||||
"asset_tag": {
|
||||
"required": True
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
To learn more about this feature, check out the [custom validation documentation](../customization/custom-validation.md).
|
||||
|
||||
## Export Templates
|
||||
|
||||
Most NetBox objects can be exported in bulk in two built-in CSV formats: The current view (what the user currently sees in the objects list), or all available data. NetBox also provides the capability to define your own custom data export formats via export templates. An export template is essentially [Jinja2](https://jinja.palletsprojects.com/) template code associated with a particular object type. From the objects list in the NetBox UI, a user can select any of the created export templates to export the objects according to the template logic.
|
||||
|
||||
An export template doesn't have to render CSV data: Its output can be in any character-based format. For example, you might want to render data using tabs as delimiters, or even create DNS address records directly from the IP addresses list. Export templates are a great way to get the data you need in the format you need quickly.
|
||||
|
||||
To learn more about this feature, check out the [export template documentation](../customization/export-templates.md).
|
||||
|
||||
## Reports
|
||||
|
||||
NetBox administrators can install custom Python scripts, known as _reports_, which run within NetBox and can be executed and analyzed within the NetBox UI. Reports are a great way to evaluate NetBox objects against a set of arbitrary rules. For example, you could write a report to check that every router has a loopback interface with an IP address assigned, or that every site has a minimum set of VLANs defined.
|
||||
|
||||
When a report runs, its logs messages pertaining to the operations being performed, and will ultimately result in either a pass or fail. Reports can be executed via the UI, REST API, or CLI (as a management command). They can be run immediately or scheduled to run at a future time.
|
||||
|
||||
To learn more about this feature, check out the [documentation for reports](../customization/reports.md).
|
||||
|
||||
## Custom Scripts
|
||||
|
||||
Custom scripts are similar to reports, but more powerful. A custom script can prompt the user for input via a form (or API data), and is built to do much more than just reporting. Custom scripts are generally used to automate tasks, such as the population of new objects in NetBox, or exchanging data with external systems. As with reports, they can be run via the UI, REST API, or CLI, and be scheduled to execute at a future time.
|
||||
|
||||
The complete Python environment is available to a custom script, including all of NetBox's internal mechanisms: There are no artificial restrictions on what a script can do. As such, custom scripting is considered an advanced feature and requires sufficient familiarity with Python and NetBox's data model.
|
||||
|
||||
To learn more about this feature, check out the [documentation for custom scripts](../customization/custom-scripts.md).
|
||||
91
docs/features/devices-cabling.md
Normal file
91
docs/features/devices-cabling.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# Devices & Cabling
|
||||
|
||||
At its heart, NetBox is a tool for modeling your network infrastructure, and the device object is pivotal to that function. A device can be any piece of physical hardware installed within your network, such as server, router, or switch, and may optionally be mounted within a rack. Within each device, resources such as network interfaces and console ports are modeled as discrete components, which may optionally be grouped into modules.
|
||||
|
||||
NetBox uses device types to represent unique real-world device models. This allows a user to define a device type and all its components once, and easily replicate an unlimited number of device instances from it.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Manufacturer -.-> Platform & DeviceType & ModuleType
|
||||
Manufacturer --> DeviceType & ModuleType
|
||||
DeviceRole & Platform & DeviceType --> Device
|
||||
Device & ModuleType ---> Module
|
||||
Device & Module --> Interface & ConsolePort & PowerPort & ...
|
||||
|
||||
click Device "../../models/dcim/device/"
|
||||
click DeviceRole "../../models/dcim/devicerole/"
|
||||
click DeviceType "../../models/dcim/devicetype/"
|
||||
click Manufacturer "../../models/dcim/manufacturer/"
|
||||
click Module "../../models/dcim/module/"
|
||||
click ModuleType "../../models/dcim/moduletype/"
|
||||
click Platform "../../models/dcim/platform/"
|
||||
```
|
||||
|
||||
## Manufacturers
|
||||
|
||||
A manufacturer generally represents an organization which produces hardware devices. These can be defined by users, however they should represent an actual entity rather than some abstract idea.
|
||||
|
||||
## Device Types
|
||||
|
||||
A device type represents a unique combination of manufacturer and hardware model which maps to discrete make and model of device which exists in the real world. Each device type typically has a number of components created on it, representing network interfaces, device bays, and so on. New devices of this type can then be created in NetBox, and any associated components will be automatically replicated from the device type. This avoids needing to tediously recreate components for each device as it is added in NetBox.
|
||||
|
||||
!!! tip "The Device Type Library"
|
||||
While users are always free to create their own device types in NetBox, many find it convenient to draw from our [community library](https://github.com/netbox-community/devicetype-library) of pre-defined device types. This is possible because a particular make and model of device is applicable universally and never changes.
|
||||
|
||||
All the following can be modeled as components:
|
||||
|
||||
* Interfaces
|
||||
* Console ports
|
||||
* Console server ports
|
||||
* Power ports
|
||||
* Power outlets
|
||||
* Pass-through ports (front and rear)
|
||||
* Module bays (which house modules)
|
||||
* Device bays (which house child devices)
|
||||
|
||||
For example, a Juniper EX4300-48T device type might have the following component templates defined:
|
||||
|
||||
* One template for a console port ("Console")
|
||||
* Two templates for power ports ("PSU0" and "PSU1")
|
||||
* 48 templates for 1GE interfaces ("ge-0/0/0" through "ge-0/0/47")
|
||||
* Four templates for 10GE interfaces ("xe-0/2/0" through "xe-0/2/3")
|
||||
|
||||
Once component templates have been created, every new device that you create as an instance of this type will automatically be assigned each of the components listed above.
|
||||
|
||||
!!! note "Component Instantiation is not Retroactive"
|
||||
The instantiation of components from a device type definition occurs only at the time of device creation. If you modify the components assigned to a device type, it will not affect devices which have already been created. This guards against any inadvertent changes to existing devices. However, you always have the option of adding, modifying, or deleting components on existing devices. (These changes can easily be applied to multiple devices at once using the bulk operations available in the UI.)
|
||||
|
||||
## Devices
|
||||
|
||||
Whereas a device type defines the make and model of a device, a device itself represents an actual piece of installed hardware somewhere in the real world. A device can be installed at a particular position within an equipment rack, or simply associated with a site (and optionally with a location within that site).
|
||||
|
||||
Each device can have an operational status, functional role, and software platform assigned. Device components are instantiated automatically from the assigned device type upon creation.
|
||||
|
||||
### Virtual Chassis
|
||||
|
||||
Sometimes it is necessary to model a set of physical devices as sharing a single management plane. Perhaps the most common example of such a scenario is stackable switches. These can be modeled as virtual chassis in NetBox, with one device acting as the chassis master and the rest as members. All components of member devices will appear on the master.
|
||||
|
||||
### Virtual Device Contexts
|
||||
|
||||
A virtual device context (VDC) is a logical partition within a device. Each VDC operates autonomously but shares a common pool of resources. Each interface can be assigned to one or more VDCs on its device.
|
||||
|
||||
## Module Types & Modules
|
||||
|
||||
Much like device types and devices, module types can instantiate discrete modules, which are hardware components installed within devices. Modules often have their own child components, which become available to the parent device. For example, when modeling a chassis-based switch with multiple line cards in NetBox, the chassis would be created (from a device type) as a device, and each of its line cards would be instantiated from a module type as a module installed in one of the device's module bays.
|
||||
|
||||
!!! tip "Device Bays vs. Module Bays"
|
||||
What's the difference between device bays and module bays? Device bays are appropriate when the installed hardware has its own management plane, isolated from the parent device. A common example is a blade server chassis in which the blades share power but operate independently. In contrast, a module bay holds a module which does _not_ operate independently of its parent device, as with the chassis switch line card example mentioned above.
|
||||
|
||||
One especially nice feature of modules is that templated components can be automatically renamed according to the module bay into which the parent module is installed. For example, if we create a module type with interfaces named `Gi{module}/0/1-48` and install a module of this type into module bay 7 of a device, NetBox will create interfaces named `Gi7/0/1-48`.
|
||||
|
||||
## Cables
|
||||
|
||||
NetBox models cables as connections among certain types of device components and other objects. Each cable can be assigned a type, color, length, and label. NetBox will enforce basic sanity checks to prevent invalid connections. (For example, a network interface cannot be connected to a power outlet.)
|
||||
|
||||
Either end of a cable may terminate to multiple objects of the same type. For example, a network interface can be connected via a fiber optic cable to two discrete ports on a patch panel (each port attaching to an individual fiber strand in the patch cable).
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
Interface --> Cable
|
||||
Cable --> fp1[Front Port] & fp2[Front Port]
|
||||
```
|
||||
66
docs/features/facilities.md
Normal file
66
docs/features/facilities.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# Facilities
|
||||
|
||||
From global regions down to individual equipment racks, NetBox allows you to model your network's entire presence. This is accomplished through the use of several purpose-built models. The graph below illustrates these models and their relationships.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Region --> Region
|
||||
SiteGroup --> SiteGroup
|
||||
Region & SiteGroup --> Site
|
||||
Site --> Location & Device
|
||||
Location --> Location
|
||||
Location --> Rack & Device
|
||||
Rack --> Device
|
||||
Site --> Rack
|
||||
RackRole --> Rack
|
||||
|
||||
click Device "../../models/dcim/device/"
|
||||
click Location "../../models/dcim/location/"
|
||||
click Rack "../../models/dcim/rack/"
|
||||
click RackRole "../../models/dcim/rackrole/"
|
||||
click Region "../../models/dcim/region/"
|
||||
click Site "../../models/dcim/site/"
|
||||
click SiteGroup "../../models/dcim/sitegroup/"
|
||||
```
|
||||
|
||||
## Regions
|
||||
|
||||
Regions represent geographic domains in which your network or its customers have a presence. These are typically used to model countries, states, and cities, although NetBox does not prescribe any precise uses and your needs may differ.
|
||||
|
||||
Regions are self-nesting, so you can define child regions within a parent, and grandchildren within each child. For example, you might create a hierarchy like this:
|
||||
|
||||
* Europe
|
||||
* France
|
||||
* Germany
|
||||
* Spain
|
||||
* North America
|
||||
* Canada
|
||||
* United States
|
||||
* California
|
||||
* New York
|
||||
* Texas
|
||||
|
||||
Regions will always be listed alphabetically by name within each parent, and there is no maximum depth for the hierarchy.
|
||||
|
||||
## Site Groups
|
||||
|
||||
Like regions, site groups can be arranged in a recursive hierarchy for grouping sites. However, whereas regions are intended for geographic organization, site groups may be used for functional grouping. For example, you might classify sites as corporate, branch, or customer sites in addition to where they are physically located.
|
||||
|
||||
The use of both regions and site groups affords to independent but complementary dimensions across which sites can be organized.
|
||||
|
||||
## Sites
|
||||
|
||||
A site typically represents a building within a region and/or site group. Each site is assigned an operational status (e.g. active or planned), and can have a discrete mailing address and GPS coordinates assigned to it.
|
||||
|
||||
## Locations
|
||||
|
||||
A location can be any logical subdivision within a building, such as a floor or room. Like regions and site groups, locations can be nested into a self-recursive hierarchy for maximum flexibility. And like sites, each location has an operational status assigned to it.
|
||||
|
||||
## Racks
|
||||
|
||||
Finally, NetBox models each equipment rack as a discrete object within a site and location. These are physical objects into which devices are installed. Each rack can be assigned an operational status, type, facility ID, and other attributes related to inventory tracking. Each rack also must define a height (in rack units) and width, and may optionally specify its physical dimensions.
|
||||
|
||||
Each rack must be associated to a site, but the assignment to a location within that site is optional. Users can also create custom roles to which racks can be assigned. NetBox supports tracking rack space in half-unit increments, so it's possible to mount devices at e.g. position 2.5 within a rack.
|
||||
|
||||
!!! tip "Devices"
|
||||
You'll notice in the diagram above that a device can be installed within a site, location, or rack. This approach affords plenty of flexibility as not all sites need to define child locations, and not all devices reside in racks.
|
||||
69
docs/features/ipam.md
Normal file
69
docs/features/ipam.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# IP Address Management
|
||||
|
||||
IP address management (IPAM) is one of NetBox's core features. It supports full parity for IP4 and IPv6, advanced VRF assignment, automatic hierarchy formation, and much more.
|
||||
|
||||
## IP Hierarchy
|
||||
|
||||
NetBox employs several object types to represent a hierarchy of IP resources:
|
||||
|
||||
* **Aggregate** - A prefix which represents the root of an addressing hierarchy. This is typically a large swath of public or private address space allocated for use by your organization. Each aggregate is assigned to an authoritative RIR.
|
||||
* **Prefix** - A subnet defined within an aggregate. Prefixes extend the hierarchy by nesting within one another. (For example, 192.168.123.0/24 will appear within 192.168.0.0/16.) Each prefix can be assigned a functional role as well as an operational status.
|
||||
* **IP Range** - An arbitrary range of individual IP addresses within a prefix, all sharing the same mask. Ranges are commonly affiliated with DHCP scopes, but can be used for any similar purpose.
|
||||
* **IP Address** - An individual IP address along with its subnet mask, automatically arranged beneath its parent prefix.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
RIR --> Aggregate
|
||||
Aggregate & Role --> Prefix
|
||||
Prefix --> Prefix
|
||||
Prefix --> IPRange & IPAddress
|
||||
|
||||
click Aggregate "../../models/ipam/aggregate/"
|
||||
click IPAddress "../../models/ipam/ipaddress/"
|
||||
click IPRange "../../models/ipam/iprange/"
|
||||
click Prefix "../../models/ipam/prefix/"
|
||||
click RIR "../../models/ipam/rir/"
|
||||
click Role "../../models/ipam/role/"
|
||||
```
|
||||
|
||||
!!! tip "Automatic Hierarchies"
|
||||
IP objects in NetBox never need to be manually assigned to the parent objects. The construction of hierarchies is handled automatically by the application according to the inherent rules of IP addressing.
|
||||
|
||||
An example hierarchy might look like this:
|
||||
|
||||
* 100.64.0.0/10 (aggregate)
|
||||
* 100.64.0.0/20 (prefix)
|
||||
* 100.64.16.0/20 (prefix)
|
||||
* 100.64.16.0/24 (prefix)
|
||||
* 100.64.16.1/24 (address)
|
||||
* 100.64.16.2/24 (address)
|
||||
* 100.64.16.3/24 (address)
|
||||
* 100.64.19.0/24 (prefix)
|
||||
* 100.64.32.0/20 (prefix)
|
||||
* 100.64.32.1/24 (address)
|
||||
* 100.64.32.10-99/24 (range)
|
||||
|
||||
## Utilization Stats
|
||||
|
||||
The utilization rate for each prefix is calculated automatically depending on its status. _Container_ prefixes are those which house child prefixes; their utilization rate is determined based on how much of their available IP space is consumed by child prefixes. The utilization rate for any other type of prefix is determined by the aggregate usage of any child IP addresses and/or ranges defined.
|
||||
|
||||
Similarly, utilization rates for aggregates is determined based on the space consumed by their child prefixes.
|
||||
|
||||
## VRF Tracking
|
||||
|
||||
NetBox supports the modeling of discrete virtual routing and forwarding (VRF) instances to represent multiple routing tables, including those with overlapping address space. Each type of IP object within an aggregate - prefix, IP range, and IP address - can be assigned to a particular VRF. Consequently, each VRF maintains its own isolated IP hierarchy. This makes it very easy to track overlapping IP space.
|
||||
|
||||
VRF modeling in NetBox very closely follows what you find in real-world network configurations, with each VRF assigned a standards-compliant route distinguisher. You can even create route targets to manage the import and export of routing information among VRFs.
|
||||
|
||||
!!! tip "Enforcing Unique IP Space"
|
||||
Each VRF can be independently configured to permit or prohibit duplicate IP objects. For example, a VRF which has been configured to enforce unique IP space will not allow the creation of two 192.0.2.0/24 prefixes. The ability to toggle this restriction per VRF affords the user maximum flexibility in modeling their IP space.
|
||||
|
||||
## AS Numbers
|
||||
|
||||
An often overlooked component of IPAM, NetBox also tracks autonomous system (AS) numbers and their assignment to sites. Both 16- and 32-bit AS numbers are supported, and like aggregates each ASN is assigned to an authoritative RIR.
|
||||
|
||||
## Service Mapping
|
||||
|
||||
NetBox models network applications as discrete service objects associated with devices and/or virtual machines, and optionally with specific IP addresses attached to those parent objects. These can be used to catalog the applications running on your network for reference by other objects or integrated tools.
|
||||
|
||||
To model services in NetBox, begin by creating a service template defining the name, protocol, and port number(s) on which the service listens. This template can then be easily instantiated to "attach" new services to a device or virtual machine. It's also possible to create new services by hand, without a template, however this approach can be tedious.
|
||||
5
docs/features/journaling.md
Normal file
5
docs/features/journaling.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# Journaling
|
||||
|
||||
All primary and organizational models in NetBox support journaling. A journal is a collection of human-generated notes and comments about an object maintained for historical context. It supplements NetBox's change log to provide additional information about why changes have been made or to convey events which occur outside NetBox. Unlike the change log, in which records typically expire after a configurable period of time, journal entries persist for the life of their associated object.
|
||||
|
||||
Each journal entry has a selectable kind (info, success, warning, or danger) and a user-populated `comments` field. Each entry automatically records the date, time, and associated user upon being created.
|
||||
5
docs/features/l2vpn-overlay.md
Normal file
5
docs/features/l2vpn-overlay.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# L2VPN & Overlay
|
||||
|
||||
L2VPN and overlay networks, such as VXLAN and EVPN, can be defined in NetBox and tied to interfaces and VLANs. This allows for easy tracking of overlay assets and their relationships with underlay resources.
|
||||
|
||||
Each L2VPN instance has a type and optional unique identifier. Like VRFs, L2VPNs can also have import and export route targets assigned to them. Terminations can then be created to assign VLANs and/or device and virtual machine interfaces to the overlay.
|
||||
20
docs/features/power-tracking.md
Normal file
20
docs/features/power-tracking.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Power Tracking
|
||||
|
||||
As part of its DCIM feature set, NetBox supports modeling facility power as discrete power panels and feeds. These are most commonly used to document power distribution within a data center, but can serve more traditional environments as well.
|
||||
|
||||

|
||||
|
||||
## Power Panels
|
||||
|
||||
A power panel is the furthest upstream power element modeled in NetBox. It typically represents a power distribution panel (or breaker panel) where facility power is split into multiple discrete circuits, which are modeled as feeds.
|
||||
|
||||
Each power panel is associated with a site, and may optionally be associated with a particular location within that site. There is no limit to how many power feeds a single panel can supply, however both of these object types should map to real-world objects.
|
||||
|
||||
## Power Feeds
|
||||
|
||||
A power feed represents a discrete power circuit originating from an upstream power panel. Each power feed can be assigned a name, operational status, and various electrical characteristics such as supply (AC or DC), voltage, amperage, and so on.
|
||||
|
||||
A device power port can be connected to a power feed via a cable. Only one port can be connected to a feed: Where multiple devices draw power from the same feed, a power distribution unit (PDU) must be modeled as an individual device mapping a power port to multiple power outlets to which the downstream devices can connect (as in the example above).
|
||||
|
||||
!!! tip "Primary and Redundant Power"
|
||||
Each power feed in NetBox is assigned a type: primary or redundant. This allows easily modeling redundant power distribution topologies. In scenarios involving only a single, non-redundant power supply, mark all power feeds as primary.
|
||||
27
docs/features/search.md
Normal file
27
docs/features/search.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Search
|
||||
|
||||
## Global Search
|
||||
|
||||
NetBox includes a powerful global search engine, providing a single convenient interface to search across its complex data model. Relevant fields on each model are indexed according to their precedence, so that the most relevant results are returned first. When objects are created or modified, the search index is updated immediately, ensuring real-time accuracy.
|
||||
|
||||
When entering a search query, the user can choose a specific lookup type: exact match, partial match, etc. When a partial match is found, the matching portion of the applicable field value is included with each result so that the user can easily determine its relevance.
|
||||
|
||||
Custom fields defined by NetBox administrators are also included in search results if configured with a search weight. Additionally, NetBox plugins can register their own custom models for inclusion alongside core models.
|
||||
|
||||
## Saved Filters
|
||||
|
||||
Each type of object in NetBox is accompanied by an extensive set of filters, each tied to a specific attribute, which enable the creation of complex queries. Often you'll find that certain queries are used routinely to apply some set of prescribed conditions to a query. Once a set of filters has been applied, NetBox offers the option to save it for future use.
|
||||
|
||||
For example, suppose you often need to locate all planned devices of a certain type within a region. The applicable filters can be applied and then saved as custom named filter for reuse, such that
|
||||
|
||||
```
|
||||
?status=planned&device_type_id=78®ion_id=12
|
||||
```
|
||||
|
||||
becomes
|
||||
|
||||
```
|
||||
?filter=my-custom-filter
|
||||
```
|
||||
|
||||
These saved filters can be used both within the UI and for API queries.
|
||||
25
docs/features/synchronized-data.md
Normal file
25
docs/features/synchronized-data.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Synchronized Data
|
||||
|
||||
Several models in NetBox support the automatic synchronization of local data from a designated remote source. For example, [configuration templates](./configuration-rendering.md) defined in NetBox can source their content from text files stored in a remote git repository. This accomplished using the core [data source](../models/core/datasource.md) and [data file](../models/core/datafile.md) models.
|
||||
|
||||
To enable remote data synchronization, the NetBox administrator first designates one or more remote data sources. NetBox currently supports the following source types:
|
||||
|
||||
* Git repository
|
||||
* Amazon S3 bucket (or compatible product)
|
||||
* Local disk path
|
||||
|
||||
(Local disk paths are considered "remote" in this context as they exist outside NetBox's database. These paths could also be mapped to external network shares.)
|
||||
|
||||
|
||||
!!! info
|
||||
Data backends which connect to external sources typically require the installation of one or more supporting Python libraries. The Git backend requires the [`dulwich`](https://www.dulwich.io/) package, and the S3 backend requires the [`boto3`](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) package. These must be installed within NetBox's environment to enable these backends.
|
||||
|
||||
Each type of remote source has its own configuration parameters. For instance, a git source will ask the user to specify a branch and authentication credentials. Once the source has been created, a synchronization job is run to automatically replicate remote files in the local database.
|
||||
|
||||
The following NetBox models can be associated with replicated data files:
|
||||
|
||||
* Config contexts
|
||||
* Config templates
|
||||
* Export templates
|
||||
|
||||
Once a data has been designated for a local instance, its data will be replaced with the content of the replicated file. When the replicated file is updated in the future (via synchronization jobs), the local instance will be flagged as having out-of-date data. A user can then synchronize these objects individually or in bulk to effect the update. This two-stage process ensures that automated synchronization tasks do not immediately affect production data.
|
||||
38
docs/features/tenancy.md
Normal file
38
docs/features/tenancy.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Tenancy
|
||||
|
||||
Most core objects within NetBox's data model support _tenancy_. This is the association of an object with a particular tenant to convey ownership or dependency. For example, an enterprise might represent its internal business units as tenants, whereas a managed services provider might create a tenant in NetBox to represent each of its customers.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
TenantGroup --> TenantGroup & Tenant
|
||||
Tenant --> Site & Device & Prefix & Circuit & ...
|
||||
|
||||
click Tenant "../../models/tenancy/tenant/"
|
||||
click TenantGroup "../../models/tenancy/tenantgroup/"
|
||||
```
|
||||
|
||||
## Tenant Groups
|
||||
|
||||
Tenants can be grouped by any logic that your use case demands, and groups can be nested recursively for maximum flexibility. For example, You might define a parent "Customers" group with child groups "Current" and "Past" within it. A tenant can be assigned to a group at any level within the hierarchy.
|
||||
|
||||
## Tenants
|
||||
|
||||
Typically, the tenant model is used to represent a customer or internal organization, however it can be used for whatever purpose meets your needs.
|
||||
|
||||
Most core objects within NetBox can be assigned to particular tenant, so this model provides a very convenient way to correlate ownership across object types. For example, each of your customers might have its own racks, devices, IP addresses, circuits and so on: These can all be easily tracked via tenant assignment.
|
||||
|
||||
The following objects can be assigned to tenants:
|
||||
|
||||
* Sites
|
||||
* Racks
|
||||
* Rack reservations
|
||||
* Devices
|
||||
* VRFs
|
||||
* Prefixes
|
||||
* IP addresses
|
||||
* VLANs
|
||||
* Circuits
|
||||
* Clusters
|
||||
* Virtual machines
|
||||
|
||||
Tenant assignment is used to signify the ownership of an object in NetBox. As such, each object may only be owned by a single tenant. For example, if you have a firewall dedicated to a particular customer, you would assign it to the tenant which represents that customer. However, if the firewall serves multiple customers, it doesn't *belong* to any particular customer, so tenant assignment would not be appropriate.
|
||||
26
docs/features/virtualization.md
Normal file
26
docs/features/virtualization.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Virtualization
|
||||
|
||||
Virtual machines and clusters can be modeled in NetBox alongside physical infrastructure. IP addresses and other resources are assigned to these objects just like physical objects, providing a seamless integration between physical and virtual networks.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
ClusterGroup & ClusterType --> Cluster
|
||||
Cluster --> VirtualMachine
|
||||
Platform --> VirtualMachine
|
||||
VirtualMachine --> VMInterface
|
||||
|
||||
click Cluster "../../models/virtualization/cluster/"
|
||||
click ClusterGroup "../../models/virtualization/clustergroup/"
|
||||
click ClusterType "../../models/virtualization/clustertype/"
|
||||
click Platform "../../models/dcim/platform/"
|
||||
click VirtualMachine "../../models/virtualization/virtualmachine/"
|
||||
click VMInterface "../../models/virtualization/vminterface/"
|
||||
```
|
||||
|
||||
## Clusters
|
||||
|
||||
A cluster is one or more physical host devices on which virtual machines can run. Each cluster must have a type and operational status, and may be assigned to a group. (Both types and groups are user-defined.) Each cluster may designate one or more devices as hosts, however this is optional.
|
||||
|
||||
## Virtual Machines
|
||||
|
||||
A virtual machine is a virtualized compute instance. These behave in NetBox very similarly to device objects, but without any physical attributes. For example, a VM may have interfaces assigned to it with IP addresses and VLANs, however its interfaces cannot be connected via cables (because they are virtual). Each VM may also define its compute, memory, and storage resources as well.
|
||||
24
docs/features/vlan-management.md
Normal file
24
docs/features/vlan-management.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# VLAN Management
|
||||
|
||||
Complementing its IPAM capabilities, NetBox also tracks VLAN information to assist with layer two network configurations. VLANs are defined per IEEE 802.1Q and related standards, and can be assigned to groups and functional roles.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
VLANGroup & Role --> VLAN
|
||||
|
||||
click Role "../../models/ipam/role/"
|
||||
click VLAN "../../models/ipam/vlan/"
|
||||
click VLANGroup "../../models/ipam/vlangroup/"
|
||||
```
|
||||
|
||||
## VLAN Groups
|
||||
|
||||
A VLAN group is a collection of VLANs defined within a particular scope. Each VLAN group can be associated with a particular site, location, rack, or similar object to indicate its domain, and designates a minimum and maximum VLAN ID within the group. (By default, these are the standard minimum and maximum values of 1 and 4094, respectively.)
|
||||
|
||||
Within a group, each VLAN must have a unique ID and name. There is no limit to how many groups can be created per scope.
|
||||
|
||||
## VLANs
|
||||
|
||||
NetBox models VLANs according to their definition under IEEE 802.1Q, with a 12-bit VLAN ID and a name. Each VLAN also has an operational status, and may be assigned a function role, just like prefixes. Each VLAN can be assigned to a VLAN group or site to convey the domain in which the VLAN exists.
|
||||
|
||||
Once defined, VLANs can be associated with device and virtual machine interfaces. Each interface can be assigned an 802.1Q mode (access or tagged), and the relevant VLANs can be applied as tagged or untagged.
|
||||
29
docs/features/wireless.md
Normal file
29
docs/features/wireless.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Wireless
|
||||
|
||||
Just as NetBox provides robust modeling for physical cable plants, it also supports modeling wireless LANs and point-to-point links.
|
||||
|
||||
## Wireless LANs
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
WirelessLANGroup --> WirelessLANGroup & WirelessLAN
|
||||
|
||||
click WirelessLAN "../../models/wireless/wirelesslan/"
|
||||
click WirelessLANGroup "../../models/wireless/wirelesslangroup/"
|
||||
```
|
||||
|
||||
A wireless LAN is a multi-access network shared by multiple wireless clients, identified by a common service set identifier (SSID) and authentication parameters. Wireless LANs can be organized into self-nesting groups, and each wireless LAN may optionally be bound to a particular VLAN. This allows easily mapping wireless networks to their wired counterparts.
|
||||
|
||||
Authentication attributes for wireless LANs include:
|
||||
|
||||
* **Type** - Open, WEP, WPA, etc.
|
||||
* **Cipher** - Auto, TKIP, or AES
|
||||
* **Pre-shared key (PSK)** - The secret key configured on all participating clients
|
||||
|
||||
The definition of authentication parameters is optional.
|
||||
|
||||
## Wireless Links
|
||||
|
||||
Whereas a wireless LAN represents a physical multi-access segment with any number of clients, a wireless link is a point-to-point connection between exactly two stations. These links behave much like cables, but more accurately model the nature of wireless communications.
|
||||
|
||||
Like wireless LANs, wireless links also have an SSID and (optional) authentication attributes.
|
||||
@@ -1,452 +0,0 @@
|
||||
<h1>Getting Started</h1>
|
||||
|
||||
This guide documents the process of installing NetBox on an Ubuntu 14.04 server with [nginx](https://www.nginx.com/) and [gunicorn](http://gunicorn.org/).
|
||||
|
||||
[TOC]
|
||||
|
||||
# PostgreSQL
|
||||
|
||||
## Installation
|
||||
|
||||
The following packages are needed to install PostgreSQL:
|
||||
|
||||
* postgresql
|
||||
* libpq-dev
|
||||
* python-psycopg2
|
||||
|
||||
```
|
||||
# apt-get install postgresql libpq-dev python-psycopg2
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
At a minimum, we need to create a database for NetBox and assign it a username and password for authentication. This is done with the following commands.
|
||||
|
||||
DO NOT USE THE PASSWORD FROM THE EXAMPLE.
|
||||
|
||||
```
|
||||
# sudo -u postgres psql
|
||||
psql (9.3.13)
|
||||
Type "help" for help.
|
||||
|
||||
postgres=# CREATE DATABASE netbox;
|
||||
CREATE DATABASE
|
||||
postgres=# CREATE USER netbox WITH PASSWORD 'J5brHrAXFLQSif0K';
|
||||
CREATE ROLE
|
||||
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
|
||||
GRANT
|
||||
postgres=# \q
|
||||
```
|
||||
|
||||
You can verify that authentication works using the following command:
|
||||
|
||||
```
|
||||
# psql -U netbox -h localhost -W
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# NetBox
|
||||
|
||||
## Installation
|
||||
|
||||
NetBox requires following dependencies:
|
||||
|
||||
* python2.7
|
||||
* python-dev
|
||||
* python-pip
|
||||
* libxml2-dev
|
||||
* libxslt1-dev
|
||||
* libffi-dev
|
||||
* graphviz
|
||||
|
||||
```
|
||||
# apt-get install python2.7 python-dev git python-pip libxml2-dev libxslt1-dev libffi-dev graphviz
|
||||
```
|
||||
|
||||
You may opt to install NetBox either from a numbered release or by cloning the master branch of its repository on GitHub.
|
||||
|
||||
### Option A: Download a Release
|
||||
|
||||
Download the [latest stable release](https://github.com/digitalocean/netbox/releases) from GitHub as a tarball or ZIP archive. Extract it to your desired path. In this example, we'll use `/opt/netbox`.
|
||||
|
||||
```
|
||||
# wget https://github.com/digitalocean/netbox/archive/vX.Y.Z.tar.gz
|
||||
# tar -xzf vX.Y.Z.tar.gz -C /opt
|
||||
# cd /opt/
|
||||
# ln -s netbox-1.0.4/ netbox
|
||||
# cd /opt/netbox/
|
||||
```
|
||||
|
||||
### Option B: Clone the Git Repository
|
||||
|
||||
Create the base directory for the NetBox installation. For this guide, we'll use `/opt/netbox`.
|
||||
|
||||
```
|
||||
# mkdir -p /opt/netbox/
|
||||
# cd /opt/netbox/
|
||||
```
|
||||
|
||||
If `git` is not already installed, install it:
|
||||
|
||||
```
|
||||
# sudo apt-get install git
|
||||
```
|
||||
|
||||
Next, clone the NetBox git repository into the current directory:
|
||||
|
||||
```
|
||||
# git clone https://github.com/digitalocean/netbox.git .
|
||||
Cloning into '.'...
|
||||
remote: Counting objects: 1994, done.
|
||||
remote: Compressing objects: 100% (150/150), done.
|
||||
remote: Total 1994 (delta 80), reused 0 (delta 0), pack-reused 1842
|
||||
Receiving objects: 100% (1994/1994), 472.36 KiB | 0 bytes/s, done.
|
||||
Resolving deltas: 100% (1495/1495), done.
|
||||
Checking connectivity... done.
|
||||
```
|
||||
|
||||
### Install Python Packages
|
||||
|
||||
Install the necessary Python packages using pip. (If you encounter any compilation errors during this step, ensure that you've installed all of the required dependencies.)
|
||||
|
||||
```
|
||||
# pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Move into the NetBox configuration directory and make a copy of `configuration.example.py` named `configuration.py`.
|
||||
|
||||
```
|
||||
# cd netbox/netbox/
|
||||
# cp configuration.example.py configuration.py
|
||||
```
|
||||
|
||||
Open `configuration.py` with your preferred editor and set the following variables:
|
||||
|
||||
* ALLOWED_HOSTS
|
||||
* DATABASE
|
||||
* SECRET_KEY
|
||||
|
||||
### ALLOWED_HOSTS
|
||||
|
||||
This is a list of the valid hostnames by which this server can be reached. You must specify at least one name or IP address.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']
|
||||
```
|
||||
|
||||
### DATABASE
|
||||
|
||||
This parameter holds the database configuration details. You must define the username and password used when you configured PostgreSQL. If the service is running on a remote host, replace `localhost` with its address.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
DATABASE = {
|
||||
'NAME': 'netbox', # Database name
|
||||
'USER': 'netbox', # PostgreSQL username
|
||||
'PASSWORD': 'J5brHrAXFLQSif0K', # PostgreSQL password
|
||||
'HOST': 'localhost', # Database server
|
||||
'PORT': '', # Database port (leave blank for default)
|
||||
}
|
||||
```
|
||||
|
||||
### SECRET_KEY
|
||||
|
||||
Generate a random secret key of at least 50 alphanumeric characters. This key must be unique to this installation and must not be shared outside the local system.
|
||||
|
||||
You may use the script located at `netbox/generate_secret_key.py` to generate a suitable key.
|
||||
|
||||
## Run Migrations
|
||||
|
||||
Before NetBox can run, we need to install the database schema. This is done by running `./manage.py migrate` from the `netbox` directory (`/opt/netbox/netbox/` in our example):
|
||||
|
||||
```
|
||||
# ./manage.py migrate
|
||||
Operations to perform:
|
||||
Apply all migrations: dcim, sessions, admin, ipam, utilities, auth, circuits, contenttypes, extras, secrets, users
|
||||
Running migrations:
|
||||
Rendering model states... DONE
|
||||
Applying contenttypes.0001_initial... OK
|
||||
Applying auth.0001_initial... OK
|
||||
Applying admin.0001_initial... OK
|
||||
...
|
||||
```
|
||||
|
||||
If this step results in a PostgreSQL authentication error, ensure that the username and password created in the database match what has been specified in `configuration.py`
|
||||
|
||||
## Create a Super User
|
||||
|
||||
NetBox does not come with any predefined user accounts. You'll need to create a super user to be able to log into NetBox:
|
||||
|
||||
```
|
||||
# ./manage.py createsuperuser
|
||||
Username: admin
|
||||
Email address: admin@example.com
|
||||
Password:
|
||||
Password (again):
|
||||
Superuser created successfully.
|
||||
```
|
||||
|
||||
## Collect Static Files
|
||||
|
||||
```
|
||||
# ./manage.py collectstatic
|
||||
|
||||
You have requested to collect static files at the destination
|
||||
location as specified in your settings:
|
||||
|
||||
/opt/netbox/netbox/static
|
||||
|
||||
This will overwrite existing files!
|
||||
Are you sure you want to do this?
|
||||
|
||||
Type 'yes' to continue, or 'no' to cancel: yes
|
||||
```
|
||||
|
||||
## Test the Application
|
||||
|
||||
At this point, NetBox should be able to run. We can verify this by starting a development instance:
|
||||
|
||||
```
|
||||
# ./manage.py runserver 0.0.0.0:8000 --insecure
|
||||
Performing system checks...
|
||||
|
||||
System check identified no issues (0 silenced).
|
||||
June 17, 2016 - 16:17:36
|
||||
Django version 1.9.7, using settings 'netbox.settings'
|
||||
Starting development server at http://0.0.0.0:8000/
|
||||
Quit the server with CONTROL-C.
|
||||
```
|
||||
|
||||
Now if we navigate to the name or IP of the server (as defined in `ALLOWED_HOSTS`) we should be greeted with the NetBox home page. Note that this built-in web service is for development and testing purposes only. It is not suited for production use.
|
||||
|
||||
If the test service does not run, or you cannot reach the NetBox home page, something has gone wrong. Do not proceed with the rest of this guide until the installation has been corrected.
|
||||
|
||||
# Web Server and gunicorn
|
||||
|
||||
## Installation
|
||||
|
||||
We'll set up a simple HTTP front end using [gunicorn](http://gunicorn.org/) for the purposes of this guide. For web servers, we provide example configurations for both [nginx](https://www.nginx.com/resources/wiki/) and [Apache](http://httpd.apache.org/docs/2.4). (You are of course free to use whichever combination of HTTP and WSGI services you'd like.) We'll also use [supervisord](http://supervisord.org/) for service persistence.
|
||||
|
||||
```
|
||||
# apt-get install gunicorn supervisor
|
||||
```
|
||||
|
||||
## nginx Configuration
|
||||
|
||||
The following will serve as a minimal nginx configuration. Be sure to modify your server name and installation path appropriately.
|
||||
|
||||
```
|
||||
# apt-get install nginx
|
||||
```
|
||||
|
||||
Once nginx is installed, proceed with the following configuration:
|
||||
|
||||
```
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
server_name netbox.example.com;
|
||||
|
||||
access_log off;
|
||||
|
||||
location /static/ {
|
||||
alias /opt/netbox/netbox/static/;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8001;
|
||||
proxy_set_header X-Forwarded-Host $server_name;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Save this configuration to `/etc/nginx/sites-available/netbox`. Then, delete `/etc/nginx/sites-enabled/default` and create a symlink in the `sites-enabled` directory to the configuration file you just created.
|
||||
|
||||
```
|
||||
# cd /etc/nginx/sites-enabled/
|
||||
# rm default
|
||||
# ln -s /etc/nginx/sites-available/netbox
|
||||
```
|
||||
|
||||
Restart the nginx service to use the new configuration.
|
||||
|
||||
```
|
||||
# service nginx restart
|
||||
* Restarting nginx nginx
|
||||
```
|
||||
## Apache Configuration
|
||||
|
||||
The following configuration should work for Apache. Be sure to modify the `ServerName` appropriately.
|
||||
|
||||
```
|
||||
<VirtualHost *:80>
|
||||
ProxyPreserveHost On
|
||||
|
||||
ServerName netbox.example.com
|
||||
|
||||
Alias /static /opt/netbox/netbox/static
|
||||
|
||||
<Directory /opt/netbox/netbox/static>
|
||||
Options Indexes FollowSymLinks MultiViews
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
<Location /static>
|
||||
ProxyPass !
|
||||
</Location>
|
||||
|
||||
ProxyPass / http://127.0.0.1:8001/
|
||||
ProxyPassReverse / http://127.0.0.1:8001/
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
Save the contents of the above example in `/etc/apache2/sites-available/netbox.conf`, enable the `proxy` and `proxy_http` modules, and reload Apache:
|
||||
|
||||
```
|
||||
# a2enmod proxy
|
||||
# a2enmod proxy_http
|
||||
# a2ensite netbox
|
||||
# service apache2 restart
|
||||
```
|
||||
|
||||
## gunicorn Configuration
|
||||
|
||||
Save the following configuration file in the root netbox installation path (in this example, `/opt/netbox/`.) as `gunicorn_config.py`. Be sure to verify the location of the gunicorn executable (e.g. `which gunicorn`) and to update the `pythonpath` variable if needed.
|
||||
|
||||
```
|
||||
command = '/usr/bin/gunicorn'
|
||||
pythonpath = '/opt/netbox/netbox'
|
||||
bind = '127.0.0.1:8001'
|
||||
workers = 3
|
||||
user = 'www-data'
|
||||
```
|
||||
|
||||
## supervisord Configuration
|
||||
|
||||
Save the following as `/etc/supervisor/conf.d/netbox.conf`. Update the `command` and `directory` paths as needed.
|
||||
|
||||
```
|
||||
[program:netbox]
|
||||
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
|
||||
directory = /opt/netbox/netbox/
|
||||
user = www-data
|
||||
```
|
||||
|
||||
Finally, restart the supervisor service to detect and run the gunicorn service:
|
||||
|
||||
```
|
||||
# service supervisor restart
|
||||
```
|
||||
|
||||
At this point, you should be able to connect to the nginx HTTP service at the server name or IP address you provided. If you are unable to connect, check that the nginx service is running and properly configured. If you receive a 502 (bad gateway) error, this indicates that gunicorn is misconfigured or not running.
|
||||
|
||||
Please keep in mind that the configurations provided here are bare minimums required to get NetBox up and running. You will almost certainly want to make some changes to better suit your production environment.
|
||||
|
||||
## Let's Encrypt SSL + nginx
|
||||
|
||||
To add SSL support to the installation we'll start by installing the arbitrary precision calculator language.
|
||||
|
||||
```
|
||||
# sudo apt-get -y bc
|
||||
```
|
||||
|
||||
Next we'll clone Let’s Encrypt in to /opt
|
||||
|
||||
```
|
||||
# sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
|
||||
```
|
||||
|
||||
To ensure Let's Encrypt can publicly access the directory it needs for certificate validation you'll need to edit `/etc/nginx/sites-available/netbox` and add:
|
||||
|
||||
```
|
||||
location /.well-known/ {
|
||||
alias /opt/netbox/netbox/.well-known/;
|
||||
allow all;
|
||||
}
|
||||
```
|
||||
|
||||
Then restart nginix:
|
||||
|
||||
```
|
||||
# sudo services nginx restart
|
||||
```
|
||||
|
||||
To create the certificate use the following commands ensuring to change `netbox.example.com` to the domain name of the server:
|
||||
|
||||
```
|
||||
# cd /opt/letsencrypt
|
||||
# ./letsencrypt-auto certonly -a webroot --webroot-path=/opt/netbox/netbox/ -d netbox.example.com
|
||||
```
|
||||
|
||||
If you wish to add support for the `www` prefix you'd use:
|
||||
|
||||
```
|
||||
# cd /opt/letsencrypt
|
||||
# ./letsencrypt-auto certonly -a webroot --webroot-path=/opt/netbox/netbox/ -d netbox.example.com -d www.netbox.example.com
|
||||
```
|
||||
|
||||
Make sure you have DNS records setup for the hostnames you use and that they resolve back the netbox server.
|
||||
|
||||
You will be prompted for your email address to receive notifications about your SSL and then asked to accept the subscriber agreement.
|
||||
|
||||
If successful you'll now have four files in `/etc/letsencrypt/live/netbox.example.com` (remember, your hostname is different)
|
||||
|
||||
```
|
||||
cert.pem
|
||||
chain.pem
|
||||
fullchain.pem
|
||||
privkey.pem
|
||||
```
|
||||
|
||||
Now edit your nginx configuration `/etc/nginx/sites-available/netbox` and at the top edit to the following:
|
||||
|
||||
```
|
||||
#listen 80;
|
||||
#listen [::]80;
|
||||
listen 443;
|
||||
listen [::]443;
|
||||
|
||||
ssl on;
|
||||
ssl_certificate /etc/letsencrypt/live/netbox.example.com/cert.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/netbox.example.com/privkey.pem;
|
||||
```
|
||||
|
||||
If you are not using IPv6 then you do not need `listen [::]443;` The two commented lines are for non-SSL for both IPv4 and IPv6.
|
||||
|
||||
Lastly, restart nginx:
|
||||
|
||||
```
|
||||
# sudo services nginx restart
|
||||
```
|
||||
|
||||
You should now have netbox running on a SSL protected connection.
|
||||
|
||||
# Upgrading
|
||||
|
||||
As with the initial installation, you can upgrade NetBox by either downloading the latest release package or by cloning the `master` branch of the git repository. Once the new code is in place, run the upgrade script (which may need to be run as root depending on how your environment is configured).
|
||||
|
||||
```
|
||||
# ./upgrade.sh
|
||||
```
|
||||
|
||||
This script:
|
||||
|
||||
* Installs or upgrades any new required Python packages
|
||||
* Applies any database migrations that were included in the release
|
||||
* Collects all static files to be served by the HTTP service
|
||||
|
||||
Finally, restart the WSGI service to run the new code. If you followed this guide for the initial installation, this is done using `supervisorctl`:
|
||||
|
||||
```
|
||||
# sudo supervisorctl restart netbox
|
||||
```
|
||||
180
docs/getting-started/planning.md
Normal file
180
docs/getting-started/planning.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# Planning Your Move
|
||||
|
||||
This guide outlines the steps necessary for planning a successful migration to NetBox. Although it is written under the context of a completely new installation, the general approach outlined here works just as well for adding new data to existing NetBox deployments.
|
||||
|
||||
## Identify Current Sources of Truth
|
||||
|
||||
Before beginning to use NetBox for your own data, it's crucial to first understand where your existing sources of truth reside. A "source of truth" is really just any repository of data that is authoritative for a given domain. For example, you may have a spreadsheet which tracks all IP prefixes in use on your network. So long as everyone involved agrees that this spreadsheet is _authoritative_ for the entire network, it is your source of truth for IP prefixes.
|
||||
|
||||
Anything can be a source of truth, provided it meets two conditions:
|
||||
|
||||
1. It is agreed upon by all relevant parties that this source of data is correct.
|
||||
2. The domain to which it applies is well-defined.
|
||||
|
||||
<!-- TODO: Example SoT -->
|
||||
|
||||
Dedicate some time to take stock of your own sources of truth for your infrastructure. Upon attempting to catalog these, you're very likely to encounter some challenges, such as:
|
||||
|
||||
* **Multiple conflicting sources** for a given domain. For example, there may be multiple versions of a spreadsheet circulating, each of which asserts a conflicting set of data.
|
||||
* **Sources with no domain defined.** You may encounter that different teams within your organization use different tools for the same purpose, with no normal definition of when either should be used.
|
||||
* **Inaccessible data formatting.** Some tools are better suited for programmatic usage than others. For example, spreadsheets are generally very easy to parse and export, however free-form notes on wiki or similar application are much more difficult to consume.
|
||||
* **There is no source of truth.** Sometimes you'll find that a source of truth simply doesn't exist for a domain. For example, when assigning IP addresses, operators may be just using any (presumed) available IP from a subnet without ever recording its usage.
|
||||
|
||||
See if you can identify each domain of infrastructure data for your organization, and the source of truth for each. Once you have these compiled, you'll need to determine what belongs in NetBox.
|
||||
|
||||
## Determine What to Move
|
||||
|
||||
The general rule when determining what data to put into NetBox is this: If there's a model for it, it belongs in NetBox. For instance, NetBox has purpose-built models for racks, devices, cables, IP prefixes, VLANs, and so on. These are very straightforward to use. However, you'll inevitably reach the limits of NetBox's data model and question what additional data might make sense to record in NetBox. For example, you might wonder whether NetBox should function as the source of truth for infrastructure DNS records or DHCP scopes.
|
||||
|
||||
NetBox provides two core mechanisms for extending its data model. The first is custom fields: Most models in NetBox support the addition of custom fields to hold additional data for which a built-in field does not exist. For example, you might wish to add an "inventory ID" field to the device model. The second mechanism is plugins. Users can create their own plugins to introduce entirely new models, views, and API endpoints in NetBox. This can be incredibly powerful, as it enables rapid development and tight integration with core models.
|
||||
|
||||
That said, it doesn't always make sense to migrate a domain of data to NetBox. For example, many organizations opt to use only the IPAM components or only the DCIM components of NetBox, and integrate with other sources of truth for different domains. This is an entirely valid approach (so long as everyone involved agrees which tool is authoritative for each domain). Ultimately, you'll need to weigh the value of having non-native data models in NetBox against the effort required to define and maintain those models.
|
||||
|
||||
Consider also that NetBox is under constant development. Although the current release might not support a particular type of object, there may be plans to add support for it in a future release. (And if there aren't, consider submitting a feature request citing your use case.)
|
||||
|
||||
## Validate Existing Data
|
||||
|
||||
The last step before migrating data to NetBox is the most crucial: **validation**. The GIGO (garbage in, garbage out) principle is in full effect: Your source of truth is only as good as the data it holds. While NetBox has very powerful data validation tools (including support for custom validation rules), ultimately the onus falls to a human operator to assert what is correct and what is not. For example, NetBox can validate the connection of a cable between two interfaces, but it cannot say whether the cable _should_ be there.
|
||||
|
||||
Here are some tips to help ensure you're only importing valid data into NetBox:
|
||||
|
||||
* Ensure you're starting with complete, well-formatted data. JSON or CSV is highly recommended for the best portability.
|
||||
* Consider defining custom validation rules in NetBox prior to import. (For example, to enforce device naming schemes.)
|
||||
* Use custom scripts to automatically populate patterned data. (For example, to automatically create a set of standard VLANs for each site.)
|
||||
|
||||
There are several methods available to import data into NetBox, which we'll cover in the next section.
|
||||
|
||||
## Order of Operations
|
||||
|
||||
When starting with a completely empty database, it might not be immediately clear where to begin. Many models in NetBox rely on the advance creation of other types. For example, you cannot create a device type until after you have created its manufacturer.
|
||||
|
||||
Below is the (rough) recommended order in which NetBox objects should be created or imported. While it is not required to follow this exact order, doing so will help ensure the smoothest workflow.
|
||||
|
||||
1. Tenant groups and tenants
|
||||
2. Regions, site groups, sites, and locations
|
||||
3. Rack roles and racks
|
||||
4. Manufacturers, device types, and module types
|
||||
5. Platforms and device roles
|
||||
6. Devices and modules
|
||||
7. Providers, provider accounts, and provider networks
|
||||
8. Circuit types and circuits
|
||||
9. Wireless LAN groups and wireless LANs
|
||||
10. Route targets and VRFs
|
||||
11. RIRs and aggregates
|
||||
12. IP/VLAN roles
|
||||
13. Prefixes, IP ranges, and IP addresses
|
||||
14. VLAN groups and VLANs
|
||||
15. Cluster types, cluster groups, and clusters
|
||||
16. Virtual machines and VM interfaces
|
||||
|
||||
This is not a comprehensive list, but should suffice for the initial data imports. Beyond these, it the order in which objects are added doesn't have much if any impact.
|
||||
|
||||
The graphs below illustrate some of the core dependencies among different models in NetBox for your reference.
|
||||
|
||||
!!! note "Self-Nesting Models"
|
||||
Each model in the graphs below which show a looping arrow pointing back to itself can be nested in a recursive hierarchy. For example, you can have regions representing both countries and cities, with the latter nested underneath the former.
|
||||
|
||||
### Tenancy
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
TenantGroup --> TenantGroup & Tenant
|
||||
Tenant --> Site & Device & Prefix & VLAN & ...
|
||||
|
||||
click Device "../../models/dcim/device/"
|
||||
click Prefix "../../models/ipam/prefix/"
|
||||
click Site "../../models/dcim/site/"
|
||||
click Tenant "../../models/tenancy/tenant/"
|
||||
click TenantGroup "../../models/tenancy/tenantgroup/"
|
||||
click VLAN "../../models/ipam/vlan/"
|
||||
```
|
||||
|
||||
### Sites, Racks, and Devices
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Region --> Region
|
||||
SiteGroup --> SiteGroup
|
||||
DeviceRole & Platform --> Device
|
||||
Region & SiteGroup --> Site
|
||||
Site --> Location & Device
|
||||
Location --> Location
|
||||
Location --> Rack & Device
|
||||
Rack --> Device
|
||||
Manufacturer --> DeviceType & ModuleType
|
||||
DeviceType --> Device
|
||||
Device & ModuleType ---> Module
|
||||
Device & Module --> Interface
|
||||
|
||||
click Device "../../models/dcim/device/"
|
||||
click DeviceRole "../../models/dcim/devicerole/"
|
||||
click DeviceType "../../models/dcim/devicetype/"
|
||||
click Interface "../../models/dcim/interface/"
|
||||
click Location "../../models/dcim/location/"
|
||||
click Manufacturer "../../models/dcim/manufacturer/"
|
||||
click Module "../../models/dcim/module/"
|
||||
click ModuleType "../../models/dcim/moduletype/"
|
||||
click Platform "../../models/dcim/platform/"
|
||||
click Rack "../../models/dcim/rack/"
|
||||
click RackRole "../../models/dcim/rackrole/"
|
||||
click Region "../../models/dcim/region/"
|
||||
click Site "../../models/dcim/site/"
|
||||
click SiteGroup "../../models/dcim/sitegroup/"
|
||||
```
|
||||
|
||||
### VRFs, Prefixes, IP Addresses, and VLANs
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
VLANGroup --> VLAN
|
||||
Role --> VLAN & IPRange & Prefix
|
||||
RIR --> Aggregate
|
||||
RouteTarget --> VRF
|
||||
Aggregate & VRF --> Prefix
|
||||
VRF --> IPRange & IPAddress
|
||||
Prefix --> VLAN & IPRange & IPAddress
|
||||
|
||||
click Aggregate "../../models/ipam/aggregate/"
|
||||
click IPAddress "../../models/ipam/ipaddress/"
|
||||
click IPRange "../../models/ipam/iprange/"
|
||||
click Prefix "../../models/ipam/prefix/"
|
||||
click RIR "../../models/ipam/rir/"
|
||||
click Role "../../models/ipam/role/"
|
||||
click VLAN "../../models/ipam/vlan/"
|
||||
click VLANGroup "../../models/ipam/vlangroup/"
|
||||
click VRF "../../models/ipam/vrf/"
|
||||
```
|
||||
|
||||
### Circuits
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Provider & CircuitType --> Circuit
|
||||
Provider --> ProviderNetwork
|
||||
Circuit --> CircuitTermination
|
||||
|
||||
click Circuit "../../models/circuits/circuit/"
|
||||
click CircuitTermination "../../models/circuits/circuittermination/"
|
||||
click CircuitType "../../models/circuits/circuittype/"
|
||||
click Provider "../../models/circuits/provider/"
|
||||
click ProviderNetwork "../../models/circuits/providernetwork/"
|
||||
```
|
||||
|
||||
### Clusters and Virtual Machines
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
ClusterGroup & ClusterType --> Cluster
|
||||
Cluster --> VirtualMachine
|
||||
Site --> Cluster & VirtualMachine
|
||||
Device & Platform --> VirtualMachine
|
||||
VirtualMachine --> VMInterface
|
||||
|
||||
click Cluster "../../models/virtualization/cluster/"
|
||||
click ClusterGroup "../../models/virtualization/clustergroup/"
|
||||
click ClusterType "../../models/virtualization/clustertype/"
|
||||
click Device "../../models/dcim/device/"
|
||||
click Platform "../../models/dcim/platform/"
|
||||
click VirtualMachine "../../models/virtualization/virtualmachine/"
|
||||
click VMInterface "../../models/virtualization/vminterface/"
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user