Codebase list python-faraday / e443f96
Update upstream source from tag 'upstream/3.5.0' Update to upstream version '3.5.0' with Debian dir 3480b1b10c9c0a1d55d723614a55444475ce24e6 Sophie Brun 5 years ago
112 changed file(s) with 5360 addition(s) and 5036 deletion(s). Raw diff Collapse all Expand all
0 December 6th, 2018
00 * In GTK, check active_workspace its not null
1
21 * Add fbruteforce services fplugin
3
4
52 * Attachments can be added to a vulnerability through the API.
6
73 * Catch gaierror error on lynis plugin
8
94 * Add OR and NOT with parenthesis support on status report search
10
115 * Info API now is public
126 * Web UI now detects Appscan plugin
13
147 * Improve performance on the workspace using cusotm query
15
168 * Workspaces can be set as active/disable in welcome page.
179 * Change Nmap plugin, response field in VulnWeb now goes to Data field.
18
1910 * Update code to support latest SQLAlchemy version
20
2111 * Fix `create_vuln` fplugin bug that incorrectly reported duplicated vulns
22
12 * Attachments on a vulnerability can be deleted through the API.
13 * Improvement in the coverage of the tests.
0 Jan 16th, 2019
0 * Redesgin of new/edit vulnerability forms
1 * Add new custom fields feature to vulnerabilities
2 * Add ./manage.py migrate to perform alembic migrations
3 * Faraday will use webargs==4.4.1 because webargs==5.0.0 fails with Python2
4 * New system for online plugins using Threads, a few fixes for metasploit plugin online also.
5 * Fix Command "python manage.py process-reports" now stops once all reports have been processed
6 * Fix bug in query when it checks if a vulnerability or a workspace exists
7 * Fix Once a workspace is created through the web UI, a folder with its name is created inside ~/.faraday/report/
8 * The manage.py now has a new support funtionality that creates a .zip file with all the information faraday's support team will need to throubleshoot your issue
9 * Status-check checks PostgreSQL encoding
10 * Fix a bug when fail importation of reports, command duration say "In Progress" forever.
11 * Fix confirmed bug in vulns API
12 * Update websockets code to use latest lib version
13 * bootstrap updated to v3.4.0
14 * Manage.py support now throws a message once it finishes the process.
15 * Update Lynis to its version 2.7.1
16 * Updated arp-scan plugin, added support in the Host class for mac address which was deprecated before v3.0
17 * OpenVAS Plugin now supports OpenVAS v-9.0.3
(New empty file)
11 ===========
22
33 Please be kind to remove all your pyc files before running faraday if you are updating this piece of software.
4 Make sure you run ```./faraday.py --update``` the first time after an update!
4 Make sure you run ```./manage.py migrate``` the first time after an update!
55
66
77 New features in the latest update
88 =====================================
99
1010
11 3.4:
11 3.5 [Jan 16th, 2019]:
12 ---
13 * Redesgin of new/edit vulnerability forms
14 * Add new custom fields feature to vulnerabilities
15 * Add ./manage.py migrate to perform alembic migrations
16 * Faraday will use webargs==4.4.1 because webargs==5.0.0 fails with Python2
17 * New system for online plugins using Threads, a few fixes for metasploit plugin online also.
18 * Fix Command "python manage.py process-reports" now stops once all reports have been processed
19 * Fix bug in query when it checks if a vulnerability or a workspace exists
20 * Fix Once a workspace is created through the web UI, a folder with its name is created inside ~/.faraday/report/
21 * The manage.py now has a new support funtionality that creates a .zip file with all the information faraday's support team will need to throubleshoot your issue
22 * Status-check checks PostgreSQL encoding
23 * Fix a bug when fail importation of reports, command duration say "In Progress" forever.
24 * Fix confirmed bug in vulns API
25 * Update websockets code to use latest lib version
26 * bootstrap updated to v3.4.0
27 * Manage.py support now throws a message once it finishes the process.
28 * Update Lynis to its version 2.7.1
29 * Updated arp-scan plugin, added support in the Host class for mac address which was deprecated before v3.0
30 * OpenVAS Plugin now supports OpenVAS v-9.0.3
31
32 3.4 [December 6th, 2018]:
1233 ---
1334 * In GTK, check active_workspace its not null
14
1535 * Add fbruteforce services fplugin
16
17
1836 * Attachments can be added to a vulnerability through the API.
19
2037 * Catch gaierror error on lynis plugin
21
2238 * Add OR and NOT with parenthesis support on status report search
23
2439 * Info API now is public
2540 * Web UI now detects Appscan plugin
26
2741 * Improve performance on the workspace using cusotm query
28
2942 * Workspaces can be set as active/disable in welcome page.
3043 * Change Nmap plugin, response field in VulnWeb now goes to Data field.
31
3244 * Update code to support latest SQLAlchemy version
33
3445 * Fix `create_vuln` fplugin bug that incorrectly reported duplicated vulns
35
46 * Attachments on a vulnerability can be deleted through the API.
47 * Improvement in the coverage of the tests.
3648
3749 3.3 [Novemeber 14th, 2018]:
3850 ---
11 ===========
22
33 Please be kind to remove all your pyc files before running faraday if you are updating this piece of software.
4 Make sure you run ```./faraday.py --update``` the first time after an update!
4 Make sure you run ```./manage.py migrate``` the first time after an update!
55
66
77 New features in the latest update
1818 stage ("Install Application Dependencies") {
1919 sh """
2020 source ${ENV_PATH}/bin/activate
21 pip install virtualenv responses
21 pip install virtualenv responses pytest-xdist
2222 pip install -U -r $WORKSPACE/requirements.txt
2323 pip install -U -r $WORKSPACE/requirements_server.txt
2424 pip install -U -r $WORKSPACE/requirements_extras.txt
6969 withCredentials([string(credentialsId: 'postgresql_connection_string', variable: 'CONN_STRING')]) {
7070 sh """
7171 source ${ENV_PATH}/bin/activate
72 cd $WORKSPACE && pytest -v --junitxml=$WORKSPACE/xunit-postgres.xml --connection-string "$CONN_STRING" || :
72 cd $WORKSPACE && pytest -v --junitxml=$WORKSPACE/xunit-postgres.xml --connection-string "$CONN_STRING" -n 15 || :
7373 deactivate
7474 """
7575 step([$class: 'CoberturaPublisher', autoUpdateHealth: false, autoUpdateStability: false, coberturaReportFile: '**/coverage.xml', failNoReports: false, failUnhealthy: false, failUnstable: false, maxNumberOfBuilds: 0, onlyStable: false, sourceEncoding: 'ASCII', zoomCoverageChart: false])
9696
9797 ## Presentations
9898
99 * Ekoparty Security Conference - 2017:
100 * http://blog.infobytesec.com/2017/10/ekoparty-2017-review_23.html
99 * Ekoparty ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/argentina.png):
100 [2010](http://vimeo.com/16516987) -
101 [2014](https://www.youtube.com/watch?v=_j0T2S6Ppfo) -
102 [2017](http://blog.infobytesec.com/2017/10/ekoparty-2017-review_23.html) -
103 [2018](http://blog.infobytesec.com/2018/10/ekoparty-2018-review_18.html)
101104
102 * Black Hat Arsenal Asia - 2017:
103 * https://www.blackhat.com/asia-17/arsenal.html#faraday
105 * Black Hat:
106 * USA ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/usa.png):
107 [2011](http://www.infobytesec.com/down/Faraday_BH2011_Arsenal.pdf) -
108 [2015](https://www.blackhat.com/us-15/arsenal.html#faraday) -
109 [2016](https://www.blackhat.com/us-16/arsenal.html#faraday) -
110 [2017](https://www.blackhat.com/us-17/event-sponsors.html#faraday) -
111 [2018](https://www.blackhat.com/us-18/event-sponsors.html#faraday)
104112
105 * Zero Nights - 2016
106 * https://www.slideshare.net/AlexanderLeonov2/enterprise-vulnerability-management-zeronights16
113 * Asia ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/singapore.png):
114 [2016](https://www.blackhat.com/asia-16/arsenal.html#faraday) -
115 [2017](https://www.blackhat.com/asia-17/arsenal.html#faraday) -
116 [2018](https://www.blackhat.com/asia-18/arsenal.html#faraday-v3-collaborative-penetration-test-and-vulnerability-management-platform)
107117
108 * AV Tokio - 2016:
109 * http://en.avtokyo.org/avtokyo2016/event
118 * Europe ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/europe.png):
119 [2015](https://www.blackhat.com/eu-15/arsenal.html#faraday) -
120 [2016](https://www.blackhat.com/eu-16/arsenal.html#faraday)
110121
111 * Black Hat Arsenal USA - 2016:
122 * RSA USA ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/usa.png):
123 [2015](https://www.rsaconference.com/events/us15/expo-sponsors/exhibitor-list/1782/infobyte-llc)
112124
113 * https://www.blackhat.com/us-16/arsenal.html#faraday
125 * HITBSecConf Dubai ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/uae.png):
126 [2018](https://conference.hitb.org/hitbsecconf2018dxb/hitb-armory/)
114127
115 * Black Hat Arsenal Europe - 2016
116 * https://www.blackhat.com/eu-16/arsenal.html#faraday
128 * SecurityWeekly ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/usa.png):
129 [2016](http://securityweekly.com/2016/08/02/security-weekly-475-federico-kirschbaum/)
117130
118 * SecurityWeekly - 2016:
119 * http://securityweekly.com/2016/08/02/security-weekly-475-federico-kirschbaum/
131 * Zero Nights ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/russia.png):
132 [2016](https://www.slideshare.net/AlexanderLeonov2/enterprise-vulnerability-management-zeronights16)
120133
121 * Bsides Latam - 2016:
122 * http://www.infobytesec.com/down/Faraday_BsideLatam_2016.pdf
134 * AVTokyo ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/japan.png):
135 [2016](http://en.avtokyo.org/avtokyo2016/event) -
136 [2018](http://en.avtokyo.org/avtokyo2018/event)
123137
124 * Black Hat Arsenal Asia - 2016:
125 * https://www.blackhat.com/asia-16/arsenal.html#faraday
138 * Tel Aviv-Yafo ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/israel.png):
139 [2018](https://www.meetup.com/infobyte/events/254031671/)
126140
127 * Black Hat Arsenal Europe - 2015:
128 * https://www.blackhat.com/eu-15/arsenal.html#faraday
141 * SECCON ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/japan.png):
142 [2018](https://2018.seccon.jp/seccon/yorozu2018.html)
129143
130 * Black Hat Arsenal USA - 2015:
131 * https://www.blackhat.com/us-15/arsenal.html#faraday
132 * http://blog.infobytesec.com/2015/08/blackhat-2015_24.html
133144
134 * RSA - 2015:
135 * http://www.rsaconference.com/events/us15/expo-sponsors/exhibitor-list/1782/infobyte-llc
136 * http://blog.infobytesec.com/2015/05/infobyte-en-la-rsa-2015.html
145 * PyConAr ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/argentina.png):
146 [2018](https://eventos.python.org.ar/events/pyconar2018/activity/75/)
137147
138 * Ekoparty Security Conference - 2014:
139 * https://www.youtube.com/watch?v=_j0T2S6Ppfo
148 * 8.8 Chile ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/chile.png):
149 [2018](http://blog.infobytesec.com/2018/11/chronicles-of-trip-to-santiago-88-review.html)
140150
141 * Black Hat Arsenal - 2011
142 * http://www.infobytesec.com/down/Faraday_BH2011_Arsenal.pdf
151 * CharruaCon ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/uruguay.png):
152 [2018](https://charrua.org/presentaciones2018/Love_is_in_the_air__Reverse_Engineering_a_hitty_drone.pdf)
143153
144 * Ekoparty Security Conference - 2010:
145 * http://prezi.com/fw46zt6_zgi8/faraday/
146 * http://vimeo.com/16516987
154 * NotPinkCon ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/argentina.png):
155 [2018](https://twitter.com/NotPinkCon)
156
157 * plusCODE ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/argentina.png):
158 [2018](http://pluscode.cc/portfolio_page/introduccion-practica-al-hardware-hacking/)
159
160 * BSides LATAM ![](https://raw.github.com/wiki/infobyte/faraday/images/flags/brazil.png):
161 [2016](http://www.infobytesec.com/down/Faraday_BsideLatam_2016.pdf)
11 ===========
22
33 Please be kind to remove all your pyc files before running faraday if you are updating this piece of software.
4 Make sure you run ```./faraday.py --update``` the first time after an update!
4 Make sure you run ```./manage.py migrate``` the first time after an update!
55
66
77 New features in the latest update
88 =====================================
99
1010
11 3.4:
11 3.5 [Jan 16th, 2019]:
12 ---
13 * Redesgin of new/edit vulnerability forms
14 * Add new custom fields feature to vulnerabilities
15 * Add ./manage.py migrate to perform alembic migrations
16 * Faraday will use webargs==4.4.1 because webargs==5.0.0 fails with Python2
17 * New system for online plugins using Threads, a few fixes for metasploit plugin online also.
18 * Fix Command "python manage.py process-reports" now stops once all reports have been processed
19 * Fix bug in query when it checks if a vulnerability or a workspace exists
20 * Fix Once a workspace is created through the web UI, a folder with its name is created inside ~/.faraday/report/
21 * The manage.py now has a new support funtionality that creates a .zip file with all the information faraday's support team will need to throubleshoot your issue
22 * Status-check checks PostgreSQL encoding
23 * Fix a bug when fail importation of reports, command duration say "In Progress" forever.
24 * Fix confirmed bug in vulns API
25 * Update websockets code to use latest lib version
26 * bootstrap updated to v3.4.0
27 * Manage.py support now throws a message once it finishes the process.
28 * Update Lynis to its version 2.7.1
29 * Updated arp-scan plugin, added support in the Host class for mac address which was deprecated before v3.0
30 * OpenVAS Plugin now supports OpenVAS v-9.0.3
31
32 3.4 [December 6th, 2018]:
1233 ---
1334 * In GTK, check active_workspace its not null
14
1535 * Add fbruteforce services fplugin
16
17
1836 * Attachments can be added to a vulnerability through the API.
19
2037 * Catch gaierror error on lynis plugin
21
2238 * Add OR and NOT with parenthesis support on status report search
23
2439 * Info API now is public
2540 * Web UI now detects Appscan plugin
26
2741 * Improve performance on the workspace using cusotm query
28
2942 * Workspaces can be set as active/disable in welcome page.
3043 * Change Nmap plugin, response field in VulnWeb now goes to Data field.
31
3244 * Update code to support latest SQLAlchemy version
33
3445 * Fix `create_vuln` fplugin bug that incorrectly reported duplicated vulns
35
46 * Attachments on a vulnerability can be deleted through the API.
47 * Improvement in the coverage of the tests.
3648
3749 3.3 [Novemeber 14th, 2018]:
3850 ---
0 3.4
0 3.5.0
5151 ioloop_instance = IOLoop.current()
5252 _http_server = HTTPServer(WSGIContainer(app))
5353 hostnames = [hostname]
54
54
5555 #Fixed hostname bug
5656 if hostname == "localhost":
57
5857 hostnames.append("127.0.0.1")
59 print hostname
60
58
6159 listening = False
6260 for hostname in hostnames:
6361 try:
5353 models.create_credential(workspace, obj)
5454 old = models.get_credential(workspace, **params)
5555 else:
56 print "A credential with ID %s already exists!" % old.getID()
56 print("A credential with ID %s already exists!" % old.getID())
5757 return 2, None
5858
5959 return 0, old.getID()
4949 else:
5050 return 0, None
5151 else:
52 print "A host with ID %s already exists!" % old_host.getID()
52 print("A host with ID %s already exists!" % old_host.getID())
5353 return 2, None
5454
5555 return 0, old_host.getID()
5353 models.create_service(workspace, obj)
5454 old = models.get_service(workspace, **params)
5555 else:
56 print "A service with ID %s already exists!" % old.getID()
56 print("A service with ID %s already exists!" % old.getID())
5757
5858 res_ids.append(old.getID())
5959
6161 try:
6262 old_id = ex.answer.json()['object']['_id']
6363 except KeyError:
64 print "Vulnerability already exists. Couldn't fetch ID"
64 print("Vulnerability already exists. Couldn't fetch ID")
6565 return 2, None
6666 else:
67 print "A vulnerability with ID %s already exists!" % old_id
67 print("A vulnerability with ID %s already exists!" % old_id)
6868 return 2, None
6969 else:
70 print "Unknown error while creating the vulnerability"
70 print("Unknown error while creating the vulnerability")
7171 return 2, None
7272 except CantCommunicateWithServerError as ex:
73 print "Error while creating vulnerability:", ex.response.text
73 print("Error while creating vulnerability:", ex.response.text)
7474 return 2, None
7575
7676 new = models.get_vulns(
8181 models.create_vuln_web(workspace, obj)
8282 old = models.get_web_vuln(workspace, **params)
8383 else:
84 print "A web vulnerability with ID %s already exists!" % old.getID()
84 print("A web vulnerability with ID %s already exists!" % old.getID())
8585 return 2, None
8686
8787 return 0, old.getID()
140140
141141 # Muestro los servicios en el workspace soportados por hydra, en formato tabla
142142 table_services, services = show_table_services(workspace)
143 print table_services
143 print(table_services)
144144
145145 service = int(input_index("What service do you want to bruteforce?", len(services)))
146146
147147 # Verifico si el usuario quiere armar un diccionario con las credenciales
148148 # guardadas en faraday o si quiere utilizar uno propio
149 print "\n[0] Choose a dictionary"
150 print "[1] Create dictionary from Faraday (based in credentials stored in Faraday)\n"
149 print("\n[0] Choose a dictionary")
150 print("[1] Create dictionary from Faraday (based in credentials stored in Faraday)\n")
151151
152152 dictionary = int(input_index("Options ", 2))
153153
159159
160160 else:
161161
162 print "\n[*] Obtaining credentials from the workspace %s" % workspace
162 print("\n[*] Obtaining credentials from the workspace %s" % workspace)
163163
164164 user_faraday = save_targets(get_credentials(workspace, "username"))
165165 passwd_faraday = save_targets(get_credentials(workspace, "password"))
166166
167 print "[*] Credentials found: %s" % total_credentials(workspace)
168 print "\nUsername\t\tPassword"
169 print "--------\t\t--------"
167 print("[*] Credentials found: %s" % total_credentials(workspace))
168 print("\nUsername\t\tPassword")
169 print("--------\t\t--------")
170170
171171 for user, passw in zip(
172172 open(user_faraday, "r"), open(passwd_faraday, "r")):
173173
174 print "%s\t\t%s" % (user.strip(), passw.strip())
174 print("%s\t\t%s" % (user.strip(), passw.strip()))
175175
176176
177177 return service, services, user_define_dictionary, user_faraday, passwd_faraday, usernames_dic_path, passwords_dic_path
190190
191191 def main(workspace='', args=None, parser=None):
192192
193 print "\nThis script needs to be run inside from Faraday GTK.\n"
193 print("\nThis script needs to be run inside from Faraday GTK.\n")
194194 if check_hydra():
195195
196196 service, services, user_define_dictionary, user_faraday, passwd_faraday, usernames_dic_path, passwords_dic_path = show_options(workspace)
201201
202202 hydra_output = "/tmp/hydra_output-%s.txt" % time.time()
203203
204 print "Running Hydra, please wait to finish the bruteforce...\n"
204 print("Running Hydra, please wait to finish the bruteforce...\n")
205205
206206 if user_define_dictionary:
207207
226226 add_output(hydra_command2)
227227 call(shlex.split(hydra_command2))
228228
229 print "Processing information found in Faraday...\n"
229 print("Processing information found in Faraday...\n")
230230 send_output(hydra_output)
231231
232232 return None, None
6666 Fore.RESET)
6767
6868 if not port_list and not parsed_args.no_filter:
69 print "Empty filter set."
69 print("Empty filter set.")
7070 return 1, None
7171
7272 if parsed_args.additional_info and not parsed_args.no_filter:
73 print 'Filtering services for ports: ' + ', '.join(map(str, sorted(port_list)))
73 print('Filtering services for ports: ' + ', '.join(map(str, sorted(port_list))))
7474
7575 columns = filter(None, parsed_args.columns.split(','))
7676
9696 lines += [column_data]
9797
9898 if not lines:
99 print "No services running on that port found."
99 print("No services running on that port found.")
100100 return 0, None
101101
102102 col_width = max(len(word) for row in lines for word in row) + 2
103103
104104 if parsed_args.additional_info:
105 print ''.join(col.ljust(col_width) for col in columns)
106 print '-' * (col_width * len(columns))
105 print(''.join(col.ljust(col_width) for col in columns))
106 print('-' * (col_width * len(columns)))
107107
108108 if parsed_args.sorted:
109109 # Compare lines using the first column (IP)
110110 for row in sorted(lines, cmp=lambda l1, l2: cmp(l1[0], l2[0])):
111 print "".join(word.ljust(col_width) for word in row)
111 print("".join(word.ljust(col_width) for word in row))
112112 else:
113113 for row in lines:
114 print "".join(word.ljust(col_width) for word in row)
114 print("".join(word.ljust(col_width) for word in row))
115115
116116 return 0, None
120120 ret, obj_id = call_main(workspace=args.workspace, args=unknown, parser=new_parser)
121121
122122 if obj_id is not None:
123 print obj_id
123 print(obj_id)
124124 else:
125125 # Use old API to call plugin
126126 sys.stderr.write(Fore.YELLOW +
132132 ret = 0
133133
134134 if args.interactive:
135 # print 'code = %d' % ret
135 # print ('code = %d' % ret)
136136 return obj_id
137137 else:
138138 sys.exit(ret)
191191 dispatch(args, unknown, parser.format_help(), args.username, args.password)
192192 else:
193193
194 # print "Loading command history..."
194 # print ("Loading command history...")
195195 histfile = os.path.join(CONF.getDataPath(), ".faraday_hist")
196196 readline.parse_and_bind('tab: complete')
197197 atexit.register(readline.write_history_file, histfile)
203203 except IOError:
204204 pass
205205
206 print "Welcome to interactive Faraday!"
207 print "Press CTRL-D or run 'exit' to quit interactive mode."
206 print("Welcome to interactive Faraday!")
207 print("Press CTRL-D or run 'exit' to quit interactive mode.")
208208 last_id = None
209209
210210 while True:
+0
-123
bin/getSeverityByCwe.py less more
0 #!/usr/bin/env python2.7
1 # -*- coding: utf-8 -*-
2 '''
3 Faraday Penetration Test IDE
4 Copyright (C) 2016 Infobyte LLC (http://www.infobytesec.com/)
5 See the file 'doc/LICENSE' for the license information
6 '''
7 import json
8
9 import requests
10
11 from persistence.server import models
12
13 __description__ = 'Get Vulns filtered by Severity and change Severity based in CWE'
14 __prettyname__ = 'Get Severity By CWE'
15
16 SEVERITY_OPTIONS = ('unclassified', 'info', 'low', 'med', 'high', 'critical', 'all')
17
18
19 def getCweData(couch_url):
20 # Get elements from cwe DB in couchdb
21 headers = {'Content-Type': 'application/json'}
22
23 payload = {
24 'map':
25 'function(doc) { if(doc.severity && doc.name){'
26 'emit(doc.name, doc.severity); }}'
27 }
28
29 r = requests.post(
30 couch_url + '/cwe/_temp_view',
31 headers=headers,
32 data=json.dumps(payload)
33 )
34
35 response_code = r.status_code
36
37 if response_code == 200:
38
39 data = r.json()['rows']
40 dict = {}
41
42 for item in data:
43
44 value = item['value']
45 if value == 'informational':
46 value = 'info'
47
48 dict.update({item['key']: value})
49
50 if dict == {}:
51 return None
52 else:
53 print 'Get CWE data: OK\n'
54 return dict
55
56 elif response_code == 401:
57 print 'Autorization required, make sure to add user:pwd to Couch URI'
58 else:
59 print 'Error couchDB: ' + str(response_code) + str(r.text)
60
61
62 def checkSeverity(vuln, cwe_dict, severity_choose, workspace, couch_url):
63 severity_dict = {
64 'unclassified': 0,
65 'info': 1,
66 'low': 2,
67 'med': 3,
68 'high': 4,
69 'critical': 5,
70 'all': 100
71 }
72
73 if vuln._name in cwe_dict and severity_dict[vuln.severity] <= severity_dict[severity_choose]:
74
75 print 'Change: ' + vuln._name + ' to ' + cwe_dict[vuln._name]
76
77 # Get object Vuln
78 response = requests.get(
79 models.server.SERVER_URL + '/' + workspace + '/' + str(vuln._id)
80 )
81 vulnWeb = response.json()
82
83 # Change severity
84 vulnWeb['severity'] = cwe_dict[vuln._name]
85
86 # Put changes...
87 headers = {'Content-Type': 'application/json'}
88 update = requests.put(
89 couch_url + '/' + workspace + '/' + vuln._id,
90 headers=headers,
91 data=json.dumps(vulnWeb)
92 )
93
94 if update.status_code == 200 or update.status_code == 201:
95 print 'Change OK\n'
96 else:
97 print 'Error in update Vulnerability, status code: ' + str(update.status_code)
98 print update.text
99
100
101 def main(workspace='', args=None, parser=None):
102 parser.add_argument('severity', nargs='?', help='Filter by Severity (<=)', default="info", choices=SEVERITY_OPTIONS)
103 parser.add_argument('--couchdb', nargs='?', help='CouchDB URL', default="http://faraday:faraday@localhost:5984")
104
105 parsed_args = parser.parse_args(args)
106
107 cwe = getCweData(parsed_args.couchdb)
108
109 if cwe is None:
110 print 'CWE DB not downloaded....EXIT'
111 return 2, None
112
113 for host in models.get_hosts(workspace):
114 for v in host.getVulns():
115 checkSeverity(v, cwe, parsed_args.severity, workspace, parsed_args.couchdb)
116
117 for i in host.getAllInterfaces():
118 for s in i.getAllServices():
119 for v in s.getVulns():
120 checkSeverity(v, cwe, parsed_args.severity, workspace, parsed_args.couchdb)
121
122 return 0, None
0 #!/usr/bin/env python2.7
1 # -*- coding: utf-8 -*-
2 '''
3 Faraday Penetration Test IDE
4 Copyright (C) 2016 Infobyte LLC (http://www.infobytesec.com/)
5 See the file 'doc/LICENSE' for the license information
6 '''
7 import json
8
9 import requests
10
11 from persistence.server import models
12
13 __description__ = 'Get Vulns filtered by Severity and change Severity based in CWE'
14 __prettyname__ = 'Get Severity By CWE'
15
16 SEVERITY_OPTIONS = ('unclassified', 'info', 'low', 'med', 'high', 'critical', 'all')
17
18
19 def getCweData(couch_url):
20 # Get elements from cwe DB in couchdb
21 headers = {'Content-Type': 'application/json'}
22
23 payload = {
24 'map':
25 'function(doc) { if(doc.severity && doc.name){'
26 'emit(doc.name, doc.severity); }}'
27 }
28
29 r = requests.post(
30 couch_url + '/cwe/_temp_view',
31 headers=headers,
32 data=json.dumps(payload)
33 )
34
35 response_code = r.status_code
36
37 if response_code == 200:
38
39 data = r.json()['rows']
40 dict = {}
41
42 for item in data:
43
44 value = item['value']
45 if value == 'informational':
46 value = 'info'
47
48 dict.update({item['key']: value})
49
50 if dict == {}:
51 return None
52 else:
53 print('Get CWE data: OK\n')
54 return dict
55
56 elif response_code == 401:
57 print('Autorization required, make sure to add user:pwd to Couch URI')
58 else:
59 print('Error couchDB: ' + str(response_code) + str(r.text))
60
61
62 def checkSeverity(vuln, cwe_dict, severity_choose, workspace, couch_url):
63 severity_dict = {
64 'unclassified': 0,
65 'info': 1,
66 'low': 2,
67 'med': 3,
68 'high': 4,
69 'critical': 5,
70 'all': 100
71 }
72
73 if vuln._name in cwe_dict and severity_dict[vuln.severity] <= severity_dict[severity_choose]:
74
75 print('Change: ' + vuln._name + ' to ' + cwe_dict[vuln._name])
76
77 # Get object Vuln
78 response = requests.get(
79 models.server.SERVER_URL + '/' + workspace + '/' + str(vuln._id)
80 )
81 vulnWeb = response.json()
82
83 # Change severity
84 vulnWeb['severity'] = cwe_dict[vuln._name]
85
86 # Put changes...
87 headers = {'Content-Type': 'application/json'}
88 update = requests.put(
89 couch_url + '/' + workspace + '/' + vuln._id,
90 headers=headers,
91 data=json.dumps(vulnWeb)
92 )
93
94 if update.status_code == 200 or update.status_code == 201:
95 print('Change OK\n')
96 else:
97 print('Error in update Vulnerability, status code: ' + str(update.status_code))
98 print(update.text)
99
100
101 def main(workspace='', args=None, parser=None):
102 parser.add_argument('severity', nargs='?', help='Filter by Severity (<=)', default="info", choices=SEVERITY_OPTIONS)
103 parser.add_argument('--couchdb', nargs='?', help='CouchDB URL', default="http://faraday:faraday@localhost:5984")
104
105 parsed_args = parser.parse_args(args)
106
107 cwe = getCweData(parsed_args.couchdb)
108
109 if cwe is None:
110 print('CWE DB not downloaded....EXIT')
111 return 2, None
112
113 for host in models.get_hosts(workspace):
114 for v in host.getVulns():
115 checkSeverity(v, cwe, parsed_args.severity, workspace, parsed_args.couchdb)
116
117 for i in host.getAllInterfaces():
118 for s in i.getAllServices():
119 for v in s.getVulns():
120 checkSeverity(v, cwe, parsed_args.severity, workspace, parsed_args.couchdb)
121
122 return 0, None
132132 datetime_object = datetime.strptime(date, "%m/%d/%Y")
133133 host._metadata.create_time = mktime(datetime_object.timetuple())
134134 except Exception:
135 print "Invalid date", host.name
135 print("Invalid date", host.name)
136136
137137 return host
138138
183183 datetime_object = datetime.strptime(date, "%m/%d/%Y")
184184 vulnerability._metadata.create_time = mktime(datetime_object.timetuple())
185185 except Exception:
186 print "Invalid date", vulnerability.name
186 print("Invalid date", vulnerability.name)
187187
188188 return vulnerability
189189
221221 datetime_object = datetime.strptime(date, "%m/%d/%Y")
222222 vulnerability_web._metadata.create_time = mktime(datetime_object.timetuple())
223223 except Exception:
224 print "Invalid date", vulnerability_web.name
224 print("Invalid date", vulnerability_web.name)
225225
226226 return vulnerability_web
227227
234234 parsed_args = parser.parse_args(args)
235235
236236 if not parsed_args.csv:
237 print "Error: Give a CSV file to import with --csv"
237 print("Error: Give a CSV file to import with --csv")
238238 return 2, None
239239
240240 try:
241241 file_csv = open(parsed_args.csv, "r")
242242 except:
243 print "Error: Unreadeable CSV file, check the path"
243 print("Error: Unreadeable CSV file, check the path")
244244 raise
245245
246246 counter = 0
256256
257257 counter += 1
258258
259 print "New host: " + host.getName()
259 print("New host: " + host.getName())
260260 try:
261261 models.create_host(WORKSPACE, host)
262262 except Exception as ex:
275275 if not old_service:
276276
277277 counter += 1
278 print "New service: " + service.getName()
278 print("New service: " + service.getName())
279279 models.create_service(WORKSPACE, service)
280280 service = models.get_service(WORKSPACE, **service_params)
281281
300300
301301 if not models.get_vuln(WORKSPACE, **vuln_params):
302302 counter += 1
303 print "New vulnerability: " + vulnerability.getName()
303 print("New vulnerability: " + vulnerability.getName())
304304 models.create_vuln(WORKSPACE, vulnerability)
305305
306306 elif vulnerability_web is not None:
319319 if not models.get_web_vuln(WORKSPACE, **vuln_web_params):
320320
321321 counter += 1
322 print "New web vulnerability: " + vulnerability_web.getName()
322 print("New web vulnerability: " + vulnerability_web.getName())
323323 models.create_vuln_web(WORKSPACE, vulnerability_web)
324324 except ConflictInDatabase:
325325 print('Conflict in Database, skiping csv row')
326326 except CantCommunicateWithServerError as ex:
327327 print(register)
328328 print('Error', ex)
329 print "[*]", counter, "new Faraday objects created."
329 print("[*]", counter, "new Faraday objects created.")
330330 file_csv.close()
331331 return 0, None
3131 from pcapfile import savefile
3232 import pcapfile
3333 except ImportError:
34 print 'capfile not found, please install it to use this plugin.' \
35 ' You can do it executing pip2 install pcapfile in a shell.'
34 print('capfile not found, please install it to use this plugin.' \
35 ' You can do it executing pip2 install pcapfile in a shell.')
3636 return 1, None
3737
3838 if not os.path.isfile(parsed_args.pcap):
39 print "pcap file not found: " % parsed_args.pcap
39 print("pcap file not found: " % parsed_args.pcap)
4040 return 2, None
4141
4242 testcap = open(parsed_args.pcap, 'rb')
4444 try:
4545 capfile = savefile.load_savefile(testcap, layers=2, verbose=parsed_args.verbose)
4646 except pcapfile.Error:
47 print "Invalid pcap file"
47 print("Invalid pcap file")
4848 return 3, None
4949
50 print 'pcap file loaded. Parsing packets...'
50 print('pcap file loaded. Parsing packets...')
5151
5252 # Set() to store already added hosts. This will save an enormous amount of time by not querying the database
5353 # for hosts we already know are in Faraday
8181 if old is None:
8282 if not parsed_args.dry_run:
8383 models.create_host(workspace, obj)
84 print '%s\t%s' % (src, obj.getID())
84 print('%s\t%s' % (src, obj.getID()))
8585
8686 if dst not in added:
8787
9797 if old is None:
9898 if not parsed_args.dry_run:
9999 models.create_host(workspace, obj)
100 print '%s\t%s' % (dst, obj.getID())
100 print('%s\t%s' % (dst, obj.getID()))
101101
102102 return 0, None
1919 for host in models.get_hosts(workspace):
2020
2121 if not parsed_args.os_filter or (parsed_args.os_filter and host.os in parsed_args.os_filter):
22 print '%s\t%s' % (host.name, host.os)
22 print('%s\t%s' % (host.name, host.os))
2323
2424 return 0, None
2828 host_count[host.os] = 1
2929
3030 else:
31 print host.os
31 print(host.os)
3232
3333 if parsed_args.unique:
3434 for host, count in host_count.items():
35 print '%s\t(%d)' % (host, count)
35 print('%s\t(%d)' % (host, count))
3636
3737 return 0, None
8888 for event, elem in ET.iterparse(f, ('start', )):
8989 root = elem.tag
9090 break
91 except SyntaxError, err:
92 print "Not an xml file.\n %s" % (err)
91 except SyntaxError as err:
92 print("Not an xml file.\n %s" % (err))
9393 return False
9494
95 except IOError, err:
96 print "Error while opening file.\n%s. %s" % (err, self.filepath)
95 except IOError as err:
96 print("Error while opening file.\n%s. %s" % (err, self.filepath))
9797 return False
9898
9999 finally:
108108 f = open(self.filepath)
109109 try:
110110 tree = ET.fromstring(f.read())
111 except SyntaxError, err:
112 print "SyntaxError: %s. %s" % (err, self.filepath)
111 except SyntaxError as err:
112 print("SyntaxError: %s. %s" % (err, self.filepath))
113113 return None
114114 return tree
115115
11 <faraday>
22
33 <appname>Faraday - Penetration Test IDE</appname>
4 <version>3.3</version>
4 <version>3.5.0</version>
55 <debug_status>0</debug_status>
66 <font>-Misc-Fixed-medium-r-normal-*-12-100-100-100-c-70-iso8859-1</font>
77 <home_path>~/</home_path>
+0
-8
default.nix less more
0 with (import <nixpkgs> {});
1 let
2 server_pkgs = callPackage ./nix/server {};
3 in
4 {
5 server = server_pkgs.server;
6 python = server_pkgs.python;
7 }
1919 from utils import dependencies
2020 from utils.user_input import query_yes_no
2121 from faraday import FARADAY_BASE
22 from alembic.script import ScriptDirectory
23 from alembic.config import Config
24 from alembic.migration import MigrationContext
2225 except ImportError as ex:
2326 print(ex)
2427 print('Missing dependencies.\nPlease execute: pip install -r requirements_server.txt')
122125 sys.exit(1)
123126
124127
128 def check_alembic_version():
129 config = Config()
130 config.set_main_option("script_location", "migrations")
131 script = ScriptDirectory.from_config(config)
132
133 head_revision = script.get_current_head()
134 with app.app_context():
135 conn = db.session.connection()
136 context = MigrationContext.configure(conn)
137
138 if head_revision != context.get_current_revision():
139 print('--' * 20)
140 print('Missing migrations, please execute: \n\n')
141 print('python manage.py migrate --upgrade head')
142 sys.exit(1)
143
125144 def main():
145 os.chdir(FARADAY_BASE)
126146 check_postgresql()
127 os.chdir(FARADAY_BASE)
147 check_alembic_version()
128148 parser = argparse.ArgumentParser()
129149 parser.add_argument('--ssl', action='store_true', help='enable HTTPS')
130150 parser.add_argument('--debug', action='store_true', help='run Faraday Server in debug mode')
66 '''
77
88 import re
9 import sys
910
1011 import click
1112 import requests
12 import sys
13 from alembic.config import CommandLine
1314
1415 import server.config
1516 from persistence.server.server import _conf, FARADAY_UP, SERVER_URL
1920 from server.commands.reports import import_external_reports
2021 from server.commands import status_check as status_check_functions
2122 from server.commands import change_password as change_pass
23 from server.commands.custom_fields import add_custom_field_main, delete_custom_field_main
24 from server.commands import support as support_zip
2225 from server.models import db, User
2326 from server.importer import ImportCouchDB
2427
119122 if check_postgresql:
120123 # exit_code was created for Faraday automation-testing purposes
121124 exit_code = status_check_functions.print_postgresql_status()
122 status_check_functions.print_postgresql_locks_status()
125 status_check_functions.print_postgresql_other_status()
123126 selected = True
124127
125128 if check_faraday:
194197 click.echo(click.style(
195198 'Tables created successfully!',
196199 fg='green', bold=True))
200
201 @click.command(help="Generates a .zip file with technical information")
202 def support():
203 support_zip.all_for_support()
204
205
206 @click.command(
207 context_settings={"ignore_unknown_options": True},
208 help='Migrates database schema. If the target revision '
209 'is not specified, use "head" when upgrading and "-1" when '
210 'downgrading')
211 @click.option(
212 '--downgrade',
213 help="Perform a downgrade migration instead of an upgrade one",
214 is_flag=True)
215 @click.argument(
216 'revision',
217 required=False,
218 )
219 def migrate(downgrade, revision):
220 revision = revision or ("-1" if downgrade else "head")
221 action = "downgrade" if downgrade else "upgrade"
222 CommandLine(prog=None).main(argv=[action, revision])
223
224
225 @click.command(help='Custom field wizard')
226 def add_custom_field():
227 add_custom_field_main()
228
229
230 @click.command(help='Custom field delete wizard')
231 def delete_custom_field():
232 delete_custom_field_main()
197233
198234
199235 cli.add_command(process_reports)
206242 cli.add_command(status_check)
207243 cli.add_command(create_tables)
208244 cli.add_command(change_password)
209
245 cli.add_command(migrate)
246 cli.add_command(add_custom_field)
247 cli.add_command(delete_custom_field)
248 cli.add_command(support)
210249
211250 if __name__ == '__main__':
212251 cli()
0 #!/usr/bin/env python
1 '''
0 """
21 Faraday Penetration Test IDE
3 Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/)
2 Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/)
43 See the file 'doc/LICENSE' for the license information
5
6 '''
4 """
5
76 import json
8
9
107 import os
118 import re
129 import time
1310 import traceback
14 from threading import Thread
15
11
12 from random import random
13 from threading import Thread, Timer
1614 from utils.logs import getLogger
15
16 from config.configuration import getInstanceConfiguration
17 CONF = getInstanceConfiguration()
1718
1819 try:
1920 import xml.etree.cElementTree as ET
20
2121 except ImportError:
22 print "cElementTree could not be imported. Using ElementTree instead"
22 print("cElementTree could not be imported. Using ElementTree instead")
2323 import xml.etree.ElementTree as ET
2424
25 from config.configuration import getInstanceConfiguration
26 CONF = getInstanceConfiguration()
27
28
29 class ReportProcessor():
25
26 class OnlinePlugins(Thread):
27
28 def __init__(self, plugin_controller):
29
30 Thread.__init__(self)
31 self.setDaemon(True)
32 self._stop = False
33
34 self.online_plugins = {
35 "MetasploitOn": {
36 "time": 30,
37 "command": "./metasploiton online"},
38 "Beef": {
39 "time": 30,
40 "command": "./beef online"},
41 "Sentinel": {
42 "time": 60,
43 "command": "sentinel"}
44 }
45
46 self.plugins_settings = CONF.getPluginSettings()
47 self.plugin_controller = plugin_controller
48
49 def runPluginThread(self, cmd):
50 random_id = random()
51 self.plugin_controller.processCommandInput(random_id, cmd, './')
52 self.plugin_controller.onCommandFinished(random_id, 0, cmd)
53 getLogger(self).debug("Running online plugin...")
54
55 def stop(self):
56 self._stop = True
57
58 def run(self):
59
60 while not self._stop:
61
62 for name, config_dict in self.online_plugins.iteritems():
63 if name in self.plugins_settings:
64 if self.plugins_settings[name]['settings']['Enable'] == "1":
65
66 t = Timer(
67 config_dict["time"],
68 self.runPluginThread, args=(config_dict["command"],))
69
70 getLogger(self).debug(
71 "Starting Thread for online plugin: %s" % name)
72
73 self.online_plugins[name]["thread_running"] = True
74 t.start()
75
76 time.sleep(60)
77
78
79 class ReportProcessor:
80
3081 def __init__(self, plugin_controller, ws_name=None):
3182 self.plugin_controller = plugin_controller
3283 self.ws_name = ws_name
3384
3485 def processReport(self, filename):
35 """
36 Process one Report
37 """
86 """ Process one Report """
3887 getLogger(self).debug("Report file is %s" % filename)
3988
4089 parser = ReportParser(filename)
4190
4291 if parser.report_type is None:
92
4393 getLogger(self).error(
4494 'Plugin not found: automatic and manual try!')
4595 return False
4898
4999 def sendReport(self, plugin_id, filename):
50100 """Sends a report to the appropiate plugin specified by plugin_id"""
101
51102 getLogger(self).info(
52103 'The file is %s, %s' % (filename, plugin_id))
53 command_id = self.plugin_controller.processReport(plugin_id, filename, ws_name=self.ws_name)
104
105 command_id = self.plugin_controller.processReport(
106 plugin_id, filename, ws_name=self.ws_name)
107
54108 if not command_id:
109
55110 getLogger(self).error(
56 "Faraday doesn't have a plugin for this tool..."
57 " Processing: ABORT")
111 "Faraday doesn't have a plugin for this tool... Processing: ABORT")
58112 return False
113
59114 return command_id
60115
61 def onlinePlugin(self, cmd):
62 _, new_cmd = self.plugin_controller.processCommandInput('0', cmd, './')
63 self.plugin_controller.onCommandFinished('0', 0, cmd)
64
65116
66117 class ReportManager(Thread):
118
67119 def __init__(self, timer, ws_name, plugin_controller, polling=True):
120
68121 Thread.__init__(self)
69122 self.setDaemon(True)
123
70124 self.polling = polling
71125 self.ws_name = ws_name
72126 self.timer = timer
73127 self._stop = False
128
74129 self._report_path = os.path.join(CONF.getReportPath(), ws_name)
75130 self._report_ppath = os.path.join(self._report_path, "process")
76131 self._report_upath = os.path.join(self._report_path, "unprocessed")
132
77133 self.processor = ReportProcessor(plugin_controller, ws_name)
134 self.online_plugins = OnlinePlugins(plugin_controller)
135
78136
79137 if not os.path.exists(self._report_path):
80138 os.mkdir(self._report_path)
86144 os.mkdir(self._report_upath)
87145
88146 def run(self):
147
148 self.online_plugins.start()
89149 tmp_timer = .0
90 tmp_timer_sentinel = 0
150
91151 while not self._stop:
92152
93153 time.sleep(.1)
94154 tmp_timer += .1
95 tmp_timer_sentinel += 1
96
97 if tmp_timer_sentinel == 1800:
98 tmp_timer_sentinel = 0
99 self.launchSentinel()
100155
101156 if tmp_timer >= self.timer:
157
102158 try:
103159 self.syncReports()
104160 if not self.polling:
105161 break
162
106163 except Exception:
164
107165 getLogger(self).error(
108166 "An exception was captured while saving reports\n%s"
109167 % traceback.format_exc())
168
110169 finally:
111170 tmp_timer = 0
112171
113172 def stop(self):
114173 self._stop = True
115
116 def launchSentinel(self):
117 psettings = CONF.getPluginSettings()
118
119 name, cmd = "Sentinel", "sentinel"
120 if name in psettings:
121 if psettings[name]['settings']['Enable'] == "1":
122 getLogger(self).info("Plugin Started: Sentinel")
123 self.processor.onlinePlugin(cmd)
124 getLogger(self).info("Plugin Ended: Sentinel")
174 self.online_plugins.stop()
125175
126176 def syncReports(self):
127177 """
129179 We first make sure that all shared reports were added to the repo
130180 """
131181 for root, dirs, files in os.walk(self._report_path, False):
182
132183 # skip processed and unprocessed directories
133184 if root == self._report_path:
134185 for name in files:
186
135187 filename = os.path.join(root, name)
136188 name = os.path.basename(filename)
189
137190 # If plugin not is detected... move to unprocessed
138191 # PluginCommiter will rename the file to processed or unprocessed
139192 # when the plugin finishes
140193 if self.processor.processReport(filename) is False:
141 getLogger(self).info('Plugin not detected. Moving {0} to unprocessed'.format(filename))
194
195 getLogger(self).info(
196 'Plugin not detected. Moving {0} to unprocessed'.format(filename))
197
142198 os.rename(
143199 filename,
144200 os.path.join(self._report_upath, name))
145201 else:
202
146203 getLogger(self).info(
147204 'Detected valid report {0}'.format(filename))
205
148206 os.rename(
149207 filename,
150208 os.path.join(self._report_ppath, name))
151209
152 self.onlinePlugins()
153
154 def onlinePlugins(self):
155 """
156 Process online plugins
157 """
158 pluginsOn = {"MetasploitOn": "./metasploiton online"}
159 pluginsOn.update({"Beef": "./beef online"})
160 psettings = CONF.getPluginSettings()
161
162 for name, cmd in pluginsOn.iteritems():
163 if name in psettings:
164 if psettings[name]['settings']['Enable'] == "1":
165 self.processor.onlinePlugin(cmd)
166
167210 def sendReportToPluginById(self, plugin_id, filename):
168211 """Sends a report to be processed by the specified plugin_id"""
169212 self.processor.sendReport(plugin_id, filename)
170213
171214
172215 class ReportParser(object):
173
174216 """
175217 Class that handles reports files.
176
177218 :param filepath: report file.
178
179219 :class:`.LoadReport`
180220 """
181221
215255 This method uses file signatures to recognize file types
216256
217257 :param file_path: report file.
218 """
219
220 """
258
221259 If you need add support to a new report type
222260 add the file signature here
223261 and add the code in self.getRootTag() for get the root tag.
225263 f = result = None
226264
227265 signatures = {
228 "\x50\x4B": "zip",
229 "\x3C\x3F\x78\x6D\x6C": "xml",
230 "# Lynis Re": "dat",
266 "\x50\x4B": "zip",
267 "\x3C\x3F\x78\x6D\x6C": "xml",
268 "# Lynis Re": "dat",
231269 }
232270
233271 try:
253291 except ValueError:
254292 pass
255293
256 except IOError, err:
294 except IOError as err:
257295 self.report_type = None
258296 getLogger(self).error(
259297 "Error while opening file.\n%s. %s" % (err, file_path))
289327 result = elem.tag
290328 break
291329
292 except SyntaxError, err:
330 except SyntaxError as err:
293331 self.report_type = None
294332 getLogger(self).error("Not an xml file.\n %s" % (err))
295333
301339 return result, output
302340
303341 def rType(self, tag, output):
304 """Compares report root tag with known root tags.
305
306 :param root_tag
307 :rtype
308 """
309 if "nmaprun" == tag:
342 """ Compares report root tag with known root tags """
343 if tag == "nmaprun":
310344 return "Nmap"
311 elif "w3af-run" == tag:
345 elif tag == "w3af-run":
312346 return "W3af"
313 elif "NessusClientData_v2" == tag:
347 elif tag == "NessusClientData_v2":
314348 return "Nessus"
315 elif "report" == tag:
349 elif tag == "report":
316350
317351 if re.search(
318 "https://raw.githubusercontent.com/Arachni/arachni/",
319 output) is not None:
352 "https://raw.githubusercontent.com/Arachni/arachni/", output) is not None:
320353 return "Arachni"
321354
322 elif re.search("OpenVAS", output) is not None or re.search(
323 '<omp><version>',
324 output) is not None:
355 elif re.search("OpenVAS", output) is not None or re.search('<omp><version>', output) is not None:
325356 return "Openvas"
326357
327358 else:
328359 return "Zap"
329360
330 elif "xml-report" == tag:
331 if re.search("Appscan",output) is not None:
361 elif tag == "xml-report":
362 if re.search("Appscan", output) is not None:
332363 return "Appscan"
333 elif "niktoscan" == tag:
364 elif tag == "niktoscan":
334365 return "Nikto"
335 elif "MetasploitV4" == tag:
366 elif tag == "MetasploitV4":
336367 return "Metasploit"
337 elif "MetasploitV5" == tag:
368 elif tag == "MetasploitV5":
338369 return "Metasploit"
339 elif "issues" == tag:
370 elif tag == "issues":
340371 return "Burp"
341 elif "OWASPZAPReport" == tag:
372 elif tag == "OWASPZAPReport":
342373 return "Zap"
343 elif "ScanGroup" == tag:
374 elif tag == "ScanGroup":
344375 return "Acunetix"
345 elif "session" == tag:
376 elif tag == "session":
346377 return "X1"
347 elif "landscapePolicy" == tag:
378 elif tag == "landscapePolicy":
348379 return "X1"
349 elif "entities" == tag:
380 elif tag == "entities":
350381 return "Core Impact"
351 elif "NexposeReport" == tag:
382 elif tag == "NexposeReport":
352383 return "NexposeFull"
353 elif "ASSET_DATA_REPORT" == tag or "SCAN" == tag:
384 elif tag == "ASSET_DATA_REPORT" or "SCAN":
354385 return "Qualysguard"
355 elif "scanJob" == tag:
386 elif tag == "scanJob":
356387 return "Retina"
357 elif "netsparker" == tag:
388 elif tag == "netsparker":
358389 return "Netsparker"
359 elif "netsparker-cloud" == tag:
390 elif tag == "netsparker-cloud":
360391 return "NetsparkerCloud"
361 elif "maltego" == tag:
392 elif tag == "maltego":
362393 return "Maltego"
363 elif "lynis" == tag:
394 elif tag == "lynis":
364395 return "Lynis"
365 elif "reconng" == tag:
396 elif tag == "reconng":
366397 return "Reconng"
367398 else:
368399 return None
0 """empty message
1
2 Revision ID: 8a10ff3926a5
3 Revises:
4 Create Date: 2018-11-29 16:34:44.081899+00:00
5
6 """
7 from alembic import op
8 import sqlalchemy as sa
9
10
11 # revision identifiers, used by Alembic.
12 revision = '8a10ff3926a5'
13 down_revision = 'e61afb450465'
14 branch_labels = None
15 depends_on = None
16
17
18 def upgrade():
19 op.add_column('faraday_user', sa.Column('otp_secret', sa.String(16)))
20 op.execute("CREATE TYPE user_otp_states AS ENUM('disabled', 'requested', 'confirmed')")
21 op.add_column('faraday_user', sa.Column(
22 'state_otp',
23 sa.Enum(("disabled", "requested", "confirmed"), name='user_otp_states'),
24 nullable=False,
25 server_default='disabled'))
26
27
28 def downgrade():
29 op.drop_column('faraday_user', 'otp_secret')
30 op.drop_column('faraday_user', 'state_otp')
31 op.execute('DROP TYPE user_otp_states')
0 """Add custom fields
1
2 Revision ID: e61afb450465
3 Revises:
4 Create Date: 2018-10-23 15:43:52.612619+00:00
5
6 """
7 from alembic import op
8 import sqlalchemy as sa
9
10
11 # revision identifiers, used by Alembic.
12 revision = 'e61afb450465'
13 down_revision = None
14 branch_labels = None
15 depends_on = None
16
17
18 def upgrade():
19 conn = op.get_bind()
20 conn.execute('ALTER TABLE vulnerability ADD COLUMN custom_fields JSONB')
21 conn.execute('ALTER TABLE vulnerability_template ADD COLUMN custom_fields JSONB')
22 conn.execute('CREATE TABLE custom_fields_schema ( '\
23 'id SERIAL PRIMARY KEY,' \
24 'table_name TEXT,' \
25 'field_name TEXT,' \
26 'field_type TEXT,' \
27 'field_order INTEGER,' \
28 'field_display_name TEXT)'
29 )
30
31 def downgrade():
32 conn = op.get_bind()
33 conn.execute('ALTER TABLE vulnerability DROP COLUMN custom_fields')
34 conn.execute('ALTER TABLE vulnerability_template DROP COLUMN custom_fields')
35 conn.execute('DROP TABLE custom_fields_schema')
7979 hostnames = [hostname]
8080 if hostname == "localhost":
8181 hostnames.append("127.0.0.1")
82
82
8383 listening = False
8484 for hostname in hostnames:
8585
116116 "XMLRPC API server configured on %s" % str(
117117 CONF.getApiConInfo()))
118118 break
119
119
120120 except socket.error as e:
121121 msg = "There was an error creating the XMLRPC API Server (Host:{}): {}".format(hostname,e)
122122 log(msg)
1111 import threading
1212 from json import loads
1313 from time import sleep
14 from Queue import Queue
15
14 try:
15 from Queue import Queue
16 except ImportError:
17 from queue import Queue
1618 import requests
1719
1820 from model.controller import ModelController
180182 exit_code = self.app.run(self.args)
181183
182184 except Exception as exception:
183 print "There was an error while starting Faraday:"
184 print "*" * 3,
185 print exception, # instead of traceback.print_exc()
186 print "*" * 3
185 print("There was an error while starting Faraday:")
186 print("*" * 3)
187 print(exception) # instead of traceback.print_exc()
188 print("*" * 3)
187189 exit_code = -1
188190
189191 finally:
77 import traceback
88 import threading
99 import logging
10 import xmlrpclib
11 import SimpleXMLRPCServer
10 try:
11 import xmlrpclib
12 import SimpleXMLRPCServer
13 except ImportError:
14 from xmlrpc import client as xmlrpclib
15 from xmlrpc.server import SimpleXMLRPCServer
1216
1317 try:
1418 import model.api as api
168172 response = self.server._marshaled_dispatch(
169173 data, getattr(self, '_dispatch', None)
170174 )
171 except Exception, e: # This should only happen if the module is buggy
175 except Exception as e: # This should only happen if the module is buggy
172176 # internal error, report as HTTP server error
173177 self.send_response(500)
174178
418418 def _pluginStart(self, name, command_id):
419419 self.active_plugins_count_lock.acquire()
420420 self.processing = True
421 getLogger(self).info("Plugin Started: {0}. ".format(name, command_id))
421 if name not in ["MetasploitOn", "Beef", "Sentinel"]:
422 getLogger(self).info("Plugin Started: {0}. ".format(name, command_id))
422423 self.active_plugins_count += 1
423424 self.active_plugins_count_lock.release()
424425 return True
425426
426427 def _pluginEnd(self, name, command_id):
427428 self.active_plugins_count_lock.acquire()
428 getLogger(self).info("Plugin Ended: {0}".format(name))
429 if name not in ["MetasploitOn", "Beef", "Sentinel"]:
430 getLogger(self).info("Plugin Ended: {0}".format(name))
429431 if self.active_plugins_count == 0:
430432 self.active_plugins_count_lock.release()
431433 getLogger(self).warn("All plugins ended, but a plugin end action was received.")
+0
-28
nix/server/default.nix less more
0 { pkgs ? import <nixpkgs> {}
1 }:
2 let
3 python_env = (pkgs.callPackage ./requirements.nix {inherit pkgs;});
4 cleanPycs = path: type: type == "directory" || builtins.match ".*\.pyc" path != null;
5 src = ./../..;
6 in
7 {
8 server = pkgs.stdenv.mkDerivation {
9 name = "faraday_server";
10 src = builtins.filterSource cleanPycs src;
11 buildInputs = with pkgs; [coreutils makeWrapper python_env.interpreter];
12 builder = "${pkgs.bash}/bin/bash";
13 args = ["-c" ''
14
15 source $stdenv/setup
16 mkdir -p $out/{bin,src}
17 cp -rv ${src}/* $out/src/
18
19 makeWrapper \
20 ${python_env.interpreter}/bin/python \
21 $out/bin/faraday-server \
22 --prefix PATH : $out \
23 --add-flags ${src}/faraday-server.py
24 ''];
25 };
26 python = python_env;
27 }
+0
-1810
nix/server/requirements.nix less more
0 # generated using pypi2nix tool (version: 1.8.1)
1 # See more at: https://github.com/garbas/pypi2nix
2 #
3 # COMMAND:
4 # pypi2nix -V 2.7 -r ../../requirements_server.txt -r ../../requirements_dev.txt -E libffi -E openssl -E postgresql -E pkgconfig -E zlib -E libjpeg -E openjpeg -E libtiff -E freetype -E lcms2 -E libwebp -E tcl -e setuptools_scm -e m2r -e pytest-runner
5 #
6
7 { pkgs ? import <nixpkgs> {}
8 }:
9
10 let
11
12 inherit (pkgs) makeWrapper;
13 inherit (pkgs.stdenv.lib) fix' extends inNixShell;
14
15 pythonPackages =
16 import "${toString pkgs.path}/pkgs/top-level/python-packages.nix" {
17 inherit pkgs;
18 inherit (pkgs) stdenv;
19 python = pkgs.python27Full;
20 # patching pip so it does not try to remove files when running nix-shell
21 overrides =
22 self: super: {
23 bootstrapped-pip = super.bootstrapped-pip.overrideDerivation (old: {
24 patchPhase = old.patchPhase + ''
25 if [ -e $out/${pkgs.python27Full.sitePackages}/pip/req/req_install.py ]; then
26 sed -i \
27 -e "s|paths_to_remove.remove(auto_confirm)|#paths_to_remove.remove(auto_confirm)|" \
28 -e "s|self.uninstalled = paths_to_remove|#self.uninstalled = paths_to_remove|" \
29 $out/${pkgs.python27Full.sitePackages}/pip/req/req_install.py
30 fi
31 '';
32 });
33 };
34 };
35
36 commonBuildInputs = with pkgs; [ libffi openssl postgresql pkgconfig zlib libjpeg openjpeg libtiff freetype lcms2 libwebp tcl ];
37 commonDoCheck = false;
38
39 withPackages = pkgs':
40 let
41 pkgs = builtins.removeAttrs pkgs' ["__unfix__"];
42 interpreter = pythonPackages.buildPythonPackage {
43 name = "python27Full-interpreter";
44 buildInputs = [ makeWrapper ] ++ (builtins.attrValues pkgs);
45 buildCommand = ''
46 mkdir -p $out/bin
47 ln -s ${pythonPackages.python.interpreter} \
48 $out/bin/${pythonPackages.python.executable}
49 for dep in ${builtins.concatStringsSep " "
50 (builtins.attrValues pkgs)}; do
51 if [ -d "$dep/bin" ]; then
52 for prog in "$dep/bin/"*; do
53 if [ -x "$prog" ] && [ -f "$prog" ]; then
54 ln -s $prog $out/bin/`basename $prog`
55 fi
56 done
57 fi
58 done
59 for prog in "$out/bin/"*; do
60 wrapProgram "$prog" --prefix PYTHONPATH : "$PYTHONPATH"
61 done
62 pushd $out/bin
63 ln -s ${pythonPackages.python.executable} python
64 ln -s ${pythonPackages.python.executable} \
65 python2
66 popd
67 '';
68 passthru.interpreter = pythonPackages.python;
69 };
70 in {
71 __old = pythonPackages;
72 inherit interpreter;
73 mkDerivation = pythonPackages.buildPythonPackage;
74 packages = pkgs;
75 overrideDerivation = drv: f:
76 pythonPackages.buildPythonPackage (
77 drv.drvAttrs // f drv.drvAttrs // { meta = drv.meta; }
78 );
79 withPackages = pkgs'':
80 withPackages (pkgs // pkgs'');
81 };
82
83 python = withPackages {};
84
85 generated = self: {
86 "Automat" = python.mkDerivation {
87 name = "Automat-0.6.0";
88 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/de/05/b8e453085cf8a7f27bb1226596f4ccf5cc9e758377d60284f990bbdc592c/Automat-0.6.0.tar.gz"; sha256 = "3c1fd04ecf08ac87b4dd3feae409542e9bf7827257097b2b6ed5692f69d6f6a8"; };
89 doCheck = commonDoCheck;
90 buildInputs = commonBuildInputs;
91 propagatedBuildInputs = [
92 self."Twisted"
93 self."attrs"
94 self."six"
95 ];
96 meta = with pkgs.stdenv.lib; {
97 homepage = "https://github.com/glyph/Automat";
98 license = licenses.mit;
99 description = "Self-service finite-state machines for the programmer on the go.";
100 };
101 };
102
103 "Babel" = python.mkDerivation {
104 name = "Babel-2.6.0";
105 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/be/cc/9c981b249a455fa0c76338966325fc70b7265521bad641bf2932f77712f4/Babel-2.6.0.tar.gz"; sha256 = "8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23"; };
106 doCheck = commonDoCheck;
107 buildInputs = commonBuildInputs;
108 propagatedBuildInputs = [
109 self."pytz"
110 ];
111 meta = with pkgs.stdenv.lib; {
112 homepage = "http://babel.pocoo.org/";
113 license = licenses.bsdOriginal;
114 description = "Internationalization utilities";
115 };
116 };
117
118 "Faker" = python.mkDerivation {
119 name = "Faker-0.8.15";
120 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/f9/74/f86d1b7493493a4fbfc69c327488f991ddbc8b8b1774357515d1cbb64fc4/Faker-0.8.15.tar.gz"; sha256 = "a77a1a2223a8e0d32618878350bbd2171040f32b526ba2cddfab8864704bb370"; };
121 doCheck = commonDoCheck;
122 buildInputs = commonBuildInputs;
123 propagatedBuildInputs = [
124 self."ipaddress"
125 self."python-dateutil"
126 self."six"
127 self."text-unidecode"
128 ];
129 meta = with pkgs.stdenv.lib; {
130 homepage = "https://github.com/joke2k/faker";
131 license = licenses.mit;
132 description = "Faker is a Python package that generates fake data for you.";
133 };
134 };
135
136 "Flask" = python.mkDerivation {
137 name = "Flask-0.12.4";
138 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/1b/72/ffc594a6832337ace475f939e61c34a44cbb150cde9589f98c482b407dd8/Flask-0.12.4.tar.gz"; sha256 = "2ea22336f6d388b4b242bc3abf8a01244a8aa3e236e7407469ef78c16ba355dd"; };
139 doCheck = commonDoCheck;
140 buildInputs = commonBuildInputs;
141 propagatedBuildInputs = [
142 self."Jinja2"
143 self."Werkzeug"
144 self."click"
145 self."itsdangerous"
146 ];
147 meta = with pkgs.stdenv.lib; {
148 homepage = "http://github.com/pallets/flask/";
149 license = licenses.bsdOriginal;
150 description = "A microframework based on Werkzeug, Jinja2 and good intentions";
151 };
152 };
153
154 "Flask-BabelEx" = python.mkDerivation {
155 name = "Flask-BabelEx-0.9.3";
156 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/80/ad/cc2b0becd98050eed775ca85d6e5fa784547acff69f968183098df8a52b3/Flask-BabelEx-0.9.3.tar.gz"; sha256 = "cf79cdedb5ce860166120136b0e059e9d97b8df07a3bc2411f6243de04b754b4"; };
157 doCheck = commonDoCheck;
158 buildInputs = commonBuildInputs;
159 propagatedBuildInputs = [
160 self."Babel"
161 self."Flask"
162 self."Jinja2"
163 self."speaklater"
164 ];
165 meta = with pkgs.stdenv.lib; {
166 homepage = "http://github.com/mrjoes/flask-babelex";
167 license = licenses.bsdOriginal;
168 description = "Adds i18n/l10n support to Flask applications";
169 };
170 };
171
172 "Flask-Classful" = python.mkDerivation {
173 name = "Flask-Classful-0.14.1";
174 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/f1/db/27ad7116db129724984cf6da8e7cdf9a20a2f8cb4dab50469329c5e1aa22/Flask-Classful-0.14.1.tar.gz"; sha256 = "f5250d2908e94cf5530d6e4cfd199b9c846b3ef571742a7a211405aee2ec1736"; };
175 doCheck = commonDoCheck;
176 buildInputs = commonBuildInputs;
177 propagatedBuildInputs = [
178 self."Flask"
179 ];
180 meta = with pkgs.stdenv.lib; {
181 homepage = "https://github.com/teracyhq/flask-classful";
182 license = licenses.bsdOriginal;
183 description = "Class based views for Flask";
184 };
185 };
186
187 "Flask-Login" = python.mkDerivation {
188 name = "Flask-Login-0.4.1";
189 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/c1/ff/bd9a4d2d81bf0c07d9e53e8cd3d675c56553719bbefd372df69bf1b3c1e4/Flask-Login-0.4.1.tar.gz"; sha256 = "c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec"; };
190 doCheck = commonDoCheck;
191 buildInputs = commonBuildInputs;
192 propagatedBuildInputs = [
193 self."Flask"
194 ];
195 meta = with pkgs.stdenv.lib; {
196 homepage = "https://github.com/maxcountryman/flask-login";
197 license = licenses.mit;
198 description = "User session management for Flask";
199 };
200 };
201
202 "Flask-Mail" = python.mkDerivation {
203 name = "Flask-Mail-0.9.1";
204 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/05/2f/6a545452040c2556559779db87148d2a85e78a26f90326647b51dc5e81e9/Flask-Mail-0.9.1.tar.gz"; sha256 = "22e5eb9a940bf407bcf30410ecc3708f3c56cc44b29c34e1726fe85006935f41"; };
205 doCheck = commonDoCheck;
206 buildInputs = commonBuildInputs;
207 propagatedBuildInputs = [
208 self."Flask"
209 self."blinker"
210 ];
211 meta = with pkgs.stdenv.lib; {
212 homepage = "https://github.com/rduplain/flask-mail";
213 license = licenses.bsdOriginal;
214 description = "Flask extension for sending email";
215 };
216 };
217
218 "Flask-Principal" = python.mkDerivation {
219 name = "Flask-Principal-0.4.0";
220 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/14/c7/2531aca6ab7baa3774fde2dfc9c9dd6d5a42576a1013a93701bfdc402fdd/Flask-Principal-0.4.0.tar.gz"; sha256 = "f5d6134b5caebfdbb86f32d56d18ee44b080876a27269560a96ea35f75c99453"; };
221 doCheck = commonDoCheck;
222 buildInputs = commonBuildInputs;
223 propagatedBuildInputs = [
224 self."Flask"
225 self."blinker"
226 ];
227 meta = with pkgs.stdenv.lib; {
228 homepage = "http://packages.python.org/Flask-Principal/";
229 license = licenses.mit;
230 description = "Identity management for flask";
231 };
232 };
233
234 "Flask-SQLAlchemy" = python.mkDerivation {
235 name = "Flask-SQLAlchemy-2.3.2";
236 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/3a/66/f5ace276517c075f102457dd2f7d8645b033758f9c6effb4e0970a90fec1/Flask-SQLAlchemy-2.3.2.tar.gz"; sha256 = "5971b9852b5888655f11db634e87725a9031e170f37c0ce7851cf83497f56e53"; };
237 doCheck = commonDoCheck;
238 buildInputs = commonBuildInputs;
239 propagatedBuildInputs = [
240 self."Flask"
241 self."SQLAlchemy"
242 ];
243 meta = with pkgs.stdenv.lib; {
244 homepage = "http://github.com/mitsuhiko/flask-sqlalchemy";
245 license = licenses.bsdOriginal;
246 description = "Adds SQLAlchemy support to your Flask application";
247 };
248 };
249
250 "Flask-Security" = python.mkDerivation {
251 name = "Flask-Security-3.0.0";
252 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/ba/c1/16e460fec7961509b10aaf8cc986fa7a1df5dced2844f42cd46732621211/Flask-Security-3.0.0.tar.gz"; sha256 = "d61daa5f5a48f89f30f50555872bdf581b2c65804668b0313345cd7beff26432"; };
253 doCheck = commonDoCheck;
254 buildInputs = commonBuildInputs;
255 propagatedBuildInputs = [
256 self."Flask"
257 self."Flask-BabelEx"
258 self."Flask-Login"
259 self."Flask-Mail"
260 self."Flask-Principal"
261 self."Flask-SQLAlchemy"
262 self."Flask-WTF"
263 self."SQLAlchemy"
264 self."bcrypt"
265 self."coverage"
266 self."itsdangerous"
267 self."mock"
268 self."passlib"
269 self."pytest"
270 ];
271 meta = with pkgs.stdenv.lib; {
272 homepage = "https://github.com/mattupstate/flask-security";
273 license = licenses.mit;
274 description = "Simple security for Flask apps.";
275 };
276 };
277
278 "Flask-Session" = python.mkDerivation {
279 name = "Flask-Session-0.3.1";
280 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/2e/9f/b138521d0416b001469bcdc79a3619f013c0563204f7251ba978eb3e69d5/Flask-Session-0.3.1.tar.gz"; sha256 = "a31c27e0c3287f00c825b3d9625aba585f4df4cccedb1e7dd5a69a215881a731"; };
281 doCheck = commonDoCheck;
282 buildInputs = commonBuildInputs;
283 propagatedBuildInputs = [
284 self."Flask"
285 ];
286 meta = with pkgs.stdenv.lib; {
287 homepage = "https://github.com/fengsp/flask-session";
288 license = licenses.bsdOriginal;
289 description = "Adds server-side session support to your Flask application";
290 };
291 };
292
293 "Flask-WTF" = python.mkDerivation {
294 name = "Flask-WTF-0.14.2";
295 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/ba/15/00a9693180f214225a2c0b1bb9077f3b0b21f2e86522cbba22e8ad6e570c/Flask-WTF-0.14.2.tar.gz"; sha256 = "5d14d55cfd35f613d99ee7cba0fc3fbbe63ba02f544d349158c14ca15561cc36"; };
296 doCheck = commonDoCheck;
297 buildInputs = commonBuildInputs;
298 propagatedBuildInputs = [
299 self."Flask"
300 self."WTForms"
301 ];
302 meta = with pkgs.stdenv.lib; {
303 homepage = "https://github.com/lepture/flask-wtf";
304 license = licenses.bsdOriginal;
305 description = "Simple integration of Flask and WTForms.";
306 };
307 };
308
309 "IPy" = python.mkDerivation {
310 name = "IPy-0.83";
311 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz"; sha256 = "61da5a532b159b387176f6eabf11946e7458b6df8fb8b91ff1d345ca7a6edab8"; };
312 doCheck = commonDoCheck;
313 buildInputs = commonBuildInputs;
314 propagatedBuildInputs = [ ];
315 meta = with pkgs.stdenv.lib; {
316 homepage = "https://github.com/autocracy/python-ipy";
317 license = licenses.bsdOriginal;
318 description = "Class and tools for handling of IPv4 and IPv6 addresses and networks";
319 };
320 };
321
322 "Jinja2" = python.mkDerivation {
323 name = "Jinja2-2.10";
324 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/56/e6/332789f295cf22308386cf5bbd1f4e00ed11484299c5d7383378cf48ba47/Jinja2-2.10.tar.gz"; sha256 = "f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"; };
325 doCheck = commonDoCheck;
326 buildInputs = commonBuildInputs;
327 propagatedBuildInputs = [
328 self."Babel"
329 self."MarkupSafe"
330 ];
331 meta = with pkgs.stdenv.lib; {
332 homepage = "http://jinja.pocoo.org/";
333 license = licenses.bsdOriginal;
334 description = "A small but fast and easy to use stand-alone template engine written in pure python.";
335 };
336 };
337
338 "Mako" = python.mkDerivation {
339 name = "Mako-1.0.7";
340 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz"; sha256 = "4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae"; };
341 doCheck = commonDoCheck;
342 buildInputs = commonBuildInputs;
343 propagatedBuildInputs = [
344 self."MarkupSafe"
345 ];
346 meta = with pkgs.stdenv.lib; {
347 homepage = "http://www.makotemplates.org/";
348 license = licenses.mit;
349 description = "A super-fast templating language that borrows the best ideas from the existing templating languages.";
350 };
351 };
352
353 "MarkupSafe" = python.mkDerivation {
354 name = "MarkupSafe-1.0";
355 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz"; sha256 = "a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"; };
356 doCheck = commonDoCheck;
357 buildInputs = commonBuildInputs;
358 propagatedBuildInputs = [ ];
359 meta = with pkgs.stdenv.lib; {
360 homepage = "http://github.com/pallets/markupsafe";
361 license = licenses.bsdOriginal;
362 description = "Implements a XML/HTML/XHTML Markup safe string for Python";
363 };
364 };
365
366 "Pillow" = python.mkDerivation {
367 name = "Pillow-5.1.0";
368 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/89/b8/2f49bf71cbd0e9485bb36f72d438421b69b7356180695ae10bd4fd3066f5/Pillow-5.1.0.tar.gz"; sha256 = "cee9bc75bff455d317b6947081df0824a8f118de2786dc3d74a3503fd631f4ef"; };
369 doCheck = commonDoCheck;
370 buildInputs = commonBuildInputs;
371 propagatedBuildInputs = [ ];
372 meta = with pkgs.stdenv.lib; {
373 homepage = "https://python-pillow.org";
374 license = "License :: Other/Proprietary License";
375 description = "Python Imaging Library (Fork)";
376 };
377 };
378
379 "Pygments" = python.mkDerivation {
380 name = "Pygments-2.2.0";
381 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz"; sha256 = "dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc"; };
382 doCheck = commonDoCheck;
383 buildInputs = commonBuildInputs;
384 propagatedBuildInputs = [ ];
385 meta = with pkgs.stdenv.lib; {
386 homepage = "http://pygments.org/";
387 license = licenses.bsdOriginal;
388 description = "Pygments is a syntax highlighting package written in Python.";
389 };
390 };
391
392 "SQLAlchemy" = python.mkDerivation {
393 name = "SQLAlchemy-1.2.8";
394 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/b4/9c/411a9bac1a471bed54ec447dc183aeed12a75c1b648307e18b56e3829363/SQLAlchemy-1.2.8.tar.gz"; sha256 = "2d5f08f714a886a1382c18be501e614bce50d362384dc089474019ce0768151c"; };
395 doCheck = commonDoCheck;
396 buildInputs = commonBuildInputs;
397 propagatedBuildInputs = [
398 self."psycopg2"
399 ];
400 meta = with pkgs.stdenv.lib; {
401 homepage = "http://www.sqlalchemy.org";
402 license = licenses.mit;
403 description = "Database Abstraction Library";
404 };
405 };
406
407 "Twisted" = python.mkDerivation {
408 name = "Twisted-18.4.0";
409 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/12/2a/e9e4fb2e6b2f7a75577e0614926819a472934b0b85f205ba5d5d2add54d0/Twisted-18.4.0.tar.bz2"; sha256 = "a4cc164a781859c74de47f17f0e85f4bce8a3321a9d0892c015c8f80c4158ad9"; };
410 doCheck = commonDoCheck;
411 buildInputs = commonBuildInputs;
412 propagatedBuildInputs = [
413 self."Automat"
414 self."constantly"
415 self."cryptography"
416 self."hyperlink"
417 self."idna"
418 self."incremental"
419 self."pyOpenSSL"
420 self."pyasn1"
421 self."service-identity"
422 self."zope.interface"
423 ];
424 meta = with pkgs.stdenv.lib; {
425 homepage = "http://twistedmatrix.com/";
426 license = licenses.mit;
427 description = "An asynchronous networking framework written in Python";
428 };
429 };
430
431 "Unidecode" = python.mkDerivation {
432 name = "Unidecode-1.0.22";
433 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/9d/36/49d0ee152b6a1631f03a541532c6201942430060aa97fe011cf01a2cce64/Unidecode-1.0.22.tar.gz"; sha256 = "8c33dd588e0c9bc22a76eaa0c715a5434851f726131bd44a6c26471746efabf5"; };
434 doCheck = commonDoCheck;
435 buildInputs = commonBuildInputs;
436 propagatedBuildInputs = [ ];
437 meta = with pkgs.stdenv.lib; {
438 homepage = "";
439 license = licenses.gpl2Plus;
440 description = "ASCII transliterations of Unicode text";
441 };
442 };
443
444 "WTForms" = python.mkDerivation {
445 name = "WTForms-2.2.1";
446 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/cd/1d/7221354ebfc32b868740d02e44225c2ce00769b0d3dc370e463e2bc4b446/WTForms-2.2.1.tar.gz"; sha256 = "0cdbac3e7f6878086c334aa25dc5a33869a3954e9d1e015130d65a69309b3b61"; };
447 doCheck = commonDoCheck;
448 buildInputs = commonBuildInputs;
449 propagatedBuildInputs = [
450 self."Babel"
451 ];
452 meta = with pkgs.stdenv.lib; {
453 homepage = "https://wtforms.readthedocs.io/";
454 license = licenses.bsdOriginal;
455 description = "A flexible forms validation and rendering library for Python web development.";
456 };
457 };
458
459 "Werkzeug" = python.mkDerivation {
460 name = "Werkzeug-0.14.1";
461 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/9f/08/a3bb1c045ec602dc680906fc0261c267bed6b3bb4609430aff92c3888ec8/Werkzeug-0.14.1.tar.gz"; sha256 = "c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c"; };
462 doCheck = commonDoCheck;
463 buildInputs = commonBuildInputs;
464 propagatedBuildInputs = [
465 self."coverage"
466 self."pytest"
467 ];
468 meta = with pkgs.stdenv.lib; {
469 homepage = "https://www.palletsprojects.org/p/werkzeug/";
470 license = licenses.bsdOriginal;
471 description = "The comprehensive WSGI web application library.";
472 };
473 };
474
475 "alembic" = python.mkDerivation {
476 name = "alembic-0.9.9";
477 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/89/03/756d5b8e1c90bf283c3f435766aa3f20208d1c3887579dd8f2122e01d5f4/alembic-0.9.9.tar.gz"; sha256 = "85bd3ea7633024e4930900bc64fb58f9742dedbc6ebb6ecf25be2ea9a3c1b32e"; };
478 doCheck = commonDoCheck;
479 buildInputs = commonBuildInputs;
480 propagatedBuildInputs = [
481 self."Mako"
482 self."SQLAlchemy"
483 self."python-dateutil"
484 self."python-editor"
485 ];
486 meta = with pkgs.stdenv.lib; {
487 homepage = "http://bitbucket.org/zzzeek/alembic";
488 license = licenses.mit;
489 description = "A database migration tool for SQLAlchemy.";
490 };
491 };
492
493 "asn1crypto" = python.mkDerivation {
494 name = "asn1crypto-0.24.0";
495 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4/asn1crypto-0.24.0.tar.gz"; sha256 = "9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"; };
496 doCheck = commonDoCheck;
497 buildInputs = commonBuildInputs;
498 propagatedBuildInputs = [ ];
499 meta = with pkgs.stdenv.lib; {
500 homepage = "https://github.com/wbond/asn1crypto";
501 license = licenses.mit;
502 description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP";
503 };
504 };
505
506 "atomicwrites" = python.mkDerivation {
507 name = "atomicwrites-1.1.5";
508 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/a1/e1/2d9bc76838e6e6667fde5814aa25d7feb93d6fa471bf6816daac2596e8b2/atomicwrites-1.1.5.tar.gz"; sha256 = "240831ea22da9ab882b551b31d4225591e5e447a68c5e188db5b89ca1d487585"; };
509 doCheck = commonDoCheck;
510 buildInputs = commonBuildInputs;
511 propagatedBuildInputs = [ ];
512 meta = with pkgs.stdenv.lib; {
513 homepage = "https://github.com/untitaker/python-atomicwrites";
514 license = licenses.mit;
515 description = "Atomic file writes.";
516 };
517 };
518
519 "attrs" = python.mkDerivation {
520 name = "attrs-18.1.0";
521 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/e4/ac/a04671e118b57bee87dabca1e0f2d3bda816b7a551036012d0ca24190e71/attrs-18.1.0.tar.gz"; sha256 = "e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b"; };
522 doCheck = commonDoCheck;
523 buildInputs = commonBuildInputs;
524 propagatedBuildInputs = [
525 self."coverage"
526 self."hypothesis"
527 self."pytest"
528 self."six"
529 self."zope.interface"
530 ];
531 meta = with pkgs.stdenv.lib; {
532 homepage = "http://www.attrs.org/";
533 license = licenses.mit;
534 description = "Classes Without Boilerplate";
535 };
536 };
537
538 "autobahn" = python.mkDerivation {
539 name = "autobahn-18.6.1";
540 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/e0/a4/ca655f7fc8cc28274f7415a304e73c525b203828c164cea22e60207afea0/autobahn-18.6.1.tar.gz"; sha256 = "2f41bfc512ec482044fa8cfa74182118dedd87e03b3494472d9ff1b5a1e27d24"; };
541 doCheck = commonDoCheck;
542 buildInputs = commonBuildInputs;
543 propagatedBuildInputs = [
544 self."Twisted"
545 self."cffi"
546 self."mock"
547 self."passlib"
548 self."pyOpenSSL"
549 self."pytest"
550 self."service-identity"
551 self."six"
552 self."txaio"
553 self."zope.interface"
554 ];
555 meta = with pkgs.stdenv.lib; {
556 homepage = "http://crossbar.io/autobahn";
557 license = licenses.mit;
558 description = "WebSocket client & server library, WAMP real-time framework";
559 };
560 };
561
562 "backports.csv" = python.mkDerivation {
563 name = "backports.csv-1.0.6";
564 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/c5/d2/6adc8e81e57a847fbe63b7967223aa13e340875a273be218ef15f162037d/backports.csv-1.0.6.tar.gz"; sha256 = "bed884eeb967c8d6f517dfcf672914324180f1e9ceeb0376fde2c4c32fd7008d"; };
565 doCheck = commonDoCheck;
566 buildInputs = commonBuildInputs;
567 propagatedBuildInputs = [ ];
568 meta = with pkgs.stdenv.lib; {
569 homepage = "https://github.com/ryanhiebert/backports.csv";
570 license = "";
571 description = "Backport of Python 3 csv module";
572 };
573 };
574
575 "bcrypt" = python.mkDerivation {
576 name = "bcrypt-3.1.4";
577 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/f3/ec/bb6b384b5134fd881b91b6aa3a88ccddaad0103857760711a5ab8c799358/bcrypt-3.1.4.tar.gz"; sha256 = "67ed1a374c9155ec0840214ce804616de49c3df9c5bc66740687c1c9b1cd9e8d"; };
578 doCheck = commonDoCheck;
579 buildInputs = commonBuildInputs;
580 propagatedBuildInputs = [
581 self."cffi"
582 self."pytest"
583 self."six"
584 ];
585 meta = with pkgs.stdenv.lib; {
586 homepage = "https://github.com/pyca/bcrypt/";
587 license = licenses.asl20;
588 description = "Modern password hashing for your software and your servers";
589 };
590 };
591
592 "beautifulsoup4" = python.mkDerivation {
593 name = "beautifulsoup4-4.6.0";
594 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/fa/8d/1d14391fdaed5abada4e0f63543fef49b8331a34ca60c88bd521bcf7f782/beautifulsoup4-4.6.0.tar.gz"; sha256 = "808b6ac932dccb0a4126558f7dfdcf41710dd44a4ef497a0bb59a77f9f078e89"; };
595 doCheck = commonDoCheck;
596 buildInputs = commonBuildInputs;
597 propagatedBuildInputs = [ ];
598 meta = with pkgs.stdenv.lib; {
599 homepage = "http://www.crummy.com/software/BeautifulSoup/bs4/";
600 license = licenses.mit;
601 description = "Screen-scraping library";
602 };
603 };
604
605 "blinker" = python.mkDerivation {
606 name = "blinker-1.4";
607 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/1b/51/e2a9f3b757eb802f61dc1f2b09c8c99f6eb01cf06416c0671253536517b6/blinker-1.4.tar.gz"; sha256 = "471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"; };
608 doCheck = commonDoCheck;
609 buildInputs = commonBuildInputs;
610 propagatedBuildInputs = [ ];
611 meta = with pkgs.stdenv.lib; {
612 homepage = "http://pythonhosted.org/blinker/";
613 license = licenses.mit;
614 description = "Fast, simple object-to-object and broadcast signaling";
615 };
616 };
617
618 "certifi" = python.mkDerivation {
619 name = "certifi-2018.4.16";
620 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/4d/9c/46e950a6f4d6b4be571ddcae21e7bc846fcbb88f1de3eff0f6dd0a6be55d/certifi-2018.4.16.tar.gz"; sha256 = "13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7"; };
621 doCheck = commonDoCheck;
622 buildInputs = commonBuildInputs;
623 propagatedBuildInputs = [ ];
624 meta = with pkgs.stdenv.lib; {
625 homepage = "http://certifi.io/";
626 license = licenses.mpl20;
627 description = "Python package for providing Mozilla's CA Bundle.";
628 };
629 };
630
631 "cffi" = python.mkDerivation {
632 name = "cffi-1.11.5";
633 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/e7/a7/4cd50e57cc6f436f1cc3a7e8fa700ff9b8b4d471620629074913e3735fb2/cffi-1.11.5.tar.gz"; sha256 = "e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4"; };
634 doCheck = commonDoCheck;
635 buildInputs = commonBuildInputs;
636 propagatedBuildInputs = [
637 self."pycparser"
638 ];
639 meta = with pkgs.stdenv.lib; {
640 homepage = "http://cffi.readthedocs.org";
641 license = licenses.mit;
642 description = "Foreign Function Interface for Python calling C code.";
643 };
644 };
645
646 "chardet" = python.mkDerivation {
647 name = "chardet-3.0.4";
648 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz"; sha256 = "84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"; };
649 doCheck = commonDoCheck;
650 buildInputs = commonBuildInputs;
651 propagatedBuildInputs = [ ];
652 meta = with pkgs.stdenv.lib; {
653 homepage = "https://github.com/chardet/chardet";
654 license = licenses.lgpl2;
655 description = "Universal encoding detector for Python 2 and 3";
656 };
657 };
658
659 "cli-helpers" = python.mkDerivation {
660 name = "cli-helpers-1.0.2";
661 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/d5/13/3783ef3fa23ab76b56d4b8f96ee90808d2c167bafc5eaa4ad3c78b75abe6/cli_helpers-1.0.2.tar.gz"; sha256 = "f77837c5fbcbea39e0cb782506515459a0da75465489bae35e46da7f51c5b9fc"; };
662 doCheck = commonDoCheck;
663 buildInputs = commonBuildInputs;
664 propagatedBuildInputs = [
665 self."Pygments"
666 self."backports.csv"
667 self."tabulate"
668 self."terminaltables"
669 ];
670 meta = with pkgs.stdenv.lib; {
671 homepage = "https://github.com/dbcli/cli_helpers";
672 license = licenses.bsdOriginal;
673 description = "Helpers for building command-line apps";
674 };
675 };
676
677 "click" = python.mkDerivation {
678 name = "click-6.7";
679 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/95/d9/c3336b6b5711c3ab9d1d3a80f1a3e2afeb9d8c02a7166462f6cc96570897/click-6.7.tar.gz"; sha256 = "f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"; };
680 doCheck = commonDoCheck;
681 buildInputs = commonBuildInputs;
682 propagatedBuildInputs = [ ];
683 meta = with pkgs.stdenv.lib; {
684 homepage = "http://github.com/mitsuhiko/click";
685 license = licenses.bsdOriginal;
686 description = "A simple wrapper around optparse for powerful command line utilities.";
687 };
688 };
689
690 "colorama" = python.mkDerivation {
691 name = "colorama-0.3.9";
692 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/e6/76/257b53926889e2835355d74fec73d82662100135293e17d382e2b74d1669/colorama-0.3.9.tar.gz"; sha256 = "48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1"; };
693 doCheck = commonDoCheck;
694 buildInputs = commonBuildInputs;
695 propagatedBuildInputs = [ ];
696 meta = with pkgs.stdenv.lib; {
697 homepage = "https://github.com/tartley/colorama";
698 license = licenses.bsdOriginal;
699 description = "Cross-platform colored terminal text.";
700 };
701 };
702
703 "configobj" = python.mkDerivation {
704 name = "configobj-5.0.6";
705 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz"; sha256 = "a2f5650770e1c87fb335af19a9b7eb73fc05ccf22144eb68db7d00cd2bcb0902"; };
706 doCheck = commonDoCheck;
707 buildInputs = commonBuildInputs;
708 propagatedBuildInputs = [
709 self."six"
710 ];
711 meta = with pkgs.stdenv.lib; {
712 homepage = "https://github.com/DiffSK/configobj";
713 license = licenses.bsdOriginal;
714 description = "Config file reading, writing and validation.";
715 };
716 };
717
718 "constantly" = python.mkDerivation {
719 name = "constantly-15.1.0";
720 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/95/f1/207a0a478c4bb34b1b49d5915e2db574cadc415c9ac3a7ef17e29b2e8951/constantly-15.1.0.tar.gz"; sha256 = "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"; };
721 doCheck = commonDoCheck;
722 buildInputs = commonBuildInputs;
723 propagatedBuildInputs = [ ];
724 meta = with pkgs.stdenv.lib; {
725 homepage = "https://github.com/twisted/constantly";
726 license = licenses.mit;
727 description = "Symbolic constants in Python";
728 };
729 };
730
731 "cookies" = python.mkDerivation {
732 name = "cookies-2.2.1";
733 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/f3/95/b66a0ca09c5ec9509d8729e0510e4b078d2451c5e33f47bd6fc33c01517c/cookies-2.2.1.tar.gz"; sha256 = "d6b698788cae4cfa4e62ef8643a9ca332b79bd96cb314294b864ae8d7eb3ee8e"; };
734 doCheck = commonDoCheck;
735 buildInputs = commonBuildInputs;
736 propagatedBuildInputs = [ ];
737 meta = with pkgs.stdenv.lib; {
738 homepage = "https://github.com/sashahart/cookies";
739 license = licenses.mit;
740 description = "Friendlier RFC 6265-compliant cookie parser/renderer";
741 };
742 };
743
744 "couchdbkit" = python.mkDerivation {
745 name = "couchdbkit-0.6.5";
746 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/a1/13/9e9ff695a385c44f62b4766341b97f2bd8b596962df2a0beabf358468b70/couchdbkit-0.6.5.tar.gz"; sha256 = "9b607f509727e6ada2dbd576a4120c214b1c54f3bb8bf6e2e0eb2cfbb11a0e00"; };
747 doCheck = commonDoCheck;
748 buildInputs = commonBuildInputs;
749 propagatedBuildInputs = [
750 self."restkit"
751 ];
752 meta = with pkgs.stdenv.lib; {
753 homepage = "http://couchdbkit.org";
754 license = "License :: OSI Approved :: Apache Software License";
755 description = "Python couchdb kit";
756 };
757 };
758
759 "coverage" = python.mkDerivation {
760 name = "coverage-4.5.1";
761 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/35/fe/e7df7289d717426093c68d156e0fd9117c8f4872b6588e8a8928a0f68424/coverage-4.5.1.tar.gz"; sha256 = "56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1"; };
762 doCheck = commonDoCheck;
763 buildInputs = commonBuildInputs;
764 propagatedBuildInputs = [ ];
765 meta = with pkgs.stdenv.lib; {
766 homepage = "https://bitbucket.org/ned/coveragepy";
767 license = licenses.asl20;
768 description = "Code coverage measurement for Python";
769 };
770 };
771
772 "cryptography" = python.mkDerivation {
773 name = "cryptography-2.2.2";
774 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/ec/b2/faa78c1ab928d2b2c634c8b41ff1181f0abdd9adf9193211bd606ffa57e2/cryptography-2.2.2.tar.gz"; sha256 = "9fc295bf69130a342e7a19a39d7bbeb15c0bcaabc7382ec33ef3b2b7d18d2f63"; };
775 doCheck = commonDoCheck;
776 buildInputs = commonBuildInputs;
777 propagatedBuildInputs = [
778 self."asn1crypto"
779 self."cffi"
780 self."enum34"
781 self."hypothesis"
782 self."idna"
783 self."ipaddress"
784 self."pytest"
785 self."pytz"
786 self."six"
787 ];
788 meta = with pkgs.stdenv.lib; {
789 homepage = "https://github.com/pyca/cryptography";
790 license = licenses.bsdOriginal;
791 description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers.";
792 };
793 };
794
795 "deprecation" = python.mkDerivation {
796 name = "deprecation-2.0.2";
797 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/d1/98/caa4171c9ad4bb046b18bef84cc6e5d0ae0427baeee920eef53da83fae09/deprecation-2.0.2.tar.gz"; sha256 = "e8d0dc5a17d7d551730e5f23ff3a53fc9e438364b9efb47d41c3e9b05522eabe"; };
798 doCheck = commonDoCheck;
799 buildInputs = commonBuildInputs;
800 propagatedBuildInputs = [
801 self."packaging"
802 ];
803 meta = with pkgs.stdenv.lib; {
804 homepage = "http://deprecation.readthedocs.io/";
805 license = licenses.asl20;
806 description = "A library to handle automated deprecations";
807 };
808 };
809
810 "docutils" = python.mkDerivation {
811 name = "docutils-0.14";
812 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz"; sha256 = "51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274"; };
813 doCheck = commonDoCheck;
814 buildInputs = commonBuildInputs;
815 propagatedBuildInputs = [ ];
816 meta = with pkgs.stdenv.lib; {
817 homepage = "http://docutils.sourceforge.net/";
818 license = licenses.publicDomain;
819 description = "Docutils -- Python Documentation Utilities";
820 };
821 };
822
823 "enum34" = python.mkDerivation {
824 name = "enum34-1.1.6";
825 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz"; sha256 = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"; };
826 doCheck = commonDoCheck;
827 buildInputs = commonBuildInputs;
828 propagatedBuildInputs = [ ];
829 meta = with pkgs.stdenv.lib; {
830 homepage = "https://bitbucket.org/stoneleaf/enum34";
831 license = licenses.bsdOriginal;
832 description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4";
833 };
834 };
835
836 "factory-boy" = python.mkDerivation {
837 name = "factory-boy-2.11.1";
838 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/d5/b4/649fc4bfd0daf308b5cd10bfa51c50bfa4c4c79e091ed301aca69ef6780e/factory_boy-2.11.1.tar.gz"; sha256 = "6f25cc4761ac109efd503f096e2ad99421b1159f01a29dbb917359dcd68e08ca"; };
839 doCheck = commonDoCheck;
840 buildInputs = commonBuildInputs;
841 propagatedBuildInputs = [
842 self."Faker"
843 ];
844 meta = with pkgs.stdenv.lib; {
845 homepage = "https://github.com/FactoryBoy/factory_boy";
846 license = licenses.mit;
847 description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby.";
848 };
849 };
850
851 "filedepot" = python.mkDerivation {
852 name = "filedepot-0.5.2";
853 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/8d/73/60668c2e6545d995a97c86086f5d83ed7cd80a70ba282fe485e126114fec/filedepot-0.5.2.tar.gz"; sha256 = "30ff9cb968137253e8d6260ce8b575feb15cb23b44a316dad2aee39de2c6bbfa"; };
854 doCheck = commonDoCheck;
855 buildInputs = commonBuildInputs;
856 propagatedBuildInputs = [
857 self."Pillow"
858 self."SQLAlchemy"
859 self."Unidecode"
860 self."coverage"
861 self."mock"
862 self."requests"
863 ];
864 meta = with pkgs.stdenv.lib; {
865 homepage = "https://github.com/amol-/depot";
866 license = licenses.mit;
867 description = "Toolkit for storing files and attachments in web applications";
868 };
869 };
870
871 "filteralchemy" = python.mkDerivation {
872 name = "filteralchemy-0.1.0";
873 src = pkgs.fetchgit { url = "https://github.com/infobyte/filteralchemy"; sha256 = "0zq1hnnsbvm004r4gq44c2ld2axzh0k4692vzxf74ip5g9fq4kka"; rev = "9ecc951c74786a8174a1d1c278a2c932945e1906"; };
874 doCheck = commonDoCheck;
875 buildInputs = commonBuildInputs;
876 propagatedBuildInputs = [
877 self."marshmallow-sqlalchemy"
878 self."six"
879 self."webargs"
880 ];
881 meta = with pkgs.stdenv.lib; {
882 homepage = "https://github.com/jmcarp/filteralchemy";
883 license = "Copyright 2015 Joshua Carp";
884 description = "Declarative query builder for SQLAlchemy";
885 };
886 };
887
888 "funcsigs" = python.mkDerivation {
889 name = "funcsigs-1.0.2";
890 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/94/4a/db842e7a0545de1cdb0439bb80e6e42dfe82aaeaadd4072f2263a4fbed23/funcsigs-1.0.2.tar.gz"; sha256 = "a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"; };
891 doCheck = commonDoCheck;
892 buildInputs = commonBuildInputs;
893 propagatedBuildInputs = [ ];
894 meta = with pkgs.stdenv.lib; {
895 homepage = "http://funcsigs.readthedocs.org";
896 license = "License :: OSI Approved :: Apache Software License";
897 description = "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+";
898 };
899 };
900
901 "http-parser" = python.mkDerivation {
902 name = "http-parser-0.8.3";
903 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/07/c4/22e3c76c2313c26dd5f84f1205b916ff38ea951aab0c4544b6e2f5920d64/http-parser-0.8.3.tar.gz"; sha256 = "e2aff90a60def3e476bd71694d8757c0f95ebf2fedf0a8ae34ee306e0b20db83"; };
904 doCheck = commonDoCheck;
905 buildInputs = commonBuildInputs;
906 propagatedBuildInputs = [ ];
907 meta = with pkgs.stdenv.lib; {
908 homepage = "http://github.com/benoitc/http-parser";
909 license = licenses.mit;
910 description = "http request/response parser";
911 };
912 };
913
914 "humanize" = python.mkDerivation {
915 name = "humanize-0.5.1";
916 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/8c/e0/e512e4ac6d091fc990bbe13f9e0378f34cf6eecd1c6c268c9e598dcf5bb9/humanize-0.5.1.tar.gz"; sha256 = "a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19"; };
917 doCheck = commonDoCheck;
918 buildInputs = commonBuildInputs;
919 propagatedBuildInputs = [ ];
920 meta = with pkgs.stdenv.lib; {
921 homepage = "http://github.com/jmoiron/humanize";
922 license = licenses.mit;
923 description = "python humanize utilities";
924 };
925 };
926
927 "hyperlink" = python.mkDerivation {
928 name = "hyperlink-18.0.0";
929 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/41/e1/0abd4b480ec04892b1db714560f8c855d43df81895c98506442babf3652f/hyperlink-18.0.0.tar.gz"; sha256 = "f01b4ff744f14bc5d0a22a6b9f1525ab7d6312cb0ff967f59414bbac52f0a306"; };
930 doCheck = commonDoCheck;
931 buildInputs = commonBuildInputs;
932 propagatedBuildInputs = [
933 self."idna"
934 ];
935 meta = with pkgs.stdenv.lib; {
936 homepage = "https://github.com/python-hyper/hyperlink";
937 license = licenses.mit;
938 description = "A featureful, immutable, and correct URL for Python.";
939 };
940 };
941
942 "hypothesis" = python.mkDerivation {
943 name = "hypothesis-3.57.0";
944 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/d4/77/48d20486e524884ef372fa11c1875f3b67766e5bef3055a6621f6760ce12/hypothesis-3.57.0.tar.gz"; sha256 = "ceb4d9b582184b041adc5647121fbafe3fcf49b7fbd218195d903c3fc6bc7916"; };
945 doCheck = commonDoCheck;
946 buildInputs = commonBuildInputs;
947 propagatedBuildInputs = [
948 self."Faker"
949 self."attrs"
950 self."coverage"
951 self."enum34"
952 self."pytest"
953 self."pytz"
954 ];
955 meta = with pkgs.stdenv.lib; {
956 homepage = "https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python";
957 license = licenses.mpl20;
958 description = "A library for property based testing";
959 };
960 };
961
962 "idna" = python.mkDerivation {
963 name = "idna-2.6";
964 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/f4/bd/0467d62790828c23c47fc1dfa1b1f052b24efdf5290f071c7a91d0d82fd3/idna-2.6.tar.gz"; sha256 = "2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"; };
965 doCheck = commonDoCheck;
966 buildInputs = commonBuildInputs;
967 propagatedBuildInputs = [ ];
968 meta = with pkgs.stdenv.lib; {
969 homepage = "https://github.com/kjd/idna";
970 license = licenses.bsdOriginal;
971 description = "Internationalized Domain Names in Applications (IDNA)";
972 };
973 };
974
975 "incremental" = python.mkDerivation {
976 name = "incremental-17.5.0";
977 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/8f/26/02c4016aa95f45479eea37c90c34f8fab6775732ae62587a874b619ca097/incremental-17.5.0.tar.gz"; sha256 = "7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3"; };
978 doCheck = commonDoCheck;
979 buildInputs = commonBuildInputs;
980 propagatedBuildInputs = [
981 self."Twisted"
982 self."click"
983 ];
984 meta = with pkgs.stdenv.lib; {
985 homepage = "https://github.com/twisted/incremental";
986 license = licenses.mit;
987 description = "UNKNOWN";
988 };
989 };
990
991 "inflection" = python.mkDerivation {
992 name = "inflection-0.3.1";
993 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/d5/35/a6eb45b4e2356fe688b21570864d4aa0d0a880ce387defe9c589112077f8/inflection-0.3.1.tar.gz"; sha256 = "18ea7fb7a7d152853386523def08736aa8c32636b047ade55f7578c4edeb16ca"; };
994 doCheck = commonDoCheck;
995 buildInputs = commonBuildInputs;
996 propagatedBuildInputs = [ ];
997 meta = with pkgs.stdenv.lib; {
998 homepage = "http://github.com/jpvanhal/inflection";
999 license = licenses.mit;
1000 description = "A port of Ruby on Rails inflector to Python";
1001 };
1002 };
1003
1004 "ipaddress" = python.mkDerivation {
1005 name = "ipaddress-1.0.22";
1006 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/97/8d/77b8cedcfbf93676148518036c6b1ce7f8e14bf07e95d7fd4ddcb8cc052f/ipaddress-1.0.22.tar.gz"; sha256 = "b146c751ea45cad6188dd6cf2d9b757f6f4f8d6ffb96a023e6f2e26eea02a72c"; };
1007 doCheck = commonDoCheck;
1008 buildInputs = commonBuildInputs;
1009 propagatedBuildInputs = [ ];
1010 meta = with pkgs.stdenv.lib; {
1011 homepage = "https://github.com/phihag/ipaddress";
1012 license = licenses.psfl;
1013 description = "IPv4/IPv6 manipulation library";
1014 };
1015 };
1016
1017 "itsdangerous" = python.mkDerivation {
1018 name = "itsdangerous-0.24";
1019 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz"; sha256 = "cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519"; };
1020 doCheck = commonDoCheck;
1021 buildInputs = commonBuildInputs;
1022 propagatedBuildInputs = [ ];
1023 meta = with pkgs.stdenv.lib; {
1024 homepage = "http://github.com/mitsuhiko/itsdangerous";
1025 license = licenses.bsdOriginal;
1026 description = "Various helpers to pass trusted data to untrusted environments and back.";
1027 };
1028 };
1029
1030 "m2r" = python.mkDerivation {
1031 name = "m2r-0.1.14";
1032 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/af/5d/23146b34b38632a04ec6a176e8d2b7d138dce373a1af5efd91ea1515d858/m2r-0.1.14.tar.gz"; sha256 = "a14635cdeedb125f0f85e014eb5898fd634e2da358a160c124818e9c9f851add"; };
1033 doCheck = commonDoCheck;
1034 buildInputs = commonBuildInputs;
1035 propagatedBuildInputs = [
1036 self."docutils"
1037 self."mistune"
1038 ];
1039 meta = with pkgs.stdenv.lib; {
1040 homepage = "https://github.com/miyakogi/m2r";
1041 license = licenses.mit;
1042 description = "Markdown and reStructuredText in a single file.";
1043 };
1044 };
1045
1046 "marshmallow" = python.mkDerivation {
1047 name = "marshmallow-2.15.3";
1048 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/97/e5/03fdf9acc5f8524a95563e7aae15e7a295fc869f4ab1671cb38cb439606e/marshmallow-2.15.3.tar.gz"; sha256 = "171f409d48b44786b7df2793cbd7f1a9062f0fe2c14d547da536b5010f671ade"; };
1049 doCheck = commonDoCheck;
1050 buildInputs = commonBuildInputs;
1051 propagatedBuildInputs = [
1052 self."python-dateutil"
1053 ];
1054 meta = with pkgs.stdenv.lib; {
1055 homepage = "https://github.com/marshmallow-code/marshmallow";
1056 license = licenses.mit;
1057 description = "A lightweight library for converting complex datatypes to and from native Python datatypes.";
1058 };
1059 };
1060
1061 "marshmallow-sqlalchemy" = python.mkDerivation {
1062 name = "marshmallow-sqlalchemy-0.14.0";
1063 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/79/e3/b55e62620d975e8b62b58674cad7c774c3425790745137b2771f5ed18bc3/marshmallow-sqlalchemy-0.14.0.tar.gz"; sha256 = "32ff19350a8892b3e8dc954eeeac796576bb89356512f9e1ccd33da63f856930"; };
1064 doCheck = commonDoCheck;
1065 buildInputs = commonBuildInputs;
1066 propagatedBuildInputs = [
1067 self."SQLAlchemy"
1068 self."marshmallow"
1069 ];
1070 meta = with pkgs.stdenv.lib; {
1071 homepage = "https://github.com/marshmallow-code/marshmallow-sqlalchemy";
1072 license = licenses.mit;
1073 description = "SQLAlchemy integration with the marshmallow (de)serialization library";
1074 };
1075 };
1076
1077 "mistune" = python.mkDerivation {
1078 name = "mistune-0.8.3";
1079 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/9d/be/e06d4346cc608a01dec6bf770d7d0303a4fd6db588b318ced18f5f257145/mistune-0.8.3.tar.gz"; sha256 = "bc10c33bfdcaa4e749b779f62f60d6e12f8215c46a292d05e486b869ae306619"; };
1080 doCheck = commonDoCheck;
1081 buildInputs = commonBuildInputs;
1082 propagatedBuildInputs = [ ];
1083 meta = with pkgs.stdenv.lib; {
1084 homepage = "https://github.com/lepture/mistune";
1085 license = licenses.bsdOriginal;
1086 description = "The fastest markdown parser in pure Python";
1087 };
1088 };
1089
1090 "mock" = python.mkDerivation {
1091 name = "mock-2.0.0";
1092 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/0c/53/014354fc93c591ccc4abff12c473ad565a2eb24dcd82490fae33dbf2539f/mock-2.0.0.tar.gz"; sha256 = "b158b6df76edd239b8208d481dc46b6afd45a846b7812ff0ce58971cf5bc8bba"; };
1093 doCheck = commonDoCheck;
1094 buildInputs = commonBuildInputs;
1095 propagatedBuildInputs = [
1096 self."Jinja2"
1097 self."Pygments"
1098 self."funcsigs"
1099 self."pbr"
1100 self."six"
1101 ];
1102 meta = with pkgs.stdenv.lib; {
1103 homepage = "https://github.com/testing-cabal/mock";
1104 license = licenses.bsdOriginal;
1105 description = "Rolling backport of unittest.mock for all Pythons";
1106 };
1107 };
1108
1109 "more-itertools" = python.mkDerivation {
1110 name = "more-itertools-4.2.0";
1111 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/c0/2f/6773347277d76c5ade4414a6c3f785ef27e7f5c4b0870ec7e888e66a8d83/more-itertools-4.2.0.tar.gz"; sha256 = "2b6b9893337bfd9166bee6a62c2b0c9fe7735dcf85948b387ec8cba30e85d8e8"; };
1112 doCheck = commonDoCheck;
1113 buildInputs = commonBuildInputs;
1114 propagatedBuildInputs = [
1115 self."six"
1116 ];
1117 meta = with pkgs.stdenv.lib; {
1118 homepage = "https://github.com/erikrose/more-itertools";
1119 license = licenses.mit;
1120 description = "More routines for operating on iterables, beyond itertools";
1121 };
1122 };
1123
1124 "nplusone" = python.mkDerivation {
1125 name = "nplusone-1.0.0";
1126 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/26/da/663f551cdda166eaf75a564f64d022c6eb03c710ba83c3fb0f4ac664ebde/nplusone-1.0.0.tar.gz"; sha256 = "1726c0a10c0aa7eabb04e24db2882ff97b6b7ee29d729a8d97dcbd12ef5a5651"; };
1127 doCheck = commonDoCheck;
1128 buildInputs = commonBuildInputs;
1129 propagatedBuildInputs = [
1130 self."blinker"
1131 self."six"
1132 ];
1133 meta = with pkgs.stdenv.lib; {
1134 homepage = "https://github.com/jmcarp/nplusone";
1135 license = "Copyright 2016 Joshua Carp";
1136 description = "Detecting the n+1 queries problem in Python";
1137 };
1138 };
1139
1140 "packaging" = python.mkDerivation {
1141 name = "packaging-17.1";
1142 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/77/32/439f47be99809c12ef2da8b60a2c47987786d2c6c9205549dd6ef95df8bd/packaging-17.1.tar.gz"; sha256 = "f019b770dd64e585a99714f1fd5e01c7a8f11b45635aa953fd41c689a657375b"; };
1143 doCheck = commonDoCheck;
1144 buildInputs = commonBuildInputs;
1145 propagatedBuildInputs = [
1146 self."pyparsing"
1147 self."six"
1148 ];
1149 meta = with pkgs.stdenv.lib; {
1150 homepage = "https://github.com/pypa/packaging";
1151 license = licenses.bsdOriginal;
1152 description = "Core utilities for Python packages";
1153 };
1154 };
1155
1156 "passlib" = python.mkDerivation {
1157 name = "passlib-1.7.1";
1158 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/25/4b/6fbfc66aabb3017cd8c3bd97b37f769d7503ead2899bf76e570eb91270de/passlib-1.7.1.tar.gz"; sha256 = "3d948f64138c25633613f303bcc471126eae67c04d5e3f6b7b8ce6242f8653e0"; };
1159 doCheck = commonDoCheck;
1160 buildInputs = commonBuildInputs;
1161 propagatedBuildInputs = [
1162 self."bcrypt"
1163 self."cryptography"
1164 ];
1165 meta = with pkgs.stdenv.lib; {
1166 homepage = "https://bitbucket.org/ecollins/passlib";
1167 license = licenses.bsdOriginal;
1168 description = "comprehensive password hashing framework supporting over 30 schemes";
1169 };
1170 };
1171
1172 "pbr" = python.mkDerivation {
1173 name = "pbr-4.0.4";
1174 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/cd/9f/8f14a51b522c47a315dd969fbdf39233e41f0bfa8b996b4ff0ad852ff43d/pbr-4.0.4.tar.gz"; sha256 = "a9c27eb8f0e24e786e544b2dbaedb729c9d8546342b5a6818d8eda098ad4340d"; };
1175 doCheck = commonDoCheck;
1176 buildInputs = commonBuildInputs;
1177 propagatedBuildInputs = [ ];
1178 meta = with pkgs.stdenv.lib; {
1179 homepage = "https://docs.openstack.org/pbr/latest/";
1180 license = "License :: OSI Approved :: Apache Software License";
1181 description = "Python Build Reasonableness";
1182 };
1183 };
1184
1185 "pgcli" = python.mkDerivation {
1186 name = "pgcli-1.9.1";
1187 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/75/3c/901421409520be8145c08d1a24c8e9717f6df871299045602421f1e9436b/pgcli-1.9.1.tar.gz"; sha256 = "8274dca13407b2904453018488d02302bce01df21ac3f3bf30a21b1880ce0ce8"; };
1188 doCheck = commonDoCheck;
1189 buildInputs = commonBuildInputs;
1190 propagatedBuildInputs = [
1191 self."Pygments"
1192 self."cli-helpers"
1193 self."click"
1194 self."configobj"
1195 self."humanize"
1196 self."pgspecial"
1197 self."prompt-toolkit"
1198 self."psycopg2"
1199 self."setproctitle"
1200 self."sqlparse"
1201 ];
1202 meta = with pkgs.stdenv.lib; {
1203 homepage = "http://pgcli.com";
1204 license = licenses.bsdOriginal;
1205 description = "CLI for Postgres Database. With auto-completion and syntax highlighting.";
1206 };
1207 };
1208
1209 "pgspecial" = python.mkDerivation {
1210 name = "pgspecial-1.11.0";
1211 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/0f/07/847815d9effa367ac045a8d8b2ef62058a348f3dea41b98f98d1a33c71f9/pgspecial-1.11.0.tar.gz"; sha256 = "a4511ba8b65b1f68eb2f8242f052b431534aa4b343788d17aa58cdd864d18d7c"; };
1212 doCheck = commonDoCheck;
1213 buildInputs = commonBuildInputs;
1214 propagatedBuildInputs = [
1215 self."click"
1216 self."sqlparse"
1217 ];
1218 meta = with pkgs.stdenv.lib; {
1219 homepage = "https://www.dbcli.com";
1220 license = licenses.bsdOriginal;
1221 description = "Meta-commands handler for Postgres Database.";
1222 };
1223 };
1224
1225 "pluggy" = python.mkDerivation {
1226 name = "pluggy-0.6.0";
1227 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/11/bf/cbeb8cdfaffa9f2ea154a30ae31a9d04a1209312e2919138b4171a1f8199/pluggy-0.6.0.tar.gz"; sha256 = "7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff"; };
1228 doCheck = commonDoCheck;
1229 buildInputs = commonBuildInputs;
1230 propagatedBuildInputs = [ ];
1231 meta = with pkgs.stdenv.lib; {
1232 homepage = "https://github.com/pytest-dev/pluggy";
1233 license = licenses.mit;
1234 description = "plugin and hook calling mechanisms for python";
1235 };
1236 };
1237
1238 "prompt-toolkit" = python.mkDerivation {
1239 name = "prompt-toolkit-1.0.15";
1240 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/8a/ad/cf6b128866e78ad6d7f1dc5b7f99885fb813393d9860778b2984582e81b5/prompt_toolkit-1.0.15.tar.gz"; sha256 = "858588f1983ca497f1cf4ffde01d978a3ea02b01c8a26a8bbc5cd2e66d816917"; };
1241 doCheck = commonDoCheck;
1242 buildInputs = commonBuildInputs;
1243 propagatedBuildInputs = [
1244 self."six"
1245 self."wcwidth"
1246 ];
1247 meta = with pkgs.stdenv.lib; {
1248 homepage = "https://github.com/jonathanslenders/python-prompt-toolkit";
1249 license = licenses.bsdOriginal;
1250 description = "Library for building powerful interactive command lines in Python";
1251 };
1252 };
1253
1254 "psycopg2" = python.mkDerivation {
1255 name = "psycopg2-2.7.4";
1256 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/74/83/51580322ed0e82cba7ad8e0af590b8fb2cf11bd5aaa1ed872661bd36f462/psycopg2-2.7.4.tar.gz"; sha256 = "8bf51191d60f6987482ef0cfe8511bbf4877a5aa7f313d7b488b53189cf26209"; };
1257 doCheck = commonDoCheck;
1258 buildInputs = commonBuildInputs;
1259 propagatedBuildInputs = [ ];
1260 meta = with pkgs.stdenv.lib; {
1261 homepage = "http://initd.org/psycopg/";
1262 license = licenses.lgpl2;
1263 description = "psycopg2 - Python-PostgreSQL Database Adapter";
1264 };
1265 };
1266
1267 "py" = python.mkDerivation {
1268 name = "py-1.5.3";
1269 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/f7/84/b4c6e84672c4ceb94f727f3da8344037b62cee960d80e999b1cd9b832d83/py-1.5.3.tar.gz"; sha256 = "29c9fab495d7528e80ba1e343b958684f4ace687327e6f789a94bf3d1915f881"; };
1270 doCheck = commonDoCheck;
1271 buildInputs = commonBuildInputs;
1272 propagatedBuildInputs = [ ];
1273 meta = with pkgs.stdenv.lib; {
1274 homepage = "http://py.readthedocs.io/";
1275 license = licenses.mit;
1276 description = "library with cross-python path, ini-parsing, io, code, log facilities";
1277 };
1278 };
1279
1280 "pyOpenSSL" = python.mkDerivation {
1281 name = "pyOpenSSL-18.0.0";
1282 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/9b/7c/ee600b2a9304d260d96044ab5c5e57aa489755b92bbeb4c0803f9504f480/pyOpenSSL-18.0.0.tar.gz"; sha256 = "6488f1423b00f73b7ad5167885312bb0ce410d3312eb212393795b53c8caa580"; };
1283 doCheck = commonDoCheck;
1284 buildInputs = commonBuildInputs;
1285 propagatedBuildInputs = [
1286 self."cryptography"
1287 self."pytest"
1288 self."six"
1289 ];
1290 meta = with pkgs.stdenv.lib; {
1291 homepage = "https://pyopenssl.org/";
1292 license = licenses.asl20;
1293 description = "Python wrapper module around the OpenSSL library";
1294 };
1295 };
1296
1297 "pyasn1" = python.mkDerivation {
1298 name = "pyasn1-0.4.3";
1299 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/0d/33/3466a3210321a02040e3ab2cd1ffc6f44664301a5d650a7e44be1dc341f2/pyasn1-0.4.3.tar.gz"; sha256 = "fb81622d8f3509f0026b0683fe90fea27be7284d3826a5f2edf97f69151ab0fc"; };
1300 doCheck = commonDoCheck;
1301 buildInputs = commonBuildInputs;
1302 propagatedBuildInputs = [ ];
1303 meta = with pkgs.stdenv.lib; {
1304 homepage = "https://github.com/etingof/pyasn1";
1305 license = licenses.bsdOriginal;
1306 description = "ASN.1 types and codecs";
1307 };
1308 };
1309
1310 "pyasn1-modules" = python.mkDerivation {
1311 name = "pyasn1-modules-0.2.1";
1312 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/ab/76/36ab0e099e6bd27ed95b70c2c86c326d3affa59b9b535c63a2f892ac9f45/pyasn1-modules-0.2.1.tar.gz"; sha256 = "af00ea8f2022b6287dc375b2c70f31ab5af83989fc6fe9eacd4976ce26cd7ccc"; };
1313 doCheck = commonDoCheck;
1314 buildInputs = commonBuildInputs;
1315 propagatedBuildInputs = [
1316 self."pyasn1"
1317 ];
1318 meta = with pkgs.stdenv.lib; {
1319 homepage = "https://github.com/etingof/pyasn1-modules";
1320 license = licenses.bsdOriginal;
1321 description = "A collection of ASN.1-based protocols modules.";
1322 };
1323 };
1324
1325 "pycparser" = python.mkDerivation {
1326 name = "pycparser-2.18";
1327 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/8c/2d/aad7f16146f4197a11f8e91fb81df177adcc2073d36a17b1491fd09df6ed/pycparser-2.18.tar.gz"; sha256 = "99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226"; };
1328 doCheck = commonDoCheck;
1329 buildInputs = commonBuildInputs;
1330 propagatedBuildInputs = [ ];
1331 meta = with pkgs.stdenv.lib; {
1332 homepage = "https://github.com/eliben/pycparser";
1333 license = licenses.bsdOriginal;
1334 description = "C parser in Python";
1335 };
1336 };
1337
1338 "pydot" = python.mkDerivation {
1339 name = "pydot-1.2.4";
1340 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/c3/f1/e61d6dfe6c1768ed2529761a68f70939e2569da043e9f15a8d84bf56cadf/pydot-1.2.4.tar.gz"; sha256 = "92d2e2d15531d00710f2d6fb5540d2acabc5399d464f2f20d5d21073af241eb6"; };
1341 doCheck = commonDoCheck;
1342 buildInputs = commonBuildInputs;
1343 propagatedBuildInputs = [
1344 self."pyparsing"
1345 ];
1346 meta = with pkgs.stdenv.lib; {
1347 homepage = "https://github.com/erocarrera/pydot";
1348 license = licenses.mit;
1349 description = "Python interface to Graphviz's Dot";
1350 };
1351 };
1352
1353 "pyparsing" = python.mkDerivation {
1354 name = "pyparsing-2.2.0";
1355 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/3c/ec/a94f8cf7274ea60b5413df054f82a8980523efd712ec55a59e7c3357cf7c/pyparsing-2.2.0.tar.gz"; sha256 = "0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04"; };
1356 doCheck = commonDoCheck;
1357 buildInputs = commonBuildInputs;
1358 propagatedBuildInputs = [ ];
1359 meta = with pkgs.stdenv.lib; {
1360 homepage = "http://pyparsing.wikispaces.com/";
1361 license = licenses.mit;
1362 description = "Python parsing module";
1363 };
1364 };
1365
1366 "pytest" = python.mkDerivation {
1367 name = "pytest-3.6.1";
1368 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/46/0e/d06d37d546bd181358eb3fb24b9c097609dae9a8cc0ed5756eefddd47841/pytest-3.6.1.tar.gz"; sha256 = "32c49a69566aa7c333188149ad48b58ac11a426d5352ea3d8f6ce843f88199cb"; };
1369 doCheck = commonDoCheck;
1370 buildInputs = commonBuildInputs;
1371 propagatedBuildInputs = [
1372 self."atomicwrites"
1373 self."attrs"
1374 self."colorama"
1375 self."funcsigs"
1376 self."more-itertools"
1377 self."pluggy"
1378 self."py"
1379 self."six"
1380 ];
1381 meta = with pkgs.stdenv.lib; {
1382 homepage = "http://pytest.org";
1383 license = licenses.mit;
1384 description = "pytest: simple powerful testing with Python";
1385 };
1386 };
1387
1388 "pytest-factoryboy" = python.mkDerivation {
1389 name = "pytest-factoryboy-2.0.1";
1390 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/80/15/294f84a4d3159f6be5524b8f02b70aae82c86e2341c27ac00fdd26b0d44f/pytest-factoryboy-2.0.1.tar.gz"; sha256 = "ad438d191d2b2a0f26956d437c1963875db573147a84ffd85d7bbeaefae22458"; };
1391 doCheck = commonDoCheck;
1392 buildInputs = commonBuildInputs;
1393 propagatedBuildInputs = [
1394 self."factory-boy"
1395 self."inflection"
1396 self."pytest"
1397 ];
1398 meta = with pkgs.stdenv.lib; {
1399 homepage = "https://github.com/pytest-dev/pytest-factoryboy";
1400 license = licenses.mit;
1401 description = "Factory Boy support for pytest.";
1402 };
1403 };
1404
1405 "pytest-runner" = python.mkDerivation {
1406 name = "pytest-runner-4.2";
1407 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/9e/b7/fe6e8f87f9a756fd06722216f1b6698ccba4d269eac6329d9f0c441d0f93/pytest-runner-4.2.tar.gz"; sha256 = "d23f117be39919f00dd91bffeb4f15e031ec797501b717a245e377aee0f577be"; };
1408 doCheck = commonDoCheck;
1409 buildInputs = commonBuildInputs;
1410 propagatedBuildInputs = [
1411 self."pytest"
1412 ];
1413 meta = with pkgs.stdenv.lib; {
1414 homepage = "https://github.com/pytest-dev/pytest-runner";
1415 license = licenses.mit;
1416 description = "Invoke py.test as distutils command with dependency resolution";
1417 };
1418 };
1419
1420 "python-dateutil" = python.mkDerivation {
1421 name = "python-dateutil-2.7.3";
1422 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/a0/b0/a4e3241d2dee665fea11baec21389aec6886655cd4db7647ddf96c3fad15/python-dateutil-2.7.3.tar.gz"; sha256 = "e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8"; };
1423 doCheck = commonDoCheck;
1424 buildInputs = commonBuildInputs;
1425 propagatedBuildInputs = [
1426 self."six"
1427 ];
1428 meta = with pkgs.stdenv.lib; {
1429 homepage = "https://dateutil.readthedocs.io";
1430 license = licenses.bsdOriginal;
1431 description = "Extensions to the standard Python datetime module";
1432 };
1433 };
1434
1435 "python-editor" = python.mkDerivation {
1436 name = "python-editor-1.0.3";
1437 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/65/1e/adf6e000ea5dc909aa420352d6ba37f16434c8a3c2fa030445411a1ed545/python-editor-1.0.3.tar.gz"; sha256 = "a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565"; };
1438 doCheck = commonDoCheck;
1439 buildInputs = commonBuildInputs;
1440 propagatedBuildInputs = [ ];
1441 meta = with pkgs.stdenv.lib; {
1442 homepage = "https://github.com/fmoo/python-editor";
1443 license = "License :: OSI Approved :: Apache Software License";
1444 description = "Programmatically open an editor, capture the result.";
1445 };
1446 };
1447
1448 "python-slugify" = python.mkDerivation {
1449 name = "python-slugify-1.2.5";
1450 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/70/c1/98bfb2c981787dcec4613c5da2c17d6f54613935b0e3a877e87a9fa974e4/python-slugify-1.2.5.tar.gz"; sha256 = "5dbb360b882b2dabe0471a1a92f604504d83c2a73c71f2098d004ab62e695534"; };
1451 doCheck = commonDoCheck;
1452 buildInputs = commonBuildInputs;
1453 propagatedBuildInputs = [
1454 self."Unidecode"
1455 ];
1456 meta = with pkgs.stdenv.lib; {
1457 homepage = "https://github.com/un33k/python-slugify";
1458 license = licenses.mit;
1459 description = "A Python Slugify application that handles Unicode";
1460 };
1461 };
1462
1463 "pytz" = python.mkDerivation {
1464 name = "pytz-2018.4";
1465 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/10/76/52efda4ef98e7544321fd8d5d512e11739c1df18b0649551aeccfb1c8376/pytz-2018.4.tar.gz"; sha256 = "c06425302f2cf668f1bba7a0a03f3c1d34d4ebeef2c72003da308b3947c7f749"; };
1466 doCheck = commonDoCheck;
1467 buildInputs = commonBuildInputs;
1468 propagatedBuildInputs = [ ];
1469 meta = with pkgs.stdenv.lib; {
1470 homepage = "http://pythonhosted.org/pytz";
1471 license = licenses.mit;
1472 description = "World timezone definitions, modern and historical";
1473 };
1474 };
1475
1476 "requests" = python.mkDerivation {
1477 name = "requests-2.18.4";
1478 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/b0/e1/eab4fc3752e3d240468a8c0b284607899d2fbfb236a56b7377a329aa8d09/requests-2.18.4.tar.gz"; sha256 = "9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"; };
1479 doCheck = commonDoCheck;
1480 buildInputs = commonBuildInputs;
1481 propagatedBuildInputs = [
1482 self."certifi"
1483 self."chardet"
1484 self."cryptography"
1485 self."idna"
1486 self."pyOpenSSL"
1487 self."urllib3"
1488 ];
1489 meta = with pkgs.stdenv.lib; {
1490 homepage = "http://python-requests.org";
1491 license = licenses.asl20;
1492 description = "Python HTTP for Humans.";
1493 };
1494 };
1495
1496 "responses" = python.mkDerivation {
1497 name = "responses-0.9.0";
1498 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/67/cb/0a5390f7b8944cfa7e4079a839adba964d858d27a60af7b2683248148339/responses-0.9.0.tar.gz"; sha256 = "c6082710f4abfb60793899ca5f21e7ceb25aabf321560cc0726f8b59006811c9"; };
1499 doCheck = commonDoCheck;
1500 buildInputs = commonBuildInputs;
1501 propagatedBuildInputs = [
1502 self."cookies"
1503 self."coverage"
1504 self."mock"
1505 self."pytest"
1506 self."requests"
1507 self."six"
1508 ];
1509 meta = with pkgs.stdenv.lib; {
1510 homepage = "https://github.com/getsentry/responses";
1511 license = licenses.asl20;
1512 description = "A utility library for mocking out the `requests` Python library.";
1513 };
1514 };
1515
1516 "restkit" = python.mkDerivation {
1517 name = "restkit-4.2.2";
1518 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/76/b9/d90120add1be718f853c53008cf5b62d74abad1d32bd1e7097dd913ae053/restkit-4.2.2.tar.gz"; sha256 = "c0bda8eb7c643b5e818b612dab49121393abc8589c6cbe9b84085079d598599d"; };
1519 doCheck = commonDoCheck;
1520 buildInputs = commonBuildInputs;
1521 propagatedBuildInputs = [
1522 self."http-parser"
1523 self."socketpool"
1524 ];
1525 meta = with pkgs.stdenv.lib; {
1526 homepage = "http://benoitc.github.com/restkit";
1527 license = licenses.mit;
1528 description = "Python REST kit";
1529 };
1530 };
1531
1532 "service-identity" = python.mkDerivation {
1533 name = "service-identity-17.0.0";
1534 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/de/2a/cab6e30be82c8fcd2339ef618036720eda954cf05daef514e386661c9221/service_identity-17.0.0.tar.gz"; sha256 = "4001fbb3da19e0df22c47a06d29681a398473af4aa9d745eca525b3b2c2302ab"; };
1535 doCheck = commonDoCheck;
1536 buildInputs = commonBuildInputs;
1537 propagatedBuildInputs = [
1538 self."attrs"
1539 self."idna"
1540 self."pyOpenSSL"
1541 self."pyasn1"
1542 self."pyasn1-modules"
1543 ];
1544 meta = with pkgs.stdenv.lib; {
1545 homepage = "https://service-identity.readthedocs.io/";
1546 license = licenses.mit;
1547 description = "Service identity verification for pyOpenSSL.";
1548 };
1549 };
1550
1551 "setproctitle" = python.mkDerivation {
1552 name = "setproctitle-1.1.10";
1553 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/5a/0d/dc0d2234aacba6cf1a729964383e3452c52096dc695581248b548786f2b3/setproctitle-1.1.10.tar.gz"; sha256 = "6283b7a58477dd8478fbb9e76defb37968ee4ba47b05ec1c053cb39638bd7398"; };
1554 doCheck = commonDoCheck;
1555 buildInputs = commonBuildInputs;
1556 propagatedBuildInputs = [ ];
1557 meta = with pkgs.stdenv.lib; {
1558 homepage = "https://github.com/dvarrazzo/py-setproctitle";
1559 license = licenses.bsdOriginal;
1560 description = "A Python module to customize the process title";
1561 };
1562 };
1563
1564 "setuptools-scm" = python.mkDerivation {
1565 name = "setuptools-scm-2.1.0";
1566 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/e5/62/f9e1ac314464eb5945c97542acb6bf6f3381dfa5d7a658de7730c36f31a1/setuptools_scm-2.1.0.tar.gz"; sha256 = "a767141fecdab1c0b3c8e4c788ac912d7c94a0d6c452d40777ba84f918316379"; };
1567 doCheck = commonDoCheck;
1568 buildInputs = commonBuildInputs;
1569 propagatedBuildInputs = [ ];
1570 meta = with pkgs.stdenv.lib; {
1571 homepage = "https://github.com/pypa/setuptools_scm/";
1572 license = licenses.mit;
1573 description = "the blessed package to manage your versions by scm tags";
1574 };
1575 };
1576
1577 "six" = python.mkDerivation {
1578 name = "six-1.11.0";
1579 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz"; sha256 = "70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"; };
1580 doCheck = commonDoCheck;
1581 buildInputs = commonBuildInputs;
1582 propagatedBuildInputs = [ ];
1583 meta = with pkgs.stdenv.lib; {
1584 homepage = "http://pypi.python.org/pypi/six/";
1585 license = licenses.mit;
1586 description = "Python 2 and 3 compatibility utilities";
1587 };
1588 };
1589
1590 "socketpool" = python.mkDerivation {
1591 name = "socketpool-0.5.3";
1592 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/d1/39/fae99a735227234ffec389b252c6de2bc7816bf627f56b4c558dc46c85aa/socketpool-0.5.3.tar.gz"; sha256 = "a06733434a56c4b60b8fcaa168102d2386253d36425804d55532a6bbbda6e2ec"; };
1593 doCheck = commonDoCheck;
1594 buildInputs = commonBuildInputs;
1595 propagatedBuildInputs = [ ];
1596 meta = with pkgs.stdenv.lib; {
1597 homepage = "http://github.com/benoitc/socketpool";
1598 license = licenses.mit;
1599 description = "Python socket pool";
1600 };
1601 };
1602
1603 "speaklater" = python.mkDerivation {
1604 name = "speaklater-1.3";
1605 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/11/92/5ae1effe0ccb8561c034a0111d53c8788660ddb7ed4992f0da1bb5c525e5/speaklater-1.3.tar.gz"; sha256 = "59fea336d0eed38c1f0bf3181ee1222d0ef45f3a9dd34ebe65e6bfffdd6a65a9"; };
1606 doCheck = commonDoCheck;
1607 buildInputs = commonBuildInputs;
1608 propagatedBuildInputs = [ ];
1609 meta = with pkgs.stdenv.lib; {
1610 homepage = "http://github.com/mitsuhiko/speaklater";
1611 license = licenses.bsdOriginal;
1612 description = "implements a lazy string for python useful for use with gettext";
1613 };
1614 };
1615
1616 "sqlalchemy-schemadisplay" = python.mkDerivation {
1617 name = "sqlalchemy-schemadisplay-1.3";
1618 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/ac/6a/de5911b2837278f3cf89b99b0fd94461f789b8f083537ff14ff9aa6d3397/sqlalchemy_schemadisplay-1.3.tar.gz"; sha256 = "0a9f26d77be9d92c9564d87cc17668fe141a816036c5f5d7c8cb053b253957e0"; };
1619 doCheck = commonDoCheck;
1620 buildInputs = commonBuildInputs;
1621 propagatedBuildInputs = [
1622 self."pydot"
1623 ];
1624 meta = with pkgs.stdenv.lib; {
1625 homepage = "https://github.com/fschulze/sqlalchemy_schemadisplay";
1626 license = licenses.mit;
1627 description = "Turn SQLAlchemy DB Model into a graph";
1628 };
1629 };
1630
1631 "sqlparse" = python.mkDerivation {
1632 name = "sqlparse-0.2.4";
1633 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/79/3c/2ad76ba49f9e3d88d2b58e135b7821d93741856d1fe49970171f73529303/sqlparse-0.2.4.tar.gz"; sha256 = "ce028444cfab83be538752a2ffdb56bc417b7784ff35bb9a3062413717807dec"; };
1634 doCheck = commonDoCheck;
1635 buildInputs = commonBuildInputs;
1636 propagatedBuildInputs = [ ];
1637 meta = with pkgs.stdenv.lib; {
1638 homepage = "https://github.com/andialbrecht/sqlparse";
1639 license = licenses.bsdOriginal;
1640 description = "Non-validating SQL parser";
1641 };
1642 };
1643
1644 "tabulate" = python.mkDerivation {
1645 name = "tabulate-0.8.2";
1646 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/12/c2/11d6845db5edf1295bc08b2f488cf5937806586afe42936c3f34c097ebdc/tabulate-0.8.2.tar.gz"; sha256 = "e4ca13f26d0a6be2a2915428dc21e732f1e44dad7f76d7030b2ef1ec251cf7f2"; };
1647 doCheck = commonDoCheck;
1648 buildInputs = commonBuildInputs;
1649 propagatedBuildInputs = [
1650 self."wcwidth"
1651 ];
1652 meta = with pkgs.stdenv.lib; {
1653 homepage = "https://bitbucket.org/astanin/python-tabulate";
1654 license = licenses.mit;
1655 description = "Pretty-print tabular data";
1656 };
1657 };
1658
1659 "terminaltables" = python.mkDerivation {
1660 name = "terminaltables-3.1.0";
1661 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/9b/c4/4a21174f32f8a7e1104798c445dacdc1d4df86f2f26722767034e4de4bff/terminaltables-3.1.0.tar.gz"; sha256 = "f3eb0eb92e3833972ac36796293ca0906e998dc3be91fbe1f8615b331b853b81"; };
1662 doCheck = commonDoCheck;
1663 buildInputs = commonBuildInputs;
1664 propagatedBuildInputs = [ ];
1665 meta = with pkgs.stdenv.lib; {
1666 homepage = "https://github.com/Robpol86/terminaltables";
1667 license = licenses.mit;
1668 description = "Generate simple tables in terminals from a nested list of strings.";
1669 };
1670 };
1671
1672 "text-unidecode" = python.mkDerivation {
1673 name = "text-unidecode-1.2";
1674 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/f0/a2/40adaae7cbdd007fb12777e550b5ce344b56189921b9f70f37084c021ca4/text-unidecode-1.2.tar.gz"; sha256 = "5a1375bb2ba7968740508ae38d92e1f889a0832913cb1c447d5e2046061a396d"; };
1675 doCheck = commonDoCheck;
1676 buildInputs = commonBuildInputs;
1677 propagatedBuildInputs = [ ];
1678 meta = with pkgs.stdenv.lib; {
1679 homepage = "https://github.com/kmike/text-unidecode/";
1680 license = licenses.artistic2;
1681 description = "The most basic Text::Unidecode port";
1682 };
1683 };
1684
1685 "tqdm" = python.mkDerivation {
1686 name = "tqdm-4.23.4";
1687 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/41/61/d36ff28878ca73bb3932dfa6bab36ff872e6dac18c9ace328879b1798279/tqdm-4.23.4.tar.gz"; sha256 = "77b8424d41b31e68f437c6dd9cd567aebc9a860507cb42fbd880a5f822d966fe"; };
1688 doCheck = commonDoCheck;
1689 buildInputs = commonBuildInputs;
1690 propagatedBuildInputs = [ ];
1691 meta = with pkgs.stdenv.lib; {
1692 homepage = "https://github.com/tqdm/tqdm";
1693 license = licenses.mit;
1694 description = "Fast, Extensible Progress Meter";
1695 };
1696 };
1697
1698 "txaio" = python.mkDerivation {
1699 name = "txaio-2.10.0";
1700 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/b8/87/efcae4040c2a0af9c871116a6dbf02ee582b396e6de3797fb30cdcc4a7e4/txaio-2.10.0.tar.gz"; sha256 = "4797f9f6a9866fe887c96abc0110a226dd5744c894dc3630870542597ad30853"; };
1701 doCheck = commonDoCheck;
1702 buildInputs = commonBuildInputs;
1703 propagatedBuildInputs = [
1704 self."Twisted"
1705 self."mock"
1706 self."pytest"
1707 self."six"
1708 self."zope.interface"
1709 ];
1710 meta = with pkgs.stdenv.lib; {
1711 homepage = "https://github.com/crossbario/txaio";
1712 license = licenses.mit;
1713 description = "Compatibility API between asyncio/Twisted/Trollius";
1714 };
1715 };
1716
1717 "urllib3" = python.mkDerivation {
1718 name = "urllib3-1.22";
1719 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/ee/11/7c59620aceedcc1ef65e156cc5ce5a24ef87be4107c2b74458464e437a5d/urllib3-1.22.tar.gz"; sha256 = "cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"; };
1720 doCheck = commonDoCheck;
1721 buildInputs = commonBuildInputs;
1722 propagatedBuildInputs = [
1723 self."certifi"
1724 self."cryptography"
1725 self."idna"
1726 self."ipaddress"
1727 self."pyOpenSSL"
1728 ];
1729 meta = with pkgs.stdenv.lib; {
1730 homepage = "https://urllib3.readthedocs.io/";
1731 license = licenses.mit;
1732 description = "HTTP library with thread-safe connection pooling, file post, and more.";
1733 };
1734 };
1735
1736 "wcwidth" = python.mkDerivation {
1737 name = "wcwidth-0.1.7";
1738 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/55/11/e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495/wcwidth-0.1.7.tar.gz"; sha256 = "3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e"; };
1739 doCheck = commonDoCheck;
1740 buildInputs = commonBuildInputs;
1741 propagatedBuildInputs = [ ];
1742 meta = with pkgs.stdenv.lib; {
1743 homepage = "https://github.com/jquast/wcwidth";
1744 license = licenses.mit;
1745 description = "Measures number of Terminal column cells of wide-character codes";
1746 };
1747 };
1748
1749 "webargs" = python.mkDerivation {
1750 name = "webargs-3.0.1";
1751 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/15/11/f1adb1253d81375db494378e5c9f74ed057a6453cdf0f75de0aac3454599/webargs-3.0.1.tar.gz"; sha256 = "2482d3cb3a09893f7a1a30fa3bc34f47d78418cd1331de63c106ddd34be5bc72"; };
1752 doCheck = commonDoCheck;
1753 buildInputs = commonBuildInputs;
1754 propagatedBuildInputs = [
1755 self."marshmallow"
1756 ];
1757 meta = with pkgs.stdenv.lib; {
1758 homepage = "https://github.com/sloria/webargs";
1759 license = licenses.mit;
1760 description = "A friendly library for parsing and validating HTTP request arguments, with built-in support for popular web frameworks, including Flask, Django, Bottle, Tornado, Pyramid, webapp2, Falcon, and aiohttp.";
1761 };
1762 };
1763
1764 "websocket-client" = python.mkDerivation {
1765 name = "websocket-client-0.48.0";
1766 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/28/85/df04ec21c622728316b591c2852fd20a0e74324eeb6ca26f351844ba815f/websocket_client-0.48.0.tar.gz"; sha256 = "18f1170e6a1b5463986739d9fd45c4308b0d025c1b2f9b88788d8f69e8a5eb4a"; };
1767 doCheck = commonDoCheck;
1768 buildInputs = commonBuildInputs;
1769 propagatedBuildInputs = [
1770 self."six"
1771 ];
1772 meta = with pkgs.stdenv.lib; {
1773 homepage = "https://github.com/websocket-client/websocket-client.git";
1774 license = licenses.lgpl2;
1775 description = "WebSocket client for python. hybi13 is supported.";
1776 };
1777 };
1778
1779 "zope.interface" = python.mkDerivation {
1780 name = "zope.interface-4.5.0";
1781 src = pkgs.fetchurl { url = "https://files.pythonhosted.org/packages/ac/8a/657532df378c2cd2a1fe6b12be3b4097521570769d4852ec02c24bd3594e/zope.interface-4.5.0.tar.gz"; sha256 = "57c38470d9f57e37afb460c399eb254e7193ac7fb8042bd09bdc001981a9c74c"; };
1782 doCheck = commonDoCheck;
1783 buildInputs = commonBuildInputs;
1784 propagatedBuildInputs = [
1785 self."coverage"
1786 ];
1787 meta = with pkgs.stdenv.lib; {
1788 homepage = "https://github.com/zopefoundation/zope.interface";
1789 license = licenses.zpl21;
1790 description = "Interfaces for Python";
1791 };
1792 };
1793 };
1794 localOverridesFile = ./requirements_override.nix;
1795 overrides = import localOverridesFile { inherit pkgs python; };
1796 commonOverrides = [
1797
1798 ];
1799 allOverrides =
1800 (if (builtins.pathExists localOverridesFile)
1801 then [overrides] else [] ) ++ commonOverrides;
1802
1803 in python.withPackages
1804 (fix' (pkgs.lib.fold
1805 extends
1806 generated
1807 allOverrides
1808 )
1809 )
+0
-111
nix/server/requirements_frozen.txt less more
0 alembic==0.9.9
1 asn1crypto==0.24.0
2 atomicwrites==1.1.5
3 attrs==18.1.0
4 autobahn==18.6.1
5 Automat==0.6.0
6 Babel==2.6.0
7 backports.csv==1.0.6
8 bcrypt==3.1.4
9 beautifulsoup4==4.6.0
10 blinker==1.4
11 certifi==2018.4.16
12 cffi==1.11.5
13 chardet==3.0.4
14 cli-helpers==1.0.2
15 click==6.7
16 colorama==0.3.9
17 configobj==5.0.6
18 constantly==15.1.0
19 cookies==2.2.1
20 couchdbkit==0.6.5
21 coverage==4.5.1
22 cryptography==2.2.2
23 deprecation==2.0.2
24 docutils==0.14
25 enum34==1.1.6
26 factory-boy==2.11.1
27 Faker==0.8.15
28 filedepot==0.5.2
29 filteralchemy==0.1.0
30 Flask==0.12.4
31 Flask-BabelEx==0.9.3
32 Flask-Classful==0.14.1
33 Flask-Login==0.4.1
34 Flask-Mail==0.9.1
35 Flask-Principal==0.4.0
36 Flask-Security==3.0.0
37 Flask-Session==0.3.1
38 Flask-SQLAlchemy==2.3.2
39 Flask-WTF==0.14.2
40 funcsigs==1.0.2
41 http-parser==0.8.3
42 humanize==0.5.1
43 hyperlink==18.0.0
44 hypothesis==3.57.0
45 idna==2.6
46 incremental==17.5.0
47 inflection==0.3.1
48 ipaddress==1.0.22
49 IPy==0.83
50 itsdangerous==0.24
51 Jinja2==2.10
52 m2r==0.1.14
53 Mako==1.0.7
54 MarkupSafe==1.0
55 marshmallow==2.15.3
56 marshmallow-sqlalchemy==0.14.0
57 mistune==0.8.3
58 mock==2.0.0
59 more-itertools==4.2.0
60 nplusone==1.0.0
61 packaging==17.1
62 passlib==1.7.1
63 pbr==4.0.4
64 pgcli==1.9.1
65 pgspecial==1.11.0
66 Pillow==5.1.0
67 pluggy==0.6.0
68 prompt-toolkit==1.0.15
69 psycopg2==2.7.4
70 py==1.5.3
71 pyasn1==0.4.3
72 pyasn1-modules==0.2.1
73 pycparser==2.18
74 pydot==1.2.4
75 Pygments==2.2.0
76 pyOpenSSL==18.0.0
77 pyparsing==2.2.0
78 pytest==3.6.1
79 pytest-factoryboy==2.0.1
80 pytest-runner==4.2
81 python-dateutil==2.7.3
82 python-editor==1.0.3
83 python-slugify==1.2.5
84 pytz==2018.4
85 requests==2.18.4
86 responses==0.9.0
87 restkit==4.2.2
88 service-identity==17.0.0
89 setproctitle==1.1.10
90 setuptools-scm==2.1.0
91 six==1.11.0
92 socketpool==0.5.3
93 speaklater==1.3
94 SQLAlchemy==1.2.8
95 sqlalchemy-schemadisplay==1.3
96 sqlparse==0.2.4
97 tabulate==0.8.2
98 terminaltables==3.1.0
99 text-unidecode==1.2
100 tqdm==4.23.4
101 Twisted==18.4.0
102 txaio==2.10.0
103 Unidecode==1.0.22
104 urllib3==1.22
105 wcwidth==0.1.7
106 webargs==3.0.1
107 websocket-client==0.48.0
108 Werkzeug==0.14.1
109 WTForms==2.2.1
110 zope.interface==4.5.0
+0
-42
nix/server/requirements_override.nix less more
0 { pkgs, python }:
1
2 self: super: {
3 # Twisted = python.overrideDerivation super.Twisted (old: {
4 # propagatedBuildInputs = (builtins.filter
5 # (drv: drv.name != self.Automat.name && drv.name != self.incremental.name)
6 # old.propagatedBuildInputs);
7 # });
8 Automat = python.overrideDerivation super.Automat (old: {
9 propagatedBuildInputs = (builtins.filter
10 (drv: drv.name != self.Twisted.name)
11 old.propagatedBuildInputs);
12 buildInputs = old.buildInputs ++ [ self.m2r self."setuptools-scm" ];
13 });
14 incremental = python.overrideDerivation super.incremental (old: {
15 propagatedBuildInputs = (builtins.filter
16 (drv: drv.name != self.Twisted.name)
17 old.propagatedBuildInputs);
18 });
19 hypothesis = python.overrideDerivation super.hypothesis (old: {
20 propagatedBuildInputs = (builtins.filter
21 (drv: drv.name != self.attrs.name)
22 old.propagatedBuildInputs);
23 });
24 attrs = python.overrideDerivation super.attrs (old: {
25 propagatedBuildInputs = (builtins.filter
26 (drv: drv.name != self.hypothesis.name && drv.name != self.pytest.name)
27 old.propagatedBuildInputs);
28 });
29 "python-dateutil" = python.overrideDerivation super."python-dateutil" (old: {
30 buildInputs = old.buildInputs ++ [ self."setuptools-scm" ];
31 });
32 "pytest" = python.overrideDerivation super."pytest" (old: {
33 buildInputs = old.buildInputs ++ [ self."setuptools-scm" ];
34 });
35 "Flask-Security" = python.overrideDerivation super."Flask-Security" (old: {
36 buildInputs = old.buildInputs ++ [ self."pytest-runner" ];
37 });
38 "pytest-runner" = python.overrideDerivation super."pytest-runner" (old: {
39 buildInputs = old.buildInputs ++ [ self."setuptools-scm" ];
40 });
41 }
+0
-27
nix/virtualenv.nix less more
0 {pkgs ? (import <nixpkgs> {})}:
1 let
2 python = (pkgs.python27.buildEnv.override {
3 ignoreCollisions = true;
4 extraLibs = with pkgs.python27Packages;
5 [virtualenv pillow pyopenssl psycopg2];
6 });
7 virtualenv = pkgs.stdenv.mkDerivation {
8 name = "faraday-virtualenv";
9 buildInputs = [python];
10 requirements = [../requirements_dev.txt ../requirements_server.txt];
11 unpackPhase = "true";
12 pathPhase = "true";
13 configurePhase = "true";
14 buildPhase = ''
15 ${python.env}/bin/virtualenv --system-site-packages $out
16 source $out/bin/activate
17 for req in $requirements do
18 pip install -r $req
19 done
20 '';
21 installPhase = "true";
22 };
23 in
24 { inherit virtualenv;
25 env = python.env;
26 }
66
77 '''
88 import json
9 import logging
910 import threading
10 from Queue import Queue, Empty
11
11 try:
12 from Queue import Queue, Empty
13 except ImportError:
14 from queue import Queue, Empty
1215 import requests
1316 import websocket
1417
1518 from persistence.server.server_io_exceptions import (
1619 ChangesStreamStoppedAbruptly
1720 )
21 logger = logging.getLogger(__name__)
1822
1923
2024 class ChangesStream(object):
9094 self.ws.close()
9195 super(WebsocketsChangesStream, self).stop()
9296
93 def on_open(self, ws):
97 def on_open(self):
9498 from persistence.server.server import _create_server_api_url, _post
95 r = _post(
99 response = _post(
96100 _create_server_api_url() +
97101 '/ws/{}/websocket_token/'.format(self.workspace_name),
98102 expected_response=200)
99 token = r['token']
103 token = response['token']
100104 self.ws.send(json.dumps({
101105 'action': 'JOIN_WORKSPACE',
102106 'workspace': self.workspace_name,
103107 'token': token,
104108 }))
105109
106 def on_message(self, ws, message):
110 def on_message(self, message):
111 logger.debug('New message {0}'.format(message))
107112 self.changes_queue.put(message)
108113
109114 def on_error(self, ws, error):
110 print error
115 print(error)
111116
112 def on_close(selg, ws):
117 def on_close(self):
113118 pass
114119
115120 def __enter__(self):
858858 self.vuln_amount = int(host.get('vulns', 0))
859859 self.ip = host.get('ip', self.name)
860860 self.hostnames = host.get('hostnames', []) if host.get('hostnames') else []
861 self.mac = host.get('mac', '') if host.get('mac') else ''
861862
862863 def getName(self):
863864 return self.ip
894895 def getHostnames(self):
895896 return self.hostnames
896897
898 def getMac(self):
899 return self.mac
900
897901 def setHostnames(self, hostnames):
898902 self.hostnames = hostnames
903
904 def setMac(self, mac):
905 self.mac = mac
899906
900907 def getVulns(self):
901908 """
886886
887887 def create_host(workspace_name, command_id, ip, os, default_gateway=None,
888888 description="", metadata=None, owned=False, owner="",
889 parent=None, hostnames=None):
889 parent=None, hostnames=None, mac=None):
890890 """Create a host.
891891
892892 Args:
916916 parent=parent,
917917 description=description,
918918 hostnames=hostnames,
919 mac=mac,
919920 type="Host")
920921
921922 def update_host(workspace_name, command_id, id, ip, os, default_gateway="",
922923 description="", metadata=None, owned=False, owner="",
923 parent=None, hostnames=None):
924 parent=None, hostnames=None, mac=None):
924925 """Updates a host.
925926
926927 Args:
951952 parent=parent,
952953 description=description,
953954 hostnames=hostnames,
955 mac=mac,
954956 type="Host")
955957
956958
4646 def get_host_properties(host):
4747 host_dict = {
4848 'os': host.getOS(),
49 'hostnames': host.getHostnames()
49 'hostnames': host.getHostnames(),
50 'mac': host.getMac()
5051 }
5152 if host.getDefaultGateway():
5253 host_dict['default_gateway'] = host.getDefaultGateway()
144144 return self._plugins
145145
146146 def stop(self):
147 self.plugin_process.stop()
147148 self.stop = True
148149
149150 def processOutput(self, plugin, output, command, isReport=False):
161162 output_queue = JoinableQueue()
162163 plugin.set_actions_queue(self.pending_actions)
163164
164 plugin_process = PluginProcess(
165 self.plugin_process = PluginProcess(
165166 plugin, output_queue, isReport)
166167
167168 getLogger(self).debug(
168169 "Created plugin_process (%d) for plugin instance (%d)" %
169 (id(plugin_process), id(plugin)))
170 (id(self.plugin_process), id(plugin)))
170171
171172 self.pending_actions.put((Modelactions.PLUGINSTART, plugin.id, command.getID()))
172173 output_queue.put((output, command.getID()))
181182 )
182183 plugin_commiter.start()
183184 # This process is stopped when plugin commiter joins output queue
184 plugin_process.start()
185 self.plugin_process.start()
185186
186187 def _processAction(self, action, parameters):
187188 """
255256 return None, None
256257
257258 def onCommandFinished(self, pid, exit_code, term_output):
258
259259 if pid not in self._active_plugins.keys():
260260 return False
261261 if exit_code != 0:
272272 return True
273273
274274 def processReport(self, plugin, filepath, ws_name=None):
275
275276 if not ws_name:
276277 ws_name = model.api.getActiveWorkspace().name
278
277279 cmd_info = CommandRunInformation(
278280 **{'workspace': ws_name,
279 'itime': time.time(),
280 'import_source': 'report',
281 'command': plugin,
282 'params': filepath,
281 'itime': time.time(),
282 'import_source': 'report',
283 'command': plugin,
284 'params': filepath,
283285 })
286
284287 self._mapper_manager.createMappers(ws_name)
285288 command_id = self._mapper_manager.save(cmd_info)
286289 cmd_info.setID(command_id)
290
287291 if plugin in self._plugins:
288292 logger.info('Processing report with plugin {0}'.format(plugin))
289293 self._plugins[plugin].workspace = ws_name
290294 with open(filepath, 'rb') as output:
291295 self.processOutput(self._plugins[plugin], output.read(), cmd_info, True)
292296 return command_id
297
298 # Plugin to process this report not found, update duration of plugin process
299 cmd_info.duration = time.time() - cmd_info.itime
300 self._mapper_manager.update(cmd_info)
293301 return False
294302
295303 def clearActivePlugins(self):
1010
1111 import os
1212 import re
13 import time
1314 import logging
1415 import traceback
1516 import deprecation
171172 logger.debug('AddPendingAction', args)
172173 self._pending_actions.put(args)
173174
174 def createAndAddHost(self, name, os="unknown", hostnames=None):
175 def createAndAddHost(self, name, os="unknown", hostnames=None, mac=None):
175176
176177 host_obj = factory.createModelObject(
177178 Host.class_signature,
179180 os=os,
180181 parent_id=None,
181182 workspace_name=self.workspace,
182 hostnames=hostnames)
183 hostnames=hostnames,
184 mac=mac)
183185
184186 host_obj._metadata.creatoserverr = self.id
185187 self.__addPendingAction(Modelactions.ADDHOST, host_obj)
202204 # SHRUG
203205 try:
204206 host = get_host(self.workspace, host_id=host_id)
205 host.hostnames = hostname_resolution
207 host.hostnames += hostname_resolution
208 host.mac = mac
206209 update_host(self.workspace, host, command_id=self.command_id)
207210 except:
208211 logger.info("Error updating Host with right hostname resolution...")
383386 self.plugin = plugin_instance
384387 self.isReport = isReport
385388 self.setDaemon(True)
389 self.stop = False
386390
387391 def run(self):
388392 proc_name = self.name
393397 model.api.devlog('process id: %s' % os.getpid())
394398 model.api.devlog("-" * 40)
395399 done = False
396 while not done:
400 while not done and not self.stop:
397401 output, command_id = self.output_queue.get()
398402 self.plugin.setCommandID(command_id)
399403 if output is not None:
408412 model.api.devlog('%s: Exiting' % proc_name)
409413
410414 self.output_queue.task_done()
415 time.sleep(0.1)
411416
412417 return
418
419 def stop(self):
420 self.stop = True
0 '''
1 Faraday Penetration Test IDE
2 Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/)
3 See the file 'doc/LICENSE' for the license information
4
5 '''
6
7 import os
8
9 from faraday import FARADAY_BASE
10
11 def filter_services():
12 open_file = open(os.path.join(FARADAY_BASE,'plugins/port_mapper.txt'),"r")
13 mapper = open_file.read()
14 filtering = mapper.split('\n')
15 services = []
16
17 for item in filtering:
18 tup = ()
19 filt = filter(len,item.split('\t'))
20 tup = (filt[0],filt[1])
21 services.append(tup)
22
23 return services
0 1/tcp tcpmux
1 7/tcp echo
2 7/udp echo
3 9/tcp discard
4 9/udp discard
5 11/tcp systat
6 13/tcp daytime
7 13/udp daytime
8 15/tcp netstat
9 17/tcp qotd
10 18/tcp msp
11 18/udp msp
12 19/tcp chargen
13 19/udp chargen
14 20/tcp ftp-data
15 21/tcp ftp
16 21/udp fsp
17 22/tcp ssh
18 22/udp ssh
19 23/tcp telnet
20 25/tcp smtp
21 37/tcp time
22 37/udp time
23 39/udp rlp
24 42/tcp nameserver
25 43/tcp whois
26 49/tcp tacacs
27 49/udp tacacs
28 50/tcp re-mail-ck
29 50/udp re-mail-ck
30 53/tcp domain
31 53/udp domain
32 57/tcp mtp
33 65/tcp tacacs-ds
34 65/udp tacacs-ds
35 67/tcp bootps
36 67/udp bootps
37 68/tcp bootpc
38 68/udp bootpc
39 69/udp tftp
40 70/tcp gopher
41 70/udp gopher
42 77/tcp rje
43 79/tcp finger
44 80/tcp http
45 80/udp http
46 87/tcp link
47 88/tcp kerberos
48 88/udp kerberos
49 95/tcp supdup
50 101/tcp hostnames
51 102/tcp iso-tsap
52 104/tcp acr-nema
53 104/udp acr-nema
54 105/tcp csnet-ns
55 105/udp csnet-ns
56 107/tcp rtelnet
57 107/udp rtelnet
58 109/tcp pop2
59 109/udp pop2
60 110/tcp pop3
61 110/udp pop3
62 111/tcp sunrpc
63 111/udp sunrpc
64 113/tcp auth
65 115/tcp sftp
66 117/tcp uucp-path
67 119/tcp nntp
68 123/tcp ntp
69 123/udp ntp
70 129/tcp pwdgen
71 129/udp pwdgen
72 135/tcp loc-srv
73 135/udp loc-srv
74 137/tcp netbios-ns
75 137/udp netbios-ns
76 138/tcp netbios-dgm
77 138/udp netbios-dgm
78 139/tcp netbios-ssn
79 139/udp netbios-ssn
80 143/tcp imap2
81 143/udp imap2
82 161/tcp snmp
83 161/udp snmp
84 162/tcp snmp-trap
85 162/udp snmp-trap
86 163/tcp cmip-man
87 163/udp cmip-man
88 164/tcp cmip-agent
89 164/udp cmip-agent
90 174/tcp mailq
91 174/udp mailq
92 177/tcp xdmcp
93 177/udp xdmcp
94 178/tcp nextstep
95 178/udp nextstep
96 179/tcp bgp
97 179/udp bgp
98 191/tcp prospero
99 191/udp prospero
100 194/tcp irc
101 194/udp irc
102 199/tcp smux
103 199/udp smux
104 201/tcp at-rtmp
105 201/udp at-rtmp
106 202/tcp at-nbp
107 202/udp at-nbp
108 204/tcp at-echo
109 204/udp at-echo
110 206/tcp at-zis
111 206/udp at-zis
112 209/tcp qmtp
113 209/udp qmtp
114 210/tcp z3950
115 210/udp z3950
116 213/tcp ipx
117 213/udp ipx
118 220/tcp imap3
119 220/udp imap3
120 345/tcp pawserv
121 345/udp pawserv
122 346/tcp zserv
123 346/udp zserv
124 347/tcp fatserv
125 347/udp fatserv
126 369/tcp rpc2portmap
127 369/udp rpc2portmap
128 370/tcp codaauth2
129 370/udp codaauth2
130 371/tcp clearcase
131 371/udp clearcase
132 372/tcp ulistserv
133 372/udp ulistserv
134 389/tcp ldap
135 389/udp ldap
136 406/tcp imsp
137 406/udp imsp
138 427/tcp svrloc
139 427/udp svrloc
140 443/tcp https
141 443/udp https
142 444/tcp snpp
143 444/udp snpp
144 445/tcp microsoft-ds
145 445/udp microsoft-ds
146 464/tcp kpasswd
147 464/udp kpasswd
148 465/tcp urd
149 487/tcp saft
150 487/udp saft
151 500/tcp isakmp
152 500/udp isakmp
153 554/tcp rtsp
154 554/udp rtsp
155 607/tcp nqs
156 607/udp nqs
157 610/tcp npmp-local
158 610/udp npmp-local
159 611/tcp npmp-gui
160 611/udp npmp-gui
161 612/tcp hmmp-ind
162 612/udp hmmp-ind
163 623/udp asf-rmcp
164 628/tcp qmqp
165 628/udp qmqp
166 631/tcp ipp
167 631/udp ipp
168 512/tcp exec
169 512/udp biff
170 513/tcp login
171 513/udp who
172 514/tcp shell
173 514/udp syslog
174 515/tcp printer
175 517/udp talk
176 518/udp ntalk
177 520/udp route
178 525/udp timed
179 526/tcp tempo
180 530/tcp courier
181 531/tcp conference
182 532/tcp netnews
183 533/udp netwall
184 538/tcp gdomap
185 538/udp gdomap
186 540/tcp uucp
187 543/tcp klogin
188 544/tcp kshell
189 546/tcp dhcpv6-client
190 546/udp dhcpv6-client
191 547/tcp dhcpv6-server
192 547/udp dhcpv6-server
193 548/tcp afpovertcp
194 548/udp afpovertcp
195 549/tcp idfp
196 549/udp idfp
197 556/tcp remotefs
198 563/tcp nntps
199 563/udp nntps
200 587/tcp submission
201 587/udp submission
202 636/tcp ldaps
203 636/udp ldaps
204 655/tcp tinc
205 655/udp tinc
206 706/tcp silc
207 706/udp silc
208 749/tcp kerberos-adm
209 765/tcp webster
210 765/udp webster
211 873/tcp rsync
212 873/udp rsync
213 989/tcp ftps-data
214 990/tcp ftps
215 992/tcp telnets
216 992/udp telnets
217 993/tcp imaps
218 993/udp imaps
219 994/tcp ircs
220 994/udp ircs
221 995/tcp pop3s
222 995/udp pop3s
223 1080/tcp socks
224 1080/udp socks
225 1093/tcp proofd
226 1093/udp proofd
227 1094/tcp rootd
228 1094/udp rootd
229 1194/tcp openvpn
230 1194/udp openvpn
231 1099/tcp rmiregistry
232 1099/udp rmiregistry
233 1214/tcp kazaa
234 1214/udp kazaa
235 1241/tcp nessus
236 1241/udp nessus
237 1352/tcp lotusnote
238 1352/udp lotusnote
239 1433/tcp ms-sql-s
240 1433/udp ms-sql-s
241 1434/tcp ms-sql-m
242 1434/udp ms-sql-m
243 1524/tcp ingreslock
244 1524/udp ingreslock
245 1525/tcp prospero-np
246 1525/udp prospero-np
247 1645/tcp datametrics
248 1645/udp datametrics
249 1646/tcp sa-msg-port
250 1646/udp sa-msg-port
251 1649/tcp kermit
252 1649/udp kermit
253 1677/tcp groupwise
254 1677/udp groupwise
255 1701/tcp l2f
256 1701/udp l2f
257 1812/tcp radius
258 1812/udp radius
259 1813/tcp radius-acct
260 1813/udp radius-acct
261 1863/tcp msnp
262 1863/udp msnp
263 1957/tcp unix-status
264 1958/tcp log-server
265 1959/tcp remoteping
266 2000/tcp cisco-sccp
267 2000/udp cisco-sccp
268 2010/tcp search
269 2010/tcp pipe-server
270 2049/tcp nfs
271 2049/udp nfs
272 2086/tcp gnunet
273 2086/udp gnunet
274 2101/tcp rtcm-sc104
275 2101/udp rtcm-sc104
276 2119/tcp gsigatekeeper
277 2119/udp gsigatekeeper
278 2135/tcp gris
279 2135/udp gris
280 2401/tcp cvspserver
281 2401/udp cvspserver
282 2430/tcp venus
283 2430/udp venus
284 2431/tcp venus-se
285 2431/udp venus-se
286 2432/tcp codasrv
287 2432/udp codasrv
288 2433/tcp codasrv-se
289 2433/udp codasrv-se
290 2583/tcp mon
291 2583/udp mon
292 2628/tcp dict
293 2628/udp dict
294 2792/tcp f5-globalsite
295 2792/udp f5-globalsite
296 2811/tcp gsiftp
297 2811/udp gsiftp
298 2947/tcp gpsd
299 2947/udp gpsd
300 3050/tcp gds-db
301 3050/udp gds-db
302 3130/tcp icpv2
303 3130/udp icpv2
304 3260/tcp iscsi-target
305 3306/tcp mysql
306 3306/udp mysql
307 3493/tcp nut
308 3493/udp nut
309 3632/tcp distcc
310 3632/udp distcc
311 3689/tcp daap
312 3689/udp daap
313 3690/tcp svn
314 3690/udp svn
315 4031/tcp suucp
316 4031/udp suucp
317 4094/tcp sysrqd
318 4094/udp sysrqd
319 4190/tcp sieve
320 4369/tcp epmd
321 4369/udp epmd
322 4373/tcp remctl
323 4373/udp remctl
324 4353/tcp f5-iquery
325 4353/udp f5-iquery
326 4500/udp ipsec-nat-t
327 4569/tcp iax
328 4569/udp iax
329 4691/tcp mtn
330 4691/udp mtn
331 4899/tcp radmin-port
332 4899/udp radmin-port
333 5002/udp rfe
334 5002/tcp rfe
335 5050/tcp mmcc
336 5050/udp mmcc
337 5060/tcp sip
338 5060/udp sip
339 5061/tcp sip-tls
340 5061/udp sip-tls
341 5190/tcp aol
342 5190/udp aol
343 5222/tcp xmpp-client
344 5222/udp xmpp-client
345 5269/tcp xmpp-server
346 5269/udp xmpp-server
347 5308/tcp cfengine
348 5308/udp cfengine
349 5353/tcp mdns
350 5353/udp mdns
351 5432/tcp postgresql
352 5432/udp postgresql
353 5556/tcp freeciv
354 5556/udp freeciv
355 5671/tcp amqps
356 5672/tcp amqp
357 5672/udp amqp
358 5672/sctp amqp
359 5688/tcp ggz
360 5688/udp ggz
361 6000/tcp x11
362 6000/udp x11
363 6001/tcp x11-1
364 6001/udp x11-1
365 6002/tcp x11-2
366 6002/udp x11-2
367 6003/tcp x11-3
368 6003/udp x11-3
369 6004/tcp x11-4
370 6004/udp x11-4
371 6005/tcp x11-5
372 6005/udp x11-5
373 6006/tcp x11-6
374 6006/udp x11-6
375 6007/tcp x11-7
376 6007/udp x11-7
377 6346/tcp gnutella-svc
378 6346/udp gnutella-svc
379 6347/tcp gnutella-rtr
380 6347/udp gnutella-rtr
381 6444/tcp sge-qmaster
382 6444/udp sge-qmaster
383 6445/tcp sge-execd
384 6445/udp sge-execd
385 6446/tcp mysql-proxy
386 6446/udp mysql-proxy
387 7000/tcp afs3-fileserver
388 7000/udp afs3-fileserver
389 7001/tcp afs3-callback
390 7001/udp afs3-callback
391 7002/tcp afs3-prserver
392 7002/udp afs3-prserver
393 7003/tcp afs3-vlserver
394 7003/udp afs3-vlserver
395 7004/tcp afs3-kaserver
396 7004/udp afs3-kaserver
397 7005/tcp afs3-volser
398 7005/udp afs3-volser
399 7006/tcp afs3-errors
400 7006/udp afs3-errors
401 7007/tcp afs3-bos
402 7007/udp afs3-bos
403 7008/tcp afs3-update
404 7008/udp afs3-update
405 7009/tcp afs3-rmtsys
406 7009/udp afs3-rmtsys
407 7100/tcp font-service
408 7100/udp font-service
409 8080/tcp http-alt
410 8080/udp http-alt
411 9101/tcp bacula-dir
412 9101/udp bacula-dir
413 9102/tcp bacula-fd
414 9102/udp bacula-fd
415 9103/tcp bacula-sd
416 9103/udp bacula-sd
417 9667/tcp xmms2
418 9667/udp xmms2
419 10809/tcp nbd
420 10050/tcp zabbix-agent
421 10050/udp zabbix-agent
422 10051/tcp zabbix-trapper
423 10051/udp zabbix-trapper
424 10080/tcp amanda
425 10080/udp amanda
426 11112/tcp dicom
427 11371/tcp hkp
428 11371/udp hkp
429 13720/tcp bprd
430 13720/udp bprd
431 13721/tcp bpdbm
432 13721/udp bpdbm
433 13722/tcp bpjava-msvc
434 13722/udp bpjava-msvc
435 13724/tcp vnetd
436 13724/udp vnetd
437 13782/tcp bpcd
438 13782/udp bpcd
439 13783/tcp vopied
440 13783/udp vopied
441 17500/tcp db-lsp
442 22125/tcp dcap
443 22128/tcp gsidcap
444 22273/tcp wnn6
445 22273/udp wnn6
446 1/ddp rtmp
447 2/ddp nbp
448 4/ddp echo
449 6/ddp zip
450 750/udp kerberos4
451 750/tcp kerberos4
452 751/udp kerberos-master
453 751/tcp kerberos-master
454 752/udp passwd-server
455 754/tcp krb-prop
456 760/tcp krbupdate
457 901/tcp swat
458 1109/tcp kpop
459 2053/tcp knetd
460 2102/udp zephyr-srv
461 2103/udp zephyr-clt
462 2104/udp zephyr-hm
463 2105/tcp eklogin
464 2111/tcp kx
465 2121/tcp iprop
466 871/tcp supfilesrv
467 1127/tcp supfiledbg
468 98/tcp linuxconf
469 106/tcp poppassd
470 106/udp poppassd
471 775/tcp moira-db
472 777/tcp moira-update
473 779/udp moira-ureg
474 783/tcp spamd
475 808/tcp omirr
476 808/udp omirr
477 1001/tcp customs
478 1001/udp customs
479 1178/tcp skkserv
480 1210/udp predict
481 1236/tcp rmtcfg
482 1300/tcp wipld
483 1313/tcp xtel
484 1314/tcp xtelw
485 1529/tcp support
486 2003/tcp cfinger
487 2121/tcp frox
488 2150/tcp ninstall
489 2150/udp ninstall
490 2600/tcp zebrasrv
491 2601/tcp zebra
492 2602/tcp ripd
493 2603/tcp ripngd
494 2604/tcp ospfd
495 2605/tcp bgpd
496 2606/tcp ospf6d
497 2607/tcp ospfapi
498 2608/tcp isisd
499 2988/tcp afbackup
500 2988/udp afbackup
501 2989/tcp afmbackup
502 2989/udp afmbackup
503 4224/tcp xtell
504 4557/tcp fax
505 4559/tcp hylafax
506 4600/tcp distmp3
507 4949/tcp munin
508 5051/tcp enbd-cstatd
509 5052/tcp enbd-sstatd
510 5151/tcp pcrd
511 5354/tcp noclog
512 5354/udp noclog
513 5355/tcp hostmon
514 5355/udp hostmon
515 5555/udp rplay
516 5666/tcp nrpe
517 5667/tcp nsca
518 5674/tcp mrtd
519 5675/tcp bgpsim
520 5680/tcp canna
521 6514/tcp syslog-tls
522 6566/tcp sane-port
523 6667/tcp ircd
524 8021/tcp zope-ftp
525 8081/tcp tproxy
526 8088/tcp omniorb
527 8088/udp omniorb
528 8990/tcp clc-build-daemon
529 9098/tcp xinetd
530 9359/udp mandelspawn
531 9418/tcp git
532 9673/tcp zope
533 10000/tcp webmin
534 10081/tcp kamanda
535 10081/udp kamanda
536 10082/tcp amandaidx
537 10083/tcp amidxtape
538 11201/tcp smsqp
539 11201/udp smsqp
540 15345/tcp xpilot
541 15345/udp xpilot
542 17001/udp sgi-cmsd
543 17002/udp sgi-crsd
544 17003/udp sgi-gcd
545 17004/tcp sgi-cad
546 20011/tcp isdnlog
547 20011/udp isdnlog
548 20012/tcp vboxd
549 20012/udp vboxd
550 24554/tcp binkp
551 27374/tcp asp
552 27374/udp asp
553 30865/tcp csync2
554 57000/tcp dircproxy
555 60177/tcp tfido
556 60179/tcp fido
557 1027/udp Native IPv6 behind IPv4-to-IPv4 NAT Customer Premises Equipment (6a44)
558 1058/tcp nim, IBM AIX Network Installation Manager (NIM)
559 1058/udp nim, IBM AIX Network Installation Manager (NIM)
560 1059/tcp nimreg, IBM AIX Network Installation Manager (NIM)
561 1059/udp nimreg, IBM AIX Network Installation Manager (NIM)
562 1080/tcp SOCKS proxy
563 1080/udp SOCKS proxy
564 1085/tcp WebObjects
565 1085/udp WebObjects
566 1098/tcp rmiactivation, Java remote method invocation (RMI) activation
567 1098/udp rmiactivation, Java remote method invocation (RMI) activation
568 1099/tcp rmiregistry, Java remote method invocation (RMI) registry
569 1099/assigned rmiregistry, Java remote method invocation (RMI) registry
570 1119/tcp Battle.net chat/game protocol, used by Blizzard's games
571 1119/udp Battle.net chat/game protocol, used by Blizzard's games
572 1167/udp Cisco IP SLA (Service Assurance Agent)
573 1167/tcp Cisco IP SLA (Service Assurance Agent)
574 1194/udp OpenVPN
575 1194/tcp OpenVPN
576 1198/udp The cajo project Free dynamic transparent distributed computing in Java
577 1198/tcp The cajo project Free dynamic transparent distributed computing in Java
578 1214/udp Kazaa
579 1214/tcp Kazaa
580 1234/udp Infoseek search agent
581 1234/tcp Infoseek search agent
582 1241/udp Nessus Security Scanner
583 1241/tcp Nessus Security Scanner
584 1270/udp Microsoft System Center Operations Manager (SCOM) (formerly Microsoft Operations Manager (MOM)) agent
585 1270/tcp Microsoft System Center Operations Manager (SCOM) (formerly Microsoft Operations Manager (MOM)) agent
586 1293/udp Internet Protocol Security (IPSec)
587 1293/tcp Internet Protocol Security (IPSec)
588 1311/udp Windows RxMon.exe
589 1311/tcp Windows RxMon.exe
590 1341/udp Qubes (Manufacturing Execution System)
591 1341/tcp Qubes (Manufacturing Execution System)
592 1344/udp Internet Content Adaptation Protocol
593 1344/tcp Internet Content Adaptation Protocol
594 1352/udp IBM Lotus Notes/Domino (RPC) protocol
595 1352/tcp IBM Lotus Notes/Domino (RPC) protocol
596 1360/udp Mimer SQL
597 1360/tcp Mimer SQL
598 1414/udp IBM WebSphere MQ (formerly known as MQSeries)
599 1414/tcp IBM WebSphere MQ (formerly known as MQSeries)
600 1417/udp Timbuktu Service 1 Port
601 1417/tcp Timbuktu Service 1 Port
602 1418/udp Timbuktu Service 2 Port
603 1418/tcp Timbuktu Service 2 Port
604 1419/udp Timbuktu Service 3 Port
605 1419/tcp Timbuktu Service 3 Port
606 1420/udp Timbuktu Service 4 Port
607 1420/tcp Timbuktu Service 4 Port
608 1433/udp Microsoft SQL Server database management system (MSSQL) server
609 1433/tcp Microsoft SQL Server database management system (MSSQL) server
610 1434/udp Microsoft SQL Server database management system (MSSQL) monitor
611 1434/tcp Microsoft SQL Server database management system (MSSQL) monitor
612 1512/udp Microsoft's Windows Internet Name Service (WINS)
613 1512/tcp Microsoft's Windows Internet Name Service (WINS)
614 1521/udp nCUBE License Manager
615 1521/tcp nCUBE License Manager
616 1524/udp ingreslock, ingres
617 1524/tcp ingreslock, ingres
618 1527/udp Oracle Net Services, formerly known as SQL*Net
619 1527/tcp Oracle Net Services, formerly known as SQL*Net
620 1533/udp IBM Sametime Virtual Places Chat
621 1533/tcp IBM Sametime Virtual Places Chat
622 1547/udp Laplink
623 1547/tcp Laplink
624 1581/udp MIL STD 2045-47001 VMF
625 1581/tcp MIL STD 2045-47001 VMF
626 1589/udp Cisco VLAN Query Protocol (VQP)
627 1589/tcp Cisco VLAN Query Protocol (VQP)
628 1628/udp LonTalk normal
629 1628/tcp LonTalk normal
630 1629/udp LonTalk urgent
631 1629/tcp LonTalk urgent
632 1677/udp Novell GroupWise clients in client/server access mode
633 1677/tcp Novell GroupWise clients in client/server access mode
634 1701/udp Layer 2 Forwarding Protocol (L2F)
635 1701/tcp Layer 2 Forwarding Protocol (L2F)
636 1701/udp Layer 2 Tunneling Protocol (L2TP)
637 1701/assigned Layer 2 Tunneling Protocol (L2TP)
638 1707/udp Windward Studios games (vdmplay)
639 1707/tcp Windward Studios games (vdmplay)
640 1719/udp H.323 registration and alternate communication
641 1719/tcp H.323 registration and alternate communication
642 1720/udp H.323 call signaling
643 1720/tcp H.323 call signaling
644 1755/udp Microsoft Media Services (MMS, ms-streaming)
645 1755/tcp Microsoft Media Services (MMS, ms-streaming)
646 1801/udp Microsoft Message Queuing
647 1801/tcp Microsoft Message Queuing
648 1812/udp RADIUS authentication protocol, radius
649 1812/tcp RADIUS authentication protocol, radius
650 1813/udp RADIUS accounting protocol, radius-acct
651 1813/tcp RADIUS accounting protocol, radius-acct
652 1863/udp Microsoft Notification Protocol (MSNP), used by the Microsoft Messenger service and a number of instant messaging Messenger clients
653 1863/tcp Microsoft Notification Protocol (MSNP), used by the Microsoft Messenger service and a number of instant messaging Messenger clients
654 1883/udp MQTT (formerly MQ Telemetry Transport)
655 1883/tcp MQTT (formerly MQ Telemetry Transport)
656 1900/udp Simple Service Discovery Protocol (SSDP), discovery of UPnP devices
657 1900/assigned Simple Service Discovery Protocol (SSDP), discovery of UPnP devices
658 1935/udp Macromedia Flash Communications Server MX, the precursor to Adobe Flash Media Server before Macromedia's acquisition by Adobe on December 3, 2005
659 1935/tcp Macromedia Flash Communications Server MX, the precursor to Adobe Flash Media Server before Macromedia's acquisition by Adobe on December 3, 2005
660 1970/udp Netop Remote Control
661 1970/tcp Netop Remote Control
662 1972/udp InterSystems Caché
663 1972/tcp InterSystems Caché
664 1984/udp Big Brother
665 1984/tcp Big Brother
666 1985/udp Cisco Hot Standby Router Protocol (HSRP)
667 1985/assigned Cisco Hot Standby Router Protocol (HSRP)
668 1998/udp Cisco X.25 over TCP (XOT) service
669 1998/tcp Cisco X.25 over TCP (XOT) service
670 2000/udp Cisco Skinny Client Control Protocol (SCCP)
671 2000/tcp Cisco Skinny Client Control Protocol (SCCP)
672 2080/udp Autodesk NLM (FLEXlm)
673 2080/tcp Autodesk NLM (FLEXlm)
674 2083/udp Secure RADIUS Service (radsec)
675 2083/tcp Secure RADIUS Service (radsec)
676 2086/udp GNUnet
677 2086/tcp GNUnet
678 2102/udp Zephyr Notification Service server
679 2102/tcp Zephyr Notification Service server
680 2103/udp Zephyr Notification Service serv-hm connection
681 2103/tcp Zephyr Notification Service serv-hm connection
682 2104/udp Zephyr Notification Service hostmanager
683 2104/tcp Zephyr Notification Service hostmanager
684 2123/udp GTP control messages (GTP-C)
685 2123/tcp GTP control messages (GTP-C)
686 2142/udp TDMoIP (TDM over IP)
687 2142/tcp TDMoIP (TDM over IP)
688 2152/udp GTP user data messages (GTP-U)
689 2152/tcp GTP user data messages (GTP-U)
690 2159/udp GDB remote debug port
691 2159/tcp GDB remote debug port
692 2181/udp EForward-document transport system
693 2181/tcp EForward-document transport system
694 2210/udp NOAAPORT Broadcast Network
695 2210/tcp NOAAPORT Broadcast Network
696 2211/udp EMWIN
697 2211/tcp EMWIN
698 2222/udp EtherNet/IP implicit messaging for IO data
699 2222/tcp EtherNet/IP implicit messaging for IO data
700 2261/udp CoMotion master
701 2261/tcp CoMotion master
702 2262/udp CoMotion backup
703 2262/tcp CoMotion backup
704 2266/udp M-Files
705 2266/tcp M-Files
706 2399/udp FileMaker Data Access Layer (ODBC/JDBC)
707 2399/tcp FileMaker Data Access Layer (ODBC/JDBC)
708 2401/udp CVS version control system password-based server
709 2401/tcp CVS version control system password-based server
710 2404/udp IEC 60870-5-104, used to send electric power telecontrol messages between two systems via directly connected data circuits
711 2404/tcp IEC 60870-5-104, used to send electric power telecontrol messages between two systems via directly connected data circuits
712 2427/udp Media Gateway Control Protocol (MGCP) media gateway
713 2427/tcp Media Gateway Control Protocol (MGCP) media gateway
714 2447/udp ovwdb—OpenView Network Node Manager (NNM) daemon
715 2447/tcp ovwdb—OpenView Network Node Manager (NNM) daemon
716 2483/udp Oracle database listening for insecure client connections to the listener, replaces port 1521
717 2483/tcp Oracle database listening for insecure client connections to the listener, replaces port 1521
718 2484/udp Oracle database listening for SSL client connections to the listener
719 2484/tcp Oracle database listening for SSL client connections to the listener
720 2535/udp Multicast Address Dynamic Client Allocation Protocol (MADCAP). All standard messages are UDP datagrams.
721 2535/tcp Multicast Address Dynamic Client Allocation Protocol (MADCAP). All standard messages are UDP datagrams.
722 2541/udp LonTalk/IP
723 2541/tcp LonTalk/IP
724 2546/udp EVault data protection services
725 2546/tcp EVault data protection services
726 2547/udp EVault data protection services
727 2547/tcp EVault data protection services
728 2548/udp EVault data protection services
729 2548/tcp EVault data protection services
730 2638/udp SQL Anywhere database server
731 2638/tcp SQL Anywhere database server
732 2727/udp Media Gateway Control Protocol (MGCP) media gateway controller (call agent)
733 2727/tcp Media Gateway Control Protocol (MGCP) media gateway controller (call agent)
734 2809/udp corbaloc:iiop URL, per the CORBA 3.0.3 specification
735 2809/tcp corbaloc:iiop URL, per the CORBA 3.0.3 specification
736 2811/udp gsi ftp, per the GridFTP specification
737 2811/tcp gsi ftp, per the GridFTP specification
738 2944/udp Megaco text H.248
739 2944/tcp Megaco text H.248
740 2945/udp Megaco binary (ASN.1) H.248
741 2945/tcp Megaco binary (ASN.1) H.248
742 2947/udp gpsd, GPS daemon
743 2947/tcp gpsd, GPS daemon
744 2948/udp WAP push Multimedia Messaging Service (MMS)
745 2948/tcp WAP push Multimedia Messaging Service (MMS)
746 2949/udp WAP push secure (MMS)
747 2949/tcp WAP push secure (MMS)
748 2967/udp Symantec System Center agent (SSC-AGENT)
749 2967/tcp Symantec System Center agent (SSC-AGENT)
750 3020/udp Common Internet File System (CIFS). See also port 445 for Server Message Block (SMB), a dialect of CIFS.
751 3020/tcp Common Internet File System (CIFS). See also port 445 for Server Message Block (SMB), a dialect of CIFS.
752 3050/udp gds-db (Interbase/Firebird databases)
753 3050/tcp gds-db (Interbase/Firebird databases)
754 3052/udp APC PowerChute Network
755 3052/tcp APC PowerChute Network
756 3074/udp Xbox LIVE and Games for Windows – Live
757 3074/tcp Xbox LIVE and Games for Windows – Live
758 3225/udp Fibre Channel over IP (FCIP)
759 3225/tcp Fibre Channel over IP (FCIP)
760 3233/udp WhiskerControl research control protocol
761 3233/tcp WhiskerControl research control protocol
762 3260/udp iSCSI
763 3260/tcp iSCSI
764 3268/udp msft-gc, Microsoft Global Catalog (LDAP service which contains data from Active Directory forests)
765 3268/tcp msft-gc, Microsoft Global Catalog (LDAP service which contains data from Active Directory forests)
766 3269/udp msft-gc-ssl, Microsoft Global Catalog over SSL (similar to port 3268, LDAP over SSL)
767 3269/tcp msft-gc-ssl, Microsoft Global Catalog over SSL (similar to port 3268, LDAP over SSL)
768 3283/udp Net Assistant, a predecessor to Apple Remote Desktop
769 3283/tcp Net Assistant, a predecessor to Apple Remote Desktop
770 3305/udp Odette File Transfer Protocol (OFTP)
771 3305/tcp Odette File Transfer Protocol (OFTP)
772 3386/udp GTP' 3GPP GSM/UMTS CDR logging protocol
773 3386/tcp GTP' 3GPP GSM/UMTS CDR logging protocol
774 3389/udp Microsoft Terminal Server (RDP) officially registered as Windows Based Terminal (WBT)
775 3389/tcp Microsoft Terminal Server (RDP) officially registered as Windows Based Terminal (WBT)
776 3396/udp Novell NDPS Printer Agent
777 3396/tcp Novell NDPS Printer Agent
778 3412/udp xmlBlaster
779 3412/tcp xmlBlaster
780 3455/udp Resource Reservation Protocol (RSVP)
781 3455/tcp Resource Reservation Protocol (RSVP)
782 3478/udp STUN, a protocol for NAT traversal
783 3478/tcp STUN, a protocol for NAT traversal
784 3478/udp TURN, a protocol for NAT traversal (extension to STUN)
785 3478/tcp TURN, a protocol for NAT traversal (extension to STUN)
786 3478/udp STUN Behavior Discovery. See also port 5349.
787 3478/tcp STUN Behavior Discovery. See also port 5349.
788 3493/udp Network UPS Tools (NUT)
789 3493/tcp Network UPS Tools (NUT)
790 3516/udp Smartcard Port
791 3516/tcp Smartcard Port
792 3645/udp Cyc
793 3645/tcp Cyc
794 3659/udp Apple SASL, used by Mac OS X Server Password Server
795 3659/tcp Apple SASL, used by Mac OS X Server Password Server
796 3667/udp Information Exchange
797 3667/tcp Information Exchange
798 3690/udp Subversion (SVN) version control system
799 3690/tcp Subversion (SVN) version control system
800 3702/udp Web Services Dynamic Discovery (WS-Discovery), used by various components of Windows Vista and later
801 3702/tcp Web Services Dynamic Discovery (WS-Discovery), used by various components of Windows Vista and later
802 3724/udp Some Blizzard games
803 3724/tcp Some Blizzard games
804 3725/udp Netia NA-ER Port
805 3725/tcp Netia NA-ER Port
806 3768/udp RBLcheckd server daemon
807 3768/tcp RBLcheckd server daemon
808 3804/udp Harman Professional HiQnet protocol
809 3804/tcp Harman Professional HiQnet protocol
810 3826/udp WarMUX game server
811 3826/tcp WarMUX game server
812 3830/udp System Management Agent, developed and used by Cerner to monitor and manage solutions
813 3830/tcp System Management Agent, developed and used by Cerner to monitor and manage solutions
814 3880/udp IGRS
815 3880/tcp IGRS
816 3999/udp Norman distributed scanning service
817 3999/tcp Norman distributed scanning service
818 4018/udp Protocol information and warnings
819 4018/tcp Protocol information and warnings
820 4089/udp OpenCORE Remote Control Service
821 4089/tcp OpenCORE Remote Control Service
822 4090/udp Kerio
823 4090/tcp Kerio
824 4093/udp PxPlus Client server interface ProvideX
825 4093/tcp PxPlus Client server interface ProvideX
826 4096/udp Ascom Timeplex Bridge Relay Element (BRE)
827 4096/tcp Ascom Timeplex Bridge Relay Element (BRE)
828 4105/udp Shofar (ShofarNexus)
829 4105/tcp Shofar (ShofarNexus)
830 4116/udp Smartcard-TLS
831 4116/tcp Smartcard-TLS
832 4172/udp Teradici PCoIP
833 4172/tcp Teradici PCoIP
834 4303/udp Simple Railroad Command Protocol (SRCP)
835 4303/tcp Simple Railroad Command Protocol (SRCP)
836 4486/udp Integrated Client Message Service (ICMS)
837 4486/tcp Integrated Client Message Service (ICMS)
838 4500/udp IPSec NAT Traversal (RFC 3947, RFC 4306)
839 4500/assigned IPSec NAT Traversal (RFC 3947, RFC 4306)
840 4662/udp OrbitNet Message Service
841 4662/tcp OrbitNet Message Service
842 4730/udp Gearman's job server
843 4730/tcp Gearman's job server
844 4739/udp IP Flow Information Export
845 4739/tcp IP Flow Information Export
846 4753/udp SIMON (service and discovery)
847 4753/tcp SIMON (service and discovery)
848 4840/udp OPC UA Connection Protocol (TCP) and OPC UA Multicast Datagram Protocol (UDP) for OPC Unified Architecture from OPC Foundation
849 4840/tcp OPC UA Connection Protocol (TCP) and OPC UA Multicast Datagram Protocol (UDP) for OPC Unified Architecture from OPC Foundation
850 4843/udp OPC UA TCP Protocol over TLS/SSL for OPC Unified Architecture from OPC Foundation
851 4843/tcp OPC UA TCP Protocol over TLS/SSL for OPC Unified Architecture from OPC Foundation
852 4847/udp Web Fresh Communication, Quadrion Software & Odorless Entertainment
853 4847/tcp Web Fresh Communication, Quadrion Software & Odorless Entertainment
854 4894/udp LysKOM Protocol A
855 4894/tcp LysKOM Protocol A
856 4950/udp Cylon Controls UC32 Communications Port
857 4950/tcp Cylon Controls UC32 Communications Port
858 5010/udp Registered to: TelePath (the IBM FlowMark workflow-management system messaging platform). The TCP port is now used for: IBM WebSphere MQ Workflow
859 5010/tcp Registered to: TelePath (the IBM FlowMark workflow-management system messaging platform). The TCP port is now used for: IBM WebSphere MQ Workflow
860 5011/udp TelePath (the IBM FlowMark workflow-management system messaging platform)
861 5011/tcp TelePath (the IBM FlowMark workflow-management system messaging platform)
862 5025/udp scpi-raw Standard Commands for Programmable Instruments
863 5025/tcp scpi-raw Standard Commands for Programmable Instruments
864 5060/udp Session Initiation Protocol (SIP)
865 5060/tcp Session Initiation Protocol (SIP)
866 5062/udp Localisation access
867 5062/tcp Localisation access
868 5064/udp EPICS Channel Access server
869 5064/tcp EPICS Channel Access server
870 5065/udp EPICS Channel Access repeater beacon
871 5065/tcp EPICS Channel Access repeater beacon
872 5084/udp EPCglobal Low Level Reader Protocol (LLRP)
873 5084/tcp EPCglobal Low Level Reader Protocol (LLRP)
874 5085/udp EPCglobal Low Level Reader Protocol (LLRP) over TLS
875 5085/tcp EPCglobal Low Level Reader Protocol (LLRP) over TLS
876 5099/udp SafeNet, Inc Sentinel LM, Sentinel RMS, License Manager, server-to-server
877 5099/tcp SafeNet, Inc Sentinel LM, Sentinel RMS, License Manager, server-to-server
878 5150/udp ATMP Ascend Tunnel Management Protocol
879 5150/tcp ATMP Ascend Tunnel Management Protocol
880 5154/udp BZFlag
881 5154/tcp BZFlag
882 5190/udp AOL Instant Messenger protocol. The chat app is defunct as of 15 December 2017.
883 5190/tcp AOL Instant Messenger protocol. The chat app is defunct as of 15 December 2017.
884 5298/udp Extensible Messaging and Presence Protocol (XMPP)
885 5298/tcp Extensible Messaging and Presence Protocol (XMPP)
886 5310/udp Outlaws (1997 video game). Both UDP and TCP are reserved, but only UDP is used
887 5310/tcp Outlaws (1997 video game). Both UDP and TCP are reserved, but only UDP is used
888 5353/udp Multicast DNS (mDNS)
889 5353/assigned Multicast DNS (mDNS)
890 5355/udp Link-Local Multicast Name Resolution (LLMNR), allows hosts to perform name resolution for hosts on the same local link (only provided by Windows Vista and Server 2008)
891 5355/tcp Link-Local Multicast Name Resolution (LLMNR), allows hosts to perform name resolution for hosts on the same local link (only provided by Windows Vista and Server 2008)
892 5402/udp Multicast File Transfer Protocol (MFTP)
893 5402/tcp Multicast File Transfer Protocol (MFTP)
894 5405/udp NetSupport Manager
895 5405/tcp NetSupport Manager
896 5412/udp IBM Rational Synergy (Telelogic Synergy) (Continuus CM) Message Router
897 5412/tcp IBM Rational Synergy (Telelogic Synergy) (Continuus CM) Message Router
898 5413/udp Wonderware SuiteLink service
899 5413/tcp Wonderware SuiteLink service
900 5417/udp SNS Agent
901 5417/tcp SNS Agent
902 5421/udp NetSupport Manager
903 5421/tcp NetSupport Manager
904 5556/udp Freeciv, Oracle WebLogic Server Node Manager
905 5556/tcp Freeciv, Oracle WebLogic Server Node Manager
906 5568/udp Session Data Transport (SDT), a part of Architecture for Control Networks (ACN)
907 5568/tcp Session Data Transport (SDT), a part of Architecture for Control Networks (ACN)
908 5722/udp Microsoft RPC, DFSR (SYSVOL) Replication Service
909 5722/tcp Microsoft RPC, DFSR (SYSVOL) Replication Service
910 5741/udp IDA Discover Port 1
911 5741/tcp IDA Discover Port 1
912 5742/udp IDA Discover Port 2
913 5742/tcp IDA Discover Port 2
914 5900/udp Remote Frame Buffer protocol (RFB)
915 5900/tcp Remote Frame Buffer protocol (RFB)
916 5931/udp AMMYY admin Remote Control
917 5931/tcp AMMYY admin Remote Control
918 5984/udp CouchDB database server
919 5984/tcp CouchDB database server
920 6000/udp X11-used between an X client and server over the network
921 6000/tcp X11-used between an X client and server over the network
922 6001/udp X11-used between an X client and server over the network
923 6001/tcp X11-used between an X client and server over the network
924 6002/udp X11-used between an X client and server over the network
925 6002/tcp X11-used between an X client and server over the network
926 6003/udp X11-used between an X client and server over the network
927 6003/tcp X11-used between an X client and server over the network
928 6004/udp X11-used between an X client and server over the network
929 6004/tcp X11-used between an X client and server over the network
930 6005/udp X11-used between an X client and server over the network
931 6005/tcp X11-used between an X client and server over the network
932 6006/udp X11-used between an X client and server over the network
933 6006/tcp X11-used between an X client and server over the network
934 6007/udp X11-used between an X client and server over the network
935 6007/tcp X11-used between an X client and server over the network
936 6008/udp X11-used between an X client and server over the network
937 6008/tcp X11-used between an X client and server over the network
938 6009/udp X11-used between an X client and server over the network
939 6009/tcp X11-used between an X client and server over the network
940 6010/udp X11-used between an X client and server over the network
941 6010/tcp X11-used between an X client and server over the network
942 6011/udp X11-used between an X client and server over the network
943 6011/tcp X11-used between an X client and server over the network
944 6012/udp X11-used between an X client and server over the network
945 6012/tcp X11-used between an X client and server over the network
946 6013/udp X11-used between an X client and server over the network
947 6013/tcp X11-used between an X client and server over the network
948 6014/udp X11-used between an X client and server over the network
949 6014/tcp X11-used between an X client and server over the network
950 6015/udp X11-used between an X client and server over the network
951 6015/tcp X11-used between an X client and server over the network
952 6016/udp X11-used between an X client and server over the network
953 6016/tcp X11-used between an X client and server over the network
954 6017/udp X11-used between an X client and server over the network
955 6017/tcp X11-used between an X client and server over the network
956 6018/udp X11-used between an X client and server over the network
957 6018/tcp X11-used between an X client and server over the network
958 6019/udp X11-used between an X client and server over the network
959 6019/tcp X11-used between an X client and server over the network
960 6020/udp X11-used between an X client and server over the network
961 6020/tcp X11-used between an X client and server over the network
962 6021/udp X11-used between an X client and server over the network
963 6021/tcp X11-used between an X client and server over the network
964 6022/udp X11-used between an X client and server over the network
965 6022/tcp X11-used between an X client and server over the network
966 6023/udp X11-used between an X client and server over the network
967 6023/tcp X11-used between an X client and server over the network
968 6024/udp X11-used between an X client and server over the network
969 6024/tcp X11-used between an X client and server over the network
970 6025/udp X11-used between an X client and server over the network
971 6025/tcp X11-used between an X client and server over the network
972 6026/udp X11-used between an X client and server over the network
973 6026/tcp X11-used between an X client and server over the network
974 6027/udp X11-used between an X client and server over the network
975 6027/tcp X11-used between an X client and server over the network
976 6028/udp X11-used between an X client and server over the network
977 6028/tcp X11-used between an X client and server over the network
978 6029/udp X11-used between an X client and server over the network
979 6029/tcp X11-used between an X client and server over the network
980 6030/udp X11-used between an X client and server over the network
981 6030/tcp X11-used between an X client and server over the network
982 6031/udp X11-used between an X client and server over the network
983 6031/tcp X11-used between an X client and server over the network
984 6032/udp X11-used between an X client and server over the network
985 6032/tcp X11-used between an X client and server over the network
986 6033/udp X11-used between an X client and server over the network
987 6033/tcp X11-used between an X client and server over the network
988 6034/udp X11-used between an X client and server over the network
989 6034/tcp X11-used between an X client and server over the network
990 6035/udp X11-used between an X client and server over the network
991 6035/tcp X11-used between an X client and server over the network
992 6036/udp X11-used between an X client and server over the network
993 6036/tcp X11-used between an X client and server over the network
994 6037/udp X11-used between an X client and server over the network
995 6037/tcp X11-used between an X client and server over the network
996 6038/udp X11-used between an X client and server over the network
997 6038/tcp X11-used between an X client and server over the network
998 6039/udp X11-used between an X client and server over the network
999 6039/tcp X11-used between an X client and server over the network
1000 6040/udp X11-used between an X client and server over the network
1001 6040/tcp X11-used between an X client and server over the network
1002 6041/udp X11-used between an X client and server over the network
1003 6041/tcp X11-used between an X client and server over the network
1004 6042/udp X11-used between an X client and server over the network
1005 6042/tcp X11-used between an X client and server over the network
1006 6043/udp X11-used between an X client and server over the network
1007 6043/tcp X11-used between an X client and server over the network
1008 6044/udp X11-used between an X client and server over the network
1009 6044/tcp X11-used between an X client and server over the network
1010 6045/udp X11-used between an X client and server over the network
1011 6045/tcp X11-used between an X client and server over the network
1012 6046/udp X11-used between an X client and server over the network
1013 6046/tcp X11-used between an X client and server over the network
1014 6047/udp X11-used between an X client and server over the network
1015 6047/tcp X11-used between an X client and server over the network
1016 6048/udp X11-used between an X client and server over the network
1017 6048/tcp X11-used between an X client and server over the network
1018 6049/udp X11-used between an X client and server over the network
1019 6049/tcp X11-used between an X client and server over the network
1020 6050/udp X11-used between an X client and server over the network
1021 6050/tcp X11-used between an X client and server over the network
1022 6051/udp X11-used between an X client and server over the network
1023 6051/tcp X11-used between an X client and server over the network
1024 6052/udp X11-used between an X client and server over the network
1025 6052/tcp X11-used between an X client and server over the network
1026 6053/udp X11-used between an X client and server over the network
1027 6053/tcp X11-used between an X client and server over the network
1028 6054/udp X11-used between an X client and server over the network
1029 6054/tcp X11-used between an X client and server over the network
1030 6055/udp X11-used between an X client and server over the network
1031 6055/tcp X11-used between an X client and server over the network
1032 6056/udp X11-used between an X client and server over the network
1033 6056/tcp X11-used between an X client and server over the network
1034 6057/udp X11-used between an X client and server over the network
1035 6057/tcp X11-used between an X client and server over the network
1036 6058/udp X11-used between an X client and server over the network
1037 6058/tcp X11-used between an X client and server over the network
1038 6059/udp X11-used between an X client and server over the network
1039 6059/tcp X11-used between an X client and server over the network
1040 6060/udp X11-used between an X client and server over the network
1041 6060/tcp X11-used between an X client and server over the network
1042 6061/udp X11-used between an X client and server over the network
1043 6061/tcp X11-used between an X client and server over the network
1044 6062/udp X11-used between an X client and server over the network
1045 6062/tcp X11-used between an X client and server over the network
1046 6063/udp X11-used between an X client and server over the network
1047 6063/tcp X11-used between an X client and server over the network
1048 6110/udp softcm, HP Softbench CM
1049 6110/tcp softcm, HP Softbench CM
1050 6111/udp spc, HP Softbench Sub-Process Control
1051 6111/tcp spc, HP Softbench Sub-Process Control
1052 6112/udp dtspcd, execute commands and launch applications remotely
1053 6112/tcp dtspcd, execute commands and launch applications remotely
1054 6346/udp gnutella-svc, gnutella (FrostWire, Limewire, Shareaza, etc.)
1055 6346/tcp gnutella-svc, gnutella (FrostWire, Limewire, Shareaza, etc.)
1056 6347/udp gnutella-rtr, Gnutella alternate
1057 6347/tcp gnutella-rtr, Gnutella alternate
1058 6350/udp App Discovery and Access Protocol
1059 6350/tcp App Discovery and Access Protocol
1060 6444/udp Sun Grid Engine Qmaster Service
1061 6444/tcp Sun Grid Engine Qmaster Service
1062 6445/udp Sun Grid Engine Execution Service
1063 6445/tcp Sun Grid Engine Execution Service
1064 6464/udp Port assignment for medical device communication in accordance to IEEE 11073-20701
1065 6464/tcp Port assignment for medical device communication in accordance to IEEE 11073-20701
1066 6515/udp Elipse RPC Protocol (REC)
1067 6515/tcp Elipse RPC Protocol (REC)
1068 6619/udp odette-ftps, Odette File Transfer Protocol (OFTP) over TLS/SSL
1069 6619/tcp odette-ftps, Odette File Transfer Protocol (OFTP) over TLS/SSL
1070 6622/udp Multicast FTP
1071 6622/tcp Multicast FTP
1072 6679/udp Osorno Automation Protocol (OSAUT)
1073 6679/tcp Osorno Automation Protocol (OSAUT)
1074 6888/udp MUSE
1075 6888/tcp MUSE
1076 6969/udp acmsoda
1077 6969/tcp acmsoda
1078 7262/udp CNAP (Calypso Network Access Protocol)
1079 7262/tcp CNAP (Calypso Network Access Protocol)
1080 7272/udp WatchMe - WatchMe Monitoring
1081 7272/tcp WatchMe - WatchMe Monitoring
1082 7400/udp RTPS (Real Time Publish Subscribe) DDS Discovery
1083 7400/tcp RTPS (Real Time Publish Subscribe) DDS Discovery
1084 7401/udp RTPS (Real Time Publish Subscribe) DDS User-Traffic
1085 7401/tcp RTPS (Real Time Publish Subscribe) DDS User-Traffic
1086 7402/udp RTPS (Real Time Publish Subscribe) DDS Meta-Traffic
1087 7402/tcp RTPS (Real Time Publish Subscribe) DDS Meta-Traffic
1088 7542/udp Saratoga file transfer protocol
1089 7542/tcp Saratoga file transfer protocol
1090 7547/udp CPE WAN Management Protocol (CWMP) Technical Report 069
1091 7547/tcp CPE WAN Management Protocol (CWMP) Technical Report 069
1092 7624/udp Instrument Neutral Distributed Interface
1093 7624/tcp Instrument Neutral Distributed Interface
1094 8008/udp Alternative port for HTTP. See also ports 80 and 8080.
1095 8008/tcp Alternative port for HTTP. See also ports 80 and 8080.
1096 8074/udp Gadu-Gadu
1097 8074/tcp Gadu-Gadu
1098 8080/udp Alternative port for HTTP. See also ports 80 and 8008.
1099 8080/tcp Alternative port for HTTP. See also ports 80 and 8008.
1100 8243/udp HTTPS listener for Apache Synapse
1101 8243/tcp HTTPS listener for Apache Synapse
1102 8280/udp HTTP listener for Apache Synapse
1103 8280/tcp HTTP listener for Apache Synapse
1104 8883/udp Secure MQTT (MQTT over TLS)
1105 8883/tcp Secure MQTT (MQTT over TLS)
1106 9001/udp ETL Service Manager
1107 9001/tcp ETL Service Manager
1108 9080/udp glrpc, Groove Collaboration software GLRPC
1109 9080/tcp glrpc, Groove Collaboration software GLRPC
1110 9101/udp Bacula Director
1111 9101/tcp Bacula Director
1112 9102/udp Bacula File Daemon
1113 9102/tcp Bacula File Daemon
1114 9103/udp Bacula Storage Daemon
1115 9103/tcp Bacula Storage Daemon
1116 9119/udp MXit Instant Messenger
1117 9119/tcp MXit Instant Messenger
1118 9389/udp adws, Microsoft AD DS Web Services, Powershell uses this port
1119 9389/tcp adws, Microsoft AD DS Web Services, Powershell uses this port
1120 9418/udp git, Git pack transfer service
1121 9418/tcp git, Git pack transfer service
1122 9535/udp mngsuite, LANDesk Management Suite Remote Control
1123 9535/tcp mngsuite, LANDesk Management Suite Remote Control
1124 9536/udp laes-bf, IP Fabrics Surveillance buffering function
1125 9536/tcp laes-bf, IP Fabrics Surveillance buffering function
1126 9800/udp WebDAV Source
1127 9800/tcp WebDAV Source
1128 10000/udp Network Data Management Protocol
1129 10000/tcp Network Data Management Protocol
1130 10050/udp Zabbix agent
1131 10050/tcp Zabbix agent
1132 10051/udp Zabbix trapper
1133 10051/tcp Zabbix trapper
1134 10110/udp NMEA 0183 Navigational Data. Transport of NMEA 0183 sentences over TCP or UDP
1135 10110/tcp NMEA 0183 Navigational Data. Transport of NMEA 0183 sentences over TCP or UDP
1136 11001/udp metasys ( Johnson Controls Metasys java AC control environment )
1137 11001/tcp metasys ( Johnson Controls Metasys java AC control environment )
1138 11112/udp ACR/NEMA Digital Imaging and Communications in Medicine (DICOM)
1139 11112/tcp ACR/NEMA Digital Imaging and Communications in Medicine (DICOM)
1140 11371/udp OpenPGP HTTP key server
1141 11371/tcp OpenPGP HTTP key server
1142 13720/udp Symantec NetBackup—bprd (formerly VERITAS)
1143 13720/tcp Symantec NetBackup—bprd (formerly VERITAS)
1144 13721/udp Symantec NetBackup—bpdbm (formerly VERITAS)
1145 13721/tcp Symantec NetBackup—bpdbm (formerly VERITAS)
1146 13724/udp Symantec Network Utility—vnetd (formerly VERITAS)
1147 13724/tcp Symantec Network Utility—vnetd (formerly VERITAS)
1148 13782/udp Symantec NetBackup—bpcd (formerly VERITAS)
1149 13782/tcp Symantec NetBackup—bpcd (formerly VERITAS)
1150 13783/udp Symantec VOPIED protocol (formerly VERITAS)
1151 13783/tcp Symantec VOPIED protocol (formerly VERITAS)
1152 13785/udp Symantec NetBackup Database—nbdb (formerly VERITAS)
1153 13785/tcp Symantec NetBackup Database—nbdb (formerly VERITAS)
1154 13786/udp Symantec nomdb (formerly VERITAS)
1155 13786/tcp Symantec nomdb (formerly VERITAS)
1156 15345/udp XPilot Contact
1157 15345/tcp XPilot Contact
1158 17500/udp Dropbox LanSync Protocol (db-lsp); used to synchronize file catalogs between Dropbox clients on a local network.
1159 17500/tcp Dropbox LanSync Protocol (db-lsp); used to synchronize file catalogs between Dropbox clients on a local network.
1160 19813/udp 4D database Client Server Communication
1161 19813/tcp 4D database Client Server Communication
1162 24465/udp Tonido Directory Server for Tonido which is a Personal Web App and P2P platform
1163 24465/tcp Tonido Directory Server for Tonido which is a Personal Web App and P2P platform
1164 24554/udp BINKP, Fidonet mail transfers over TCP/IP
1165 24554/tcp BINKP, Fidonet mail transfers over TCP/IP
1166 26000/udp id Software's Quake server
1167 26000/tcp id Software's Quake server
1168 27000/udp FlexNet Publisher's License server (from the range of default ports)
1169 27000/tcp FlexNet Publisher's License server (from the range of default ports)
1170 27001/udp FlexNet Publisher's License server (from the range of default ports)
1171 27001/tcp FlexNet Publisher's License server (from the range of default ports)
1172 27002/udp FlexNet Publisher's License server (from the range of default ports)
1173 27002/tcp FlexNet Publisher's License server (from the range of default ports)
1174 27003/udp FlexNet Publisher's License server (from the range of default ports)
1175 27003/tcp FlexNet Publisher's License server (from the range of default ports)
1176 27004/udp FlexNet Publisher's License server (from the range of default ports)
1177 27004/tcp FlexNet Publisher's License server (from the range of default ports)
1178 27005/udp FlexNet Publisher's License server (from the range of default ports)
1179 27005/tcp FlexNet Publisher's License server (from the range of default ports)
1180 27006/udp FlexNet Publisher's License server (from the range of default ports)
1181 27006/tcp FlexNet Publisher's License server (from the range of default ports)
1182 27007/udp FlexNet Publisher's License server (from the range of default ports)
1183 27007/tcp FlexNet Publisher's License server (from the range of default ports)
1184 27008/udp FlexNet Publisher's License server (from the range of default ports)
1185 27008/tcp FlexNet Publisher's License server (from the range of default ports)
1186 27009/udp FlexNet Publisher's License server (from the range of default ports)
1187 27009/tcp FlexNet Publisher's License server (from the range of default ports)
1188 33434/udp traceroute
1189 33434/tcp traceroute
1190 40000/udp SafetyNET p – a real-time Industrial Ethernet protocol
1191 40000/tcp SafetyNET p – a real-time Industrial Ethernet protocol
1192 44818/udp EtherNet/IP explicit messaging
1193 44818/tcp EtherNet/IP explicit messaging
1194 47808/udp BACnet Building Automation and Control Networks (4780810 = BAC016)
1195 47808/tcp BACnet Building Automation and Control Networks (4780810 = BAC016)
1196 49151/udp Reserved
1197 49151/tcp Reserved
3030 core.PluginBase.__init__(self)
3131 self.id = "arp-scan"
3232 self.name = "arp-scan network scanner"
33 self.plugin_version = "0.0.1"
33 self.plugin_version = "0.0.2"
3434 self.version = "1.8.1"
3535 self.framework_version = "1.0.0"
3636 self.options = None
3838 self._command_regex = re.compile(
3939 r'^(sudo arp-scan|\.\/arp-scan|arp-scan).*?')
4040 self._host_ip = None
41 self._port = "23"
4241
4342 def parseOutputString(self, output, debug=False):
4443
4645 r"(\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)",
4746 output)
4847
49 host_mac_addr = re.search(r"([\dA-F]{2}(?:[-:][\dA-F]{2}){5})", output)
48 host_mac_addr = re.search(r"([\dA-F]{2}(?:[-:][\dA-F]{2}){5})", output, re.IGNORECASE)
5049
5150 if host_info is None:
5251 api.devlog("No hosts detected")
1414 from collections import defaultdict
1515
1616 from plugins import core
17 from plugins.plugins_utils import filter_services
1718
1819
1920 current_path = os.path.abspath(os.getcwd())
3334 self.services[ip].append({'port': port, 'protocol': protocol, 'name': name})
3435
3536 def hostname(self):
36 m = re.search('^hostname=(.+)$', self.rawcontents, re.MULTILINE)
37 return(m.group(1).strip())
37 hostname_match = re.search('^hostname=(.+)$', self.rawcontents, re.MULTILINE)
38 hostname = hostname_match.group(1).strip()
39 domain_match = re.search('^domainname=(.+)$', self.rawcontents, re.MULTILINE)
40 if domain_match:
41 domain = domain_match.group(1).strip()
42 return ".".join([hostname,domain])
43 else:
44 return hostname
3845
3946 def osfullname(self):
40 m = re.search('^os_fullname=(.+)$', self.rawcontents, re.MULTILINE)
41 return(m.group(1).strip())
42
43 def interfaces(self):
44 interfaces = []
45 m = re.findall('^network_interface\[\]=(.+)$',
46 self.rawcontents, re.MULTILINE)
47 for iname in m:
48 # Yeah, lynis doesnt relate interface to mac to ip...
49 interfaces.append(iname)
50 return(interfaces)
51
52 def macs(self):
53 macs = []
54 m = re.findall('^network_mac_address\[\]=(.+)$',
55 self.rawcontents, re.MULTILINE)
56 for mac in m:
57 macs.append(mac)
58 return(macs)
47 name_match = re.search('^os_name=(.+)$', self.rawcontents, re.MULTILINE)
48 name = name_match.group(1).strip()
49 version_match = re.search('^os_version=(.+)$', self.rawcontents, re.MULTILINE)
50 version = version_match.group(1).strip()
51 return " ".join([name, version])
5952
6053 def ipv4(self):
6154 ipv4addrs = []
62 m = re.findall('^network_ipv4_address\[\]=(.+)$',
55 ipv4s = re.findall('^network_ipv4_address\[\]=(.+)$',
6356 self.rawcontents, re.MULTILINE)
64 for ipv4 in m:
65 ipv4addrs.append(ipv4)
57 ipv4addrs = self.ipv4_filter(ipv4s)
6658 return(ipv4addrs)
6759
6860 def ipv6(self):
6961 ipv6addrs = []
70 m = re.findall('^network_ipv6_address\[\]=(.+)$',
62 ipv6s = re.findall('^network_ipv6_address\[\]=(.+)$',
7163 self.rawcontents, re.MULTILINE)
72 for ipv6 in m:
73 ipv6addrs.append(ipv6)
64 ipv6addrs = self.ipv6_filter(ipv6s)
7465 return(ipv6addrs)
7566
67 def ipv4_filter(self, ips):
68 ip_list = []
69 for ip in ips:
70 if not ip == "127.0.0.1":
71 ip_list.append(ip)
72
73 return ip_list
74
75 def ipv6_filter(self, ips):
76 ip_list = []
77 for ip in ips:
78 if not ip.startswith('fe80') and not ip.startswith('::1'):
79 ip_list.append(ip)
80
81 return ip_list
82
7683 def kernelVersion(self):
77 m = re.search('^os_kernel_version_full=(.+)$',
84 versions_dict = {}
85
86 version = re.search('^os_kernel_version=(.+)$',
7887 self.rawcontents, re.MULTILINE)
79 return(m.group(1).strip())
88 if version:
89 versions_dict['Kernel Version'] = version.group(1).strip()
90
91 version_full = re.search('^os_kernel_version_full=(.+)$',
92 self.rawcontents, re.MULTILINE)
93 if version_full:
94 versions_dict['Kernel Version Full'] = version_full.group(1).strip()
95
96 return versions_dict
8097
8198 def listeningservices(self):
82
8399 line = re.findall('^network_listen_port\[\]=(.+)$',
84100 self.rawcontents, re.MULTILINE)
101 # To avoid local services, we will create the following list
102 local_services = ['*', 'localhost']
85103
86104 for combo in line:
87 if combo.find("|") > 0:
88
89 items_service = combo.split('|')
105 elements = self.clean_services(combo, local_services)
106 if elements is not None:
107 self._svcHelper(elements['ip'],
108 elements['port'],
109 elements['protocol'],
110 elements['name'])
111 return self.services
112
113 def clean_services(self, combo, local_services):
114 add = False
115 #if "localhost" in combo:
116 if combo.count("|") > 1:
117 items_service = combo.split('|')
118 if not items_service[0] in local_services and not items_service[0].startswith(':'):
90119 elements_ip_port = items_service[0].split(':')
91120 count = items_service[0].count(':')
92121 protocol = items_service[1]
93122 name = items_service[2]
123 add = True
94124
95125 if name == '-':
96 name = 'Unknown'
97
98 else:
99 items_service = combo
100 count = items_service.count(':')
101 elements_ip_port = items_service.split(':')
102 protocol = "Unknown"
103 name = "Unknown"
104
105 #Ipv4
106 if count == 1:
107 ip, port = elements_ip_port
108
109 #Ipv6
110 elif count == 3:
111 port = elements_ip_port[3]
112 ip = '::'
113
114 #Ipv6
115 elif count == 5:
116 port = elements_ip_port[5]
117 ip = items_service[0].replace(':{}'.format(port), '')
118
119 self._svcHelper(ip, port, protocol, name)
120
121 return self.services
122
123
124 def suggestions(self):
126 details = self.search_service(elements_ip_port[1])
127 name = details['name']
128 elif combo.count('|') == 1:
129 items_service = combo.split('|')
130 if not items_service[0] in local_services and not items_service[0].startswith(':'):
131 count = items_service[0].count(':')
132 elements_ip_port = items_service[0].split(':')
133 details = self.search_service(elements_ip_port[1])
134 protocol = details['protocol']
135 name = details['name']
136 add = True
137 else:
138 items_service = combo
139 count = items_service.count(':')
140 elements_ip_port = items_service.split(':')
141 details = self.search_service(elements_ip_port[1])
142 protocol = details['protocol']
143 name = details['name']
144 add = True
145
146 if add == True:
147 ip, port = self.colon_count(count, elements_ip_port, items_service)
148 elements_dict = {
149 "ip":ip,
150 "port": port,
151 "protocol": protocol,
152 "name": name
153 }
154 return elements_dict
155 else:
156 return None
157
158 def search_service(self, port):
159 srv = filter_services()
160 details_dict = {
161 'name' : 'Unknown',
162 'protocol' : 'Unknown'
163 }
164 for item in srv:
165 service_tuple = item[0].split('/')
166 parsed_port = service_tuple[0]
167 if parsed_port == port:
168 details_dict['name'] = item[1]
169 details_dict['protocol'] = service_tuple[1]
170 return details_dict
171 return details_dict
172
173 def colon_count(self, count, elements_ip_port, items_service):
174 #Ipv4
175 if count == 1:
176 ip, port = elements_ip_port
177
178 #Ipv6
179 elif count == 3:
180 port = elements_ip_port[3]
181 ip = '::'
182
183 #Ipv6
184 elif count == 5:
185 port = elements_ip_port[5]
186 ip = items_service[0].replace(':{}'.format(port), '')
187
188 return ip, port
189
190 def parse_suggestions(self):
125191 sugs = {}
126192 m = re.findall('^suggestion\[\]=(.+)$', self.rawcontents, re.MULTILINE)
127193 for combo in m:
129195 sugs[x[0]] = x[1]
130196 return(sugs)
131197
132 def warnings(self):
198 def parse_warnings(self):
133199 warns = {}
134200 m = re.findall('^warning\[\]=(.+)$', self.rawcontents, re.MULTILINE)
135201 for combo in m:
145211 core.PluginBase.__init__(self)
146212 self.id = "Lynis"
147213 self.name = "Lynis DAT Output Plugin"
148 self.plugin_version = "0.0.3"
149 self.version = "2.5.5"
214 self.plugin_version = "0.4"
215 self.version = "2.7.1"
150216 self.options = None
151217 self._current_output = None
152218 rr = r'^(lynis|sudo lynis|\.\/lynis|sudo \.\/lynis).*?'
162228 lde = LynisLogDataExtracter(datfile=datpath)
163229 elif '# Lynis Report' in output:
164230 lde = LynisLogDataExtracter(output=output)
165
166231 hostname = lde.hostname()
167 try:
168 ip = socket.gethostbyname(hostname)
169 except socket.gaierror:
170 ip = hostname
171 h_id = self.createAndAddHost(name=ip, os=lde.osfullname(), hostnames=[hostname])
172
173 self.createAndAddVulnToHost(
174 host_id=h_id,
175 name="Kernel Version",
176 severity='info',
177 desc=lde.kernelVersion()
178 )
179
180 interfaces = lde.interfaces()
181 macs = lde.macs()
182232 ipv4s = lde.ipv4()
183233 ipv6s = lde.ipv6()
184 svcs = lde.listeningservices()
234 kernel_versions = lde.kernelVersion()
235 services = lde.listeningservices()
236 suggestions = lde.parse_suggestions()
237 warnings = lde.parse_warnings()
185238
186239 for ipv4 in ipv4s:
187 i_id = self.createAndAddInterface(host_id=h_id,
188 ipv4_address=ipv4)
189 for service_data in svcs[ipv4]:
190 self.createAndAddServiceToInterface(host_id=h_id,
191 interface_id=i_id,
192 name=service_data['name'],
193 protocol=service_data['protocol'],
194 ports=[service_data['port']])
240 h_id = self.createAndAddHost(name=ipv4,
241 os=lde.osfullname(),
242 hostnames=[hostname])
243
244 self.create_services(h_id, services, ipv4)
245 self.create_vulns_with_kernel(h_id, kernel_versions)
246 self.create_vulns_with_suggestions(h_id, suggestions)
247 self.create_vulns_with_warns(h_id, warnings)
248
195249 for ipv6 in ipv6s:
196 i_id = self.createAndAddInterface(host_id=h_id,
197 ipv6_address=ipv6)
198 for service_data in svcs[ipv6]:
199 self.createAndAddServiceToInterface(host_id=h_id,
200 interface_id=i_id,
201 name=service_data['name'],
202 protocol=service_data['protocol'],
203 ports=[service_data['port']])
204 sugs = lde.suggestions()
250 h_id = self.createAndAddHost(name=ipv6,
251 os=lde.osfullname(),
252 hostnames=[hostname])
253
254 self.create_services(h_id, services, ipv6)
255 self.create_vulns_with_kernel(h_id, kernel_versions)
256 self.create_vulns_with_suggestions(h_id, suggestions)
257 self.create_vulns_with_warns(h_id, warnings)
258
259 def create_services(self, host_id, parsed_services, ip_version):
260 for service_data in parsed_services[ip_version]:
261 self.createAndAddServiceToHost(host_id=host_id,
262 name=service_data['name'],
263 protocol=service_data['protocol'],
264 ports=[service_data['port']])
265
266 if '0.0.0.0' in parsed_services:
267 for service_data in parsed_services['0.0.0.0']:
268 self.createAndAddServiceToHost(host_id=host_id,
269 name=service_data['name'],
270 protocol=service_data['protocol'],
271 ports=[service_data['port']])
272
273 def create_vulns_with_kernel(self, host_id, kernel_versions):
274 for kernel, version in kernel_versions.iteritems():
275 self.createAndAddVulnToHost(
276 host_id=host_id,
277 name=kernel,
278 severity='info',
279 desc=version
280 )
281
282 def create_vulns_with_suggestions(self, host_id, sugs):
205283 for sug in sugs:
206284 self.createAndAddVulnToHost(
207 host_id=h_id,
285 host_id=host_id,
208286 name=sug,
209287 severity='med',
210288 desc=sugs[sug]
211289 )
212290
213 warns = lde.warnings()
291 def create_vulns_with_warns(self, host_id, warns):
214292 for warn in warns:
215293 self.createAndAddVulnToHost(
216 host_id=h_id,
217 name=sug,
294 host_id=host_id,
295 name=warn,
218296 severity='high',
219297 desc=warns[warn]
220298 )
5959 self.addSetting("Server", str, "localhost")
6060 self.addSetting("Port", str, "5432")
6161 ### NOTE: do _not_ correct the typo, it's used by the user.xml
62 self.addSetting("Workspace", str, "a_workspace")
62 self.addSetting("Workspace", str, "default")
6363 self.addSetting("Enable", str, "0")
6464
6565 self._sdate = ""
8282 host=self.getSetting("Server"),
8383 port=self.getSetting("Port"))
8484
85 # conn = psycopg2.connect("dbname='" + self.getSetting("Database") +
86 # "' user='" + self.getSetting("User") +
87 # "' password='" + self.getSetting("Password") +
88 # "' host='" + self.getSetting("Server") +
89 # "' port='" + self.getSetting("Port") +
90 # "'")
91
9285 cur = conn.cursor()
9386 except Exception as e:
87 print "[Faraday - MetasplotiOn] Error Connecting to the database"
88 print "[Faraday - MetasplotiOn]Check your metasploit postgresql credentials and server IP/Port"
9489 print e
95 print "Error Connecting to the database\n"
9690 return
9791
9892 cur = self._doSql(
77
88 '''
99 from __future__ import with_statement
10 from plugins import core
11 from faraday import FARADAY_BASE
1210 import re
1311 import os
1412 import sys
2018 except ImportError:
2119 import xml.etree.ElementTree as ET
2220 ETREE_VERSION = ET.VERSION
21
22 from plugins import core
23 from faraday import FARADAY_BASE
24 from plugins.plugins_utils import filter_services
2325
2426 ETREE_VERSION = [int(i) for i in ETREE_VERSION.split(".")]
2527
5052 self.target = None
5153 self.port = "80"
5254 self.host = None
53
5455 tree = self.parse_xml(xml_output)
5556
5657 if tree:
8182 """
8283 try:
8384 report = tree.findall('report')[0]
84 node = tree.findall('report')[0]
85 node2 = node.findall('results')[0]
86 for node in node2.findall('result'):
85 results = report.findall('results')[0]
86 for node in results.findall('result'):
8787 yield Item(node,report)
8888
8989 except Exception:
9090
91 node2 = tree.findall('result')
92 for node in node2:
91 result = tree.findall('result')
92 for node in result:
9393 yield Item(node)
9494
9595
136136
137137 def __init__(self, item_node, report):
138138 self.node = item_node
139
140139 self.host = self.get_text_from_subnode('host')
141140 self.subnet = self.get_text_from_subnode('subnet')
142141
143142 if self.subnet is '':
144143 self.subnet = self.host
145144
146 self.description = self.get_text_from_subnode('description')
147145 self.port = "None"
148146 self.severity = self.get_text_from_subnode('threat')
149147 self.service = "Unknown"
175173 self.xref = self.get_text_from_subnode(
176174 'xref') if self.get_text_from_subnode('xref') != "NOXREF" else ""
177175
178
179 def do_clean(self, value):
180 myreturn = ""
181 if value is not None:
182 myreturn = re.sub("\n", "", value)
183 return myreturn
176 self.description = ''
177 self.resolution = ''
178 self.cvss_vector = ''
179 self.tags = self.get_text_from_subnode('tags')
180 if self.tags:
181 tags_data = self.get_data_from_tags(self.tags)
182 self.description = tags_data['description']
183 self.resolution = tags_data['solution']
184 self.cvss_vector = tags_data['cvss_base_vector']
185
184186
185187 def get_text_from_subnode(self, subnode_xpath_expr):
186188 """
190192 """
191193 sub_node = self.node.find(subnode_xpath_expr)
192194 if sub_node is not None and sub_node.text is not None:
193 return sub_node.text
195 return sub_node.text.strip()
194196
195197 return ''
196198
197199
198 def get_service(self, port, report, host_ip):
199 detail = self.get_detail_from_host(report,host_ip)
200 def get_service(self, port, report, result_host_ip):
201 detail = self.get_detail_from_host(report,result_host_ip)
200202
201203 # dict detail:
202204 # key is the host ip
209211
210212 # if the service is not in detail, we will search it in
211213 # the file port_mapper.txt
212 srv = self.filter_services()
214 srv = filter_services()
213215 for service in srv:
214216 if service[0] == port:
215217 return service[1]
216218
217219 return "Unknown"
218220
219 def filter_services(self):
220 open_file = open(os.path.join(FARADAY_BASE,'plugins/repo/openvas/port_mapper.txt'),"r")
221 mapper = open_file.read()
222 filtering = mapper.split('\n')
223
224 services = []
225
226 for item in filtering:
227 tup = ()
228 filt = filter(len,item.split('\t'))
229 tup = (filt[0],filt[1])
230 services.append(tup)
231
232 return services
233
234 def get_detail_from_host(self, report, host_ip):
235 hosts = report.findall('host')
221
222 def get_detail_from_host(self, report, result_host_ip):
223 report_hosts = report.findall('host')
236224 host_dict = {}
237 for host in hosts:
238 if host[0].text == host_ip.strip():
225 for host in report_hosts:
226 report_host_ip = host.find('ip').text.strip()
227 if report_host_ip == result_host_ip:
239228 details = self.get_details(host)
240 host_dict[host.find('ip').text] = details
229 host_dict[report_host_ip] = details
241230
242231 return host_dict
232
243233
244234 def get_details(self, host):
245235 details_list = host.findall('detail')
246236 details_dict = {}
247237
248 for item in details_list:
249 name = item.find('name').text
238 for detail in details_list:
239 name = detail.find('name').text.strip()
250240 if not 'EXIT' in name:
251 details_dict[item.find('value').text] = name
241 value = self.do_clean(detail.find('value').text)
242 details_dict[value] = name
252243
253244 return details_dict
245
246
247 def do_clean(self, value):
248 myreturn = ""
249 if value is not None:
250 myreturn = re.sub("\s+", " ", value)
251
252 return myreturn.strip()
253
254254
255255 def get_service_from_details(self, value_dict, port):
256256 # dict value:
285285
286286 return res
287287
288 def get_data_from_tags(self,tags_text):
289 clean_text = self.do_clean(tags_text)
290 tags = clean_text.split('|')
291 summary = ''
292 insight = ''
293 data = {
294 'solution': '',
295 'cvss_base_vector': '',
296 'description':''
297 }
298 for tag in tags:
299 splited_tag = tag.split('=',1)
300 if splited_tag[0] in data.keys():
301 data[splited_tag[0]] = splited_tag[1]
302 elif splited_tag[0] == 'summary':
303 summary = splited_tag[1]
304 elif splited_tag[0] == 'insight':
305 insight = splited_tag[1]
306
307 data['description'] = ' '.join([summary,insight]).strip()
308
309 return data
310
288311
289312 class OpenvasPlugin(core.PluginBase):
290313 """
295318 core.PluginBase.__init__(self)
296319 self.id = "Openvas"
297320 self.name = "Openvas XML Output Plugin"
298 self.plugin_version = "0.0.2"
299 self.version = "2.0"
321 self.plugin_version = "0.3"
322 self.version = "9.0.3"
300323 self.framework_version = "1.0.0"
301324 self.options = None
302325 self._current_output = None
321344
322345 web = False
323346 ids = {}
347
324348 for item in parser.items:
325349
326350 if item.name is not None:
327
328351 ref = []
329352 if item.cve:
330353 ref.append(item.cve.encode("utf-8"))
332355 ref.append(item.bid.encode("utf-8"))
333356 if item.xref:
334357 ref.append(item.xref.encode("utf-8"))
358 if item.tags and item.cvss_vector:
359 ref.append(item.cvss_vector.encode("utf-8"))
335360
336361 if ids.has_key(item.subnet):
337362 h_id = ids[item.host]
345370 item.name.encode("utf-8"),
346371 desc=item.description.encode("utf-8"),
347372 severity=item.severity.encode("utf-8"),
373 resolution=item.resolution.encode("utf-8"),
348374 ref=ref)
349375 else:
350
351376 if item.service:
352377 web = True if re.search(
353378 r'^(www|http)',
378403 if ids.has_key(item.subnet + "_" + item.port):
379404 s_id = ids[item.subnet + "_" + item.port]
380405 else:
381
382406 s_id = self.createAndAddServiceToInterface(
383407 h_id,
384408 i_id,
413437 desc=item.description.encode("utf-8"),
414438 website=item.host,
415439 severity=item.severity.encode("utf-8"),
416 ref=ref)
440 ref=ref,
441 resolution=item.resolution.encode("utf-8"))
417442 else:
418443 self.createAndAddVulnToService(
419444 h_id,
421446 item.name.encode("utf-8"),
422447 desc=item.description.encode("utf-8"),
423448 severity=item.severity.encode("utf-8"),
424 ref=ref)
449 ref=ref,
450 resolution=item.resolution.encode("utf-8"))
425451
426452 del parser
427453
442468 return OpenvasPlugin()
443469
444470 if __name__ == '__main__':
445 with open("/home/javier/report_openvas.xml","r") as report:
471 with open("/home/javier/openvas-report.xml","r") as report:
446472 parser = OpenvasXmlParser(report.read())
447473 #for item in parser.items:
448474 #if item.status == 'up':
+0
-1198
plugins/repo/openvas/port_mapper.txt less more
0 1/tcp tcpmux
1 7/tcp echo
2 7/udp echo
3 9/tcp discard
4 9/udp discard
5 11/tcp systat
6 13/tcp daytime
7 13/udp daytime
8 15/tcp netstat
9 17/tcp qotd
10 18/tcp msp
11 18/udp msp
12 19/tcp chargen
13 19/udp chargen
14 20/tcp ftp-data
15 21/tcp ftp
16 21/udp fsp
17 22/tcp ssh
18 22/udp ssh
19 23/tcp telnet
20 25/tcp smtp
21 37/tcp time
22 37/udp time
23 39/udp rlp
24 42/tcp nameserver
25 43/tcp whois
26 49/tcp tacacs
27 49/udp tacacs
28 50/tcp re-mail-ck
29 50/udp re-mail-ck
30 53/tcp domain
31 53/udp domain
32 57/tcp mtp
33 65/tcp tacacs-ds
34 65/udp tacacs-ds
35 67/tcp bootps
36 67/udp bootps
37 68/tcp bootpc
38 68/udp bootpc
39 69/udp tftp
40 70/tcp gopher
41 70/udp gopher
42 77/tcp rje
43 79/tcp finger
44 80/tcp http
45 80/udp http
46 87/tcp link
47 88/tcp kerberos
48 88/udp kerberos
49 95/tcp supdup
50 101/tcp hostnames
51 102/tcp iso-tsap
52 104/tcp acr-nema
53 104/udp acr-nema
54 105/tcp csnet-ns
55 105/udp csnet-ns
56 107/tcp rtelnet
57 107/udp rtelnet
58 109/tcp pop2
59 109/udp pop2
60 110/tcp pop3
61 110/udp pop3
62 111/tcp sunrpc
63 111/udp sunrpc
64 113/tcp auth
65 115/tcp sftp
66 117/tcp uucp-path
67 119/tcp nntp
68 123/tcp ntp
69 123/udp ntp
70 129/tcp pwdgen
71 129/udp pwdgen
72 135/tcp loc-srv
73 135/udp loc-srv
74 137/tcp netbios-ns
75 137/udp netbios-ns
76 138/tcp netbios-dgm
77 138/udp netbios-dgm
78 139/tcp netbios-ssn
79 139/udp netbios-ssn
80 143/tcp imap2
81 143/udp imap2
82 161/tcp snmp
83 161/udp snmp
84 162/tcp snmp-trap
85 162/udp snmp-trap
86 163/tcp cmip-man
87 163/udp cmip-man
88 164/tcp cmip-agent
89 164/udp cmip-agent
90 174/tcp mailq
91 174/udp mailq
92 177/tcp xdmcp
93 177/udp xdmcp
94 178/tcp nextstep
95 178/udp nextstep
96 179/tcp bgp
97 179/udp bgp
98 191/tcp prospero
99 191/udp prospero
100 194/tcp irc
101 194/udp irc
102 199/tcp smux
103 199/udp smux
104 201/tcp at-rtmp
105 201/udp at-rtmp
106 202/tcp at-nbp
107 202/udp at-nbp
108 204/tcp at-echo
109 204/udp at-echo
110 206/tcp at-zis
111 206/udp at-zis
112 209/tcp qmtp
113 209/udp qmtp
114 210/tcp z3950
115 210/udp z3950
116 213/tcp ipx
117 213/udp ipx
118 220/tcp imap3
119 220/udp imap3
120 345/tcp pawserv
121 345/udp pawserv
122 346/tcp zserv
123 346/udp zserv
124 347/tcp fatserv
125 347/udp fatserv
126 369/tcp rpc2portmap
127 369/udp rpc2portmap
128 370/tcp codaauth2
129 370/udp codaauth2
130 371/tcp clearcase
131 371/udp clearcase
132 372/tcp ulistserv
133 372/udp ulistserv
134 389/tcp ldap
135 389/udp ldap
136 406/tcp imsp
137 406/udp imsp
138 427/tcp svrloc
139 427/udp svrloc
140 443/tcp https
141 443/udp https
142 444/tcp snpp
143 444/udp snpp
144 445/tcp microsoft-ds
145 445/udp microsoft-ds
146 464/tcp kpasswd
147 464/udp kpasswd
148 465/tcp urd
149 487/tcp saft
150 487/udp saft
151 500/tcp isakmp
152 500/udp isakmp
153 554/tcp rtsp
154 554/udp rtsp
155 607/tcp nqs
156 607/udp nqs
157 610/tcp npmp-local
158 610/udp npmp-local
159 611/tcp npmp-gui
160 611/udp npmp-gui
161 612/tcp hmmp-ind
162 612/udp hmmp-ind
163 623/udp asf-rmcp
164 628/tcp qmqp
165 628/udp qmqp
166 631/tcp ipp
167 631/udp ipp
168 512/tcp exec
169 512/udp biff
170 513/tcp login
171 513/udp who
172 514/tcp shell
173 514/udp syslog
174 515/tcp printer
175 517/udp talk
176 518/udp ntalk
177 520/udp route
178 525/udp timed
179 526/tcp tempo
180 530/tcp courier
181 531/tcp conference
182 532/tcp netnews
183 533/udp netwall
184 538/tcp gdomap
185 538/udp gdomap
186 540/tcp uucp
187 543/tcp klogin
188 544/tcp kshell
189 546/tcp dhcpv6-client
190 546/udp dhcpv6-client
191 547/tcp dhcpv6-server
192 547/udp dhcpv6-server
193 548/tcp afpovertcp
194 548/udp afpovertcp
195 549/tcp idfp
196 549/udp idfp
197 556/tcp remotefs
198 563/tcp nntps
199 563/udp nntps
200 587/tcp submission
201 587/udp submission
202 636/tcp ldaps
203 636/udp ldaps
204 655/tcp tinc
205 655/udp tinc
206 706/tcp silc
207 706/udp silc
208 749/tcp kerberos-adm
209 765/tcp webster
210 765/udp webster
211 873/tcp rsync
212 873/udp rsync
213 989/tcp ftps-data
214 990/tcp ftps
215 992/tcp telnets
216 992/udp telnets
217 993/tcp imaps
218 993/udp imaps
219 994/tcp ircs
220 994/udp ircs
221 995/tcp pop3s
222 995/udp pop3s
223 1080/tcp socks
224 1080/udp socks
225 1093/tcp proofd
226 1093/udp proofd
227 1094/tcp rootd
228 1094/udp rootd
229 1194/tcp openvpn
230 1194/udp openvpn
231 1099/tcp rmiregistry
232 1099/udp rmiregistry
233 1214/tcp kazaa
234 1214/udp kazaa
235 1241/tcp nessus
236 1241/udp nessus
237 1352/tcp lotusnote
238 1352/udp lotusnote
239 1433/tcp ms-sql-s
240 1433/udp ms-sql-s
241 1434/tcp ms-sql-m
242 1434/udp ms-sql-m
243 1524/tcp ingreslock
244 1524/udp ingreslock
245 1525/tcp prospero-np
246 1525/udp prospero-np
247 1645/tcp datametrics
248 1645/udp datametrics
249 1646/tcp sa-msg-port
250 1646/udp sa-msg-port
251 1649/tcp kermit
252 1649/udp kermit
253 1677/tcp groupwise
254 1677/udp groupwise
255 1701/tcp l2f
256 1701/udp l2f
257 1812/tcp radius
258 1812/udp radius
259 1813/tcp radius-acct
260 1813/udp radius-acct
261 1863/tcp msnp
262 1863/udp msnp
263 1957/tcp unix-status
264 1958/tcp log-server
265 1959/tcp remoteping
266 2000/tcp cisco-sccp
267 2000/udp cisco-sccp
268 2010/tcp search
269 2010/tcp pipe-server
270 2049/tcp nfs
271 2049/udp nfs
272 2086/tcp gnunet
273 2086/udp gnunet
274 2101/tcp rtcm-sc104
275 2101/udp rtcm-sc104
276 2119/tcp gsigatekeeper
277 2119/udp gsigatekeeper
278 2135/tcp gris
279 2135/udp gris
280 2401/tcp cvspserver
281 2401/udp cvspserver
282 2430/tcp venus
283 2430/udp venus
284 2431/tcp venus-se
285 2431/udp venus-se
286 2432/tcp codasrv
287 2432/udp codasrv
288 2433/tcp codasrv-se
289 2433/udp codasrv-se
290 2583/tcp mon
291 2583/udp mon
292 2628/tcp dict
293 2628/udp dict
294 2792/tcp f5-globalsite
295 2792/udp f5-globalsite
296 2811/tcp gsiftp
297 2811/udp gsiftp
298 2947/tcp gpsd
299 2947/udp gpsd
300 3050/tcp gds-db
301 3050/udp gds-db
302 3130/tcp icpv2
303 3130/udp icpv2
304 3260/tcp iscsi-target
305 3306/tcp mysql
306 3306/udp mysql
307 3493/tcp nut
308 3493/udp nut
309 3632/tcp distcc
310 3632/udp distcc
311 3689/tcp daap
312 3689/udp daap
313 3690/tcp svn
314 3690/udp svn
315 4031/tcp suucp
316 4031/udp suucp
317 4094/tcp sysrqd
318 4094/udp sysrqd
319 4190/tcp sieve
320 4369/tcp epmd
321 4369/udp epmd
322 4373/tcp remctl
323 4373/udp remctl
324 4353/tcp f5-iquery
325 4353/udp f5-iquery
326 4500/udp ipsec-nat-t
327 4569/tcp iax
328 4569/udp iax
329 4691/tcp mtn
330 4691/udp mtn
331 4899/tcp radmin-port
332 4899/udp radmin-port
333 5002/udp rfe
334 5002/tcp rfe
335 5050/tcp mmcc
336 5050/udp mmcc
337 5060/tcp sip
338 5060/udp sip
339 5061/tcp sip-tls
340 5061/udp sip-tls
341 5190/tcp aol
342 5190/udp aol
343 5222/tcp xmpp-client
344 5222/udp xmpp-client
345 5269/tcp xmpp-server
346 5269/udp xmpp-server
347 5308/tcp cfengine
348 5308/udp cfengine
349 5353/tcp mdns
350 5353/udp mdns
351 5432/tcp postgresql
352 5432/udp postgresql
353 5556/tcp freeciv
354 5556/udp freeciv
355 5671/tcp amqps
356 5672/tcp amqp
357 5672/udp amqp
358 5672/sctp amqp
359 5688/tcp ggz
360 5688/udp ggz
361 6000/tcp x11
362 6000/udp x11
363 6001/tcp x11-1
364 6001/udp x11-1
365 6002/tcp x11-2
366 6002/udp x11-2
367 6003/tcp x11-3
368 6003/udp x11-3
369 6004/tcp x11-4
370 6004/udp x11-4
371 6005/tcp x11-5
372 6005/udp x11-5
373 6006/tcp x11-6
374 6006/udp x11-6
375 6007/tcp x11-7
376 6007/udp x11-7
377 6346/tcp gnutella-svc
378 6346/udp gnutella-svc
379 6347/tcp gnutella-rtr
380 6347/udp gnutella-rtr
381 6444/tcp sge-qmaster
382 6444/udp sge-qmaster
383 6445/tcp sge-execd
384 6445/udp sge-execd
385 6446/tcp mysql-proxy
386 6446/udp mysql-proxy
387 7000/tcp afs3-fileserver
388 7000/udp afs3-fileserver
389 7001/tcp afs3-callback
390 7001/udp afs3-callback
391 7002/tcp afs3-prserver
392 7002/udp afs3-prserver
393 7003/tcp afs3-vlserver
394 7003/udp afs3-vlserver
395 7004/tcp afs3-kaserver
396 7004/udp afs3-kaserver
397 7005/tcp afs3-volser
398 7005/udp afs3-volser
399 7006/tcp afs3-errors
400 7006/udp afs3-errors
401 7007/tcp afs3-bos
402 7007/udp afs3-bos
403 7008/tcp afs3-update
404 7008/udp afs3-update
405 7009/tcp afs3-rmtsys
406 7009/udp afs3-rmtsys
407 7100/tcp font-service
408 7100/udp font-service
409 8080/tcp http-alt
410 8080/udp http-alt
411 9101/tcp bacula-dir
412 9101/udp bacula-dir
413 9102/tcp bacula-fd
414 9102/udp bacula-fd
415 9103/tcp bacula-sd
416 9103/udp bacula-sd
417 9667/tcp xmms2
418 9667/udp xmms2
419 10809/tcp nbd
420 10050/tcp zabbix-agent
421 10050/udp zabbix-agent
422 10051/tcp zabbix-trapper
423 10051/udp zabbix-trapper
424 10080/tcp amanda
425 10080/udp amanda
426 11112/tcp dicom
427 11371/tcp hkp
428 11371/udp hkp
429 13720/tcp bprd
430 13720/udp bprd
431 13721/tcp bpdbm
432 13721/udp bpdbm
433 13722/tcp bpjava-msvc
434 13722/udp bpjava-msvc
435 13724/tcp vnetd
436 13724/udp vnetd
437 13782/tcp bpcd
438 13782/udp bpcd
439 13783/tcp vopied
440 13783/udp vopied
441 17500/tcp db-lsp
442 22125/tcp dcap
443 22128/tcp gsidcap
444 22273/tcp wnn6
445 22273/udp wnn6
446 1/ddp rtmp
447 2/ddp nbp
448 4/ddp echo
449 6/ddp zip
450 750/udp kerberos4
451 750/tcp kerberos4
452 751/udp kerberos-master
453 751/tcp kerberos-master
454 752/udp passwd-server
455 754/tcp krb-prop
456 760/tcp krbupdate
457 901/tcp swat
458 1109/tcp kpop
459 2053/tcp knetd
460 2102/udp zephyr-srv
461 2103/udp zephyr-clt
462 2104/udp zephyr-hm
463 2105/tcp eklogin
464 2111/tcp kx
465 2121/tcp iprop
466 871/tcp supfilesrv
467 1127/tcp supfiledbg
468 98/tcp linuxconf
469 106/tcp poppassd
470 106/udp poppassd
471 775/tcp moira-db
472 777/tcp moira-update
473 779/udp moira-ureg
474 783/tcp spamd
475 808/tcp omirr
476 808/udp omirr
477 1001/tcp customs
478 1001/udp customs
479 1178/tcp skkserv
480 1210/udp predict
481 1236/tcp rmtcfg
482 1300/tcp wipld
483 1313/tcp xtel
484 1314/tcp xtelw
485 1529/tcp support
486 2003/tcp cfinger
487 2121/tcp frox
488 2150/tcp ninstall
489 2150/udp ninstall
490 2600/tcp zebrasrv
491 2601/tcp zebra
492 2602/tcp ripd
493 2603/tcp ripngd
494 2604/tcp ospfd
495 2605/tcp bgpd
496 2606/tcp ospf6d
497 2607/tcp ospfapi
498 2608/tcp isisd
499 2988/tcp afbackup
500 2988/udp afbackup
501 2989/tcp afmbackup
502 2989/udp afmbackup
503 4224/tcp xtell
504 4557/tcp fax
505 4559/tcp hylafax
506 4600/tcp distmp3
507 4949/tcp munin
508 5051/tcp enbd-cstatd
509 5052/tcp enbd-sstatd
510 5151/tcp pcrd
511 5354/tcp noclog
512 5354/udp noclog
513 5355/tcp hostmon
514 5355/udp hostmon
515 5555/udp rplay
516 5666/tcp nrpe
517 5667/tcp nsca
518 5674/tcp mrtd
519 5675/tcp bgpsim
520 5680/tcp canna
521 6514/tcp syslog-tls
522 6566/tcp sane-port
523 6667/tcp ircd
524 8021/tcp zope-ftp
525 8081/tcp tproxy
526 8088/tcp omniorb
527 8088/udp omniorb
528 8990/tcp clc-build-daemon
529 9098/tcp xinetd
530 9359/udp mandelspawn
531 9418/tcp git
532 9673/tcp zope
533 10000/tcp webmin
534 10081/tcp kamanda
535 10081/udp kamanda
536 10082/tcp amandaidx
537 10083/tcp amidxtape
538 11201/tcp smsqp
539 11201/udp smsqp
540 15345/tcp xpilot
541 15345/udp xpilot
542 17001/udp sgi-cmsd
543 17002/udp sgi-crsd
544 17003/udp sgi-gcd
545 17004/tcp sgi-cad
546 20011/tcp isdnlog
547 20011/udp isdnlog
548 20012/tcp vboxd
549 20012/udp vboxd
550 24554/tcp binkp
551 27374/tcp asp
552 27374/udp asp
553 30865/tcp csync2
554 57000/tcp dircproxy
555 60177/tcp tfido
556 60179/tcp fido
557 1027/udp Native IPv6 behind IPv4-to-IPv4 NAT Customer Premises Equipment (6a44)
558 1058/tcp nim, IBM AIX Network Installation Manager (NIM)
559 1058/udp nim, IBM AIX Network Installation Manager (NIM)
560 1059/tcp nimreg, IBM AIX Network Installation Manager (NIM)
561 1059/udp nimreg, IBM AIX Network Installation Manager (NIM)
562 1080/tcp SOCKS proxy
563 1080/udp SOCKS proxy
564 1085/tcp WebObjects
565 1085/udp WebObjects
566 1098/tcp rmiactivation, Java remote method invocation (RMI) activation
567 1098/udp rmiactivation, Java remote method invocation (RMI) activation
568 1099/tcp rmiregistry, Java remote method invocation (RMI) registry
569 1099/assigned rmiregistry, Java remote method invocation (RMI) registry
570 1119/tcp Battle.net chat/game protocol, used by Blizzard's games
571 1119/udp Battle.net chat/game protocol, used by Blizzard's games
572 1167/udp Cisco IP SLA (Service Assurance Agent)
573 1167/tcp Cisco IP SLA (Service Assurance Agent)
574 1194/udp OpenVPN
575 1194/tcp OpenVPN
576 1198/udp The cajo project Free dynamic transparent distributed computing in Java
577 1198/tcp The cajo project Free dynamic transparent distributed computing in Java
578 1214/udp Kazaa
579 1214/tcp Kazaa
580 1234/udp Infoseek search agent
581 1234/tcp Infoseek search agent
582 1241/udp Nessus Security Scanner
583 1241/tcp Nessus Security Scanner
584 1270/udp Microsoft System Center Operations Manager (SCOM) (formerly Microsoft Operations Manager (MOM)) agent
585 1270/tcp Microsoft System Center Operations Manager (SCOM) (formerly Microsoft Operations Manager (MOM)) agent
586 1293/udp Internet Protocol Security (IPSec)
587 1293/tcp Internet Protocol Security (IPSec)
588 1311/udp Windows RxMon.exe
589 1311/tcp Windows RxMon.exe
590 1341/udp Qubes (Manufacturing Execution System)
591 1341/tcp Qubes (Manufacturing Execution System)
592 1344/udp Internet Content Adaptation Protocol
593 1344/tcp Internet Content Adaptation Protocol
594 1352/udp IBM Lotus Notes/Domino (RPC) protocol
595 1352/tcp IBM Lotus Notes/Domino (RPC) protocol
596 1360/udp Mimer SQL
597 1360/tcp Mimer SQL
598 1414/udp IBM WebSphere MQ (formerly known as MQSeries)
599 1414/tcp IBM WebSphere MQ (formerly known as MQSeries)
600 1417/udp Timbuktu Service 1 Port
601 1417/tcp Timbuktu Service 1 Port
602 1418/udp Timbuktu Service 2 Port
603 1418/tcp Timbuktu Service 2 Port
604 1419/udp Timbuktu Service 3 Port
605 1419/tcp Timbuktu Service 3 Port
606 1420/udp Timbuktu Service 4 Port
607 1420/tcp Timbuktu Service 4 Port
608 1433/udp Microsoft SQL Server database management system (MSSQL) server
609 1433/tcp Microsoft SQL Server database management system (MSSQL) server
610 1434/udp Microsoft SQL Server database management system (MSSQL) monitor
611 1434/tcp Microsoft SQL Server database management system (MSSQL) monitor
612 1512/udp Microsoft's Windows Internet Name Service (WINS)
613 1512/tcp Microsoft's Windows Internet Name Service (WINS)
614 1521/udp nCUBE License Manager
615 1521/tcp nCUBE License Manager
616 1524/udp ingreslock, ingres
617 1524/tcp ingreslock, ingres
618 1527/udp Oracle Net Services, formerly known as SQL*Net
619 1527/tcp Oracle Net Services, formerly known as SQL*Net
620 1533/udp IBM Sametime Virtual Places Chat
621 1533/tcp IBM Sametime Virtual Places Chat
622 1547/udp Laplink
623 1547/tcp Laplink
624 1581/udp MIL STD 2045-47001 VMF
625 1581/tcp MIL STD 2045-47001 VMF
626 1589/udp Cisco VLAN Query Protocol (VQP)
627 1589/tcp Cisco VLAN Query Protocol (VQP)
628 1628/udp LonTalk normal
629 1628/tcp LonTalk normal
630 1629/udp LonTalk urgent
631 1629/tcp LonTalk urgent
632 1677/udp Novell GroupWise clients in client/server access mode
633 1677/tcp Novell GroupWise clients in client/server access mode
634 1701/udp Layer 2 Forwarding Protocol (L2F)
635 1701/tcp Layer 2 Forwarding Protocol (L2F)
636 1701/udp Layer 2 Tunneling Protocol (L2TP)
637 1701/assigned Layer 2 Tunneling Protocol (L2TP)
638 1707/udp Windward Studios games (vdmplay)
639 1707/tcp Windward Studios games (vdmplay)
640 1719/udp H.323 registration and alternate communication
641 1719/tcp H.323 registration and alternate communication
642 1720/udp H.323 call signaling
643 1720/tcp H.323 call signaling
644 1755/udp Microsoft Media Services (MMS, ms-streaming)
645 1755/tcp Microsoft Media Services (MMS, ms-streaming)
646 1801/udp Microsoft Message Queuing
647 1801/tcp Microsoft Message Queuing
648 1812/udp RADIUS authentication protocol, radius
649 1812/tcp RADIUS authentication protocol, radius
650 1813/udp RADIUS accounting protocol, radius-acct
651 1813/tcp RADIUS accounting protocol, radius-acct
652 1863/udp Microsoft Notification Protocol (MSNP), used by the Microsoft Messenger service and a number of instant messaging Messenger clients
653 1863/tcp Microsoft Notification Protocol (MSNP), used by the Microsoft Messenger service and a number of instant messaging Messenger clients
654 1883/udp MQTT (formerly MQ Telemetry Transport)
655 1883/tcp MQTT (formerly MQ Telemetry Transport)
656 1900/udp Simple Service Discovery Protocol (SSDP), discovery of UPnP devices
657 1900/assigned Simple Service Discovery Protocol (SSDP), discovery of UPnP devices
658 1935/udp Macromedia Flash Communications Server MX, the precursor to Adobe Flash Media Server before Macromedia's acquisition by Adobe on December 3, 2005
659 1935/tcp Macromedia Flash Communications Server MX, the precursor to Adobe Flash Media Server before Macromedia's acquisition by Adobe on December 3, 2005
660 1970/udp Netop Remote Control
661 1970/tcp Netop Remote Control
662 1972/udp InterSystems Caché
663 1972/tcp InterSystems Caché
664 1984/udp Big Brother
665 1984/tcp Big Brother
666 1985/udp Cisco Hot Standby Router Protocol (HSRP)
667 1985/assigned Cisco Hot Standby Router Protocol (HSRP)
668 1998/udp Cisco X.25 over TCP (XOT) service
669 1998/tcp Cisco X.25 over TCP (XOT) service
670 2000/udp Cisco Skinny Client Control Protocol (SCCP)
671 2000/tcp Cisco Skinny Client Control Protocol (SCCP)
672 2080/udp Autodesk NLM (FLEXlm)
673 2080/tcp Autodesk NLM (FLEXlm)
674 2083/udp Secure RADIUS Service (radsec)
675 2083/tcp Secure RADIUS Service (radsec)
676 2086/udp GNUnet
677 2086/tcp GNUnet
678 2102/udp Zephyr Notification Service server
679 2102/tcp Zephyr Notification Service server
680 2103/udp Zephyr Notification Service serv-hm connection
681 2103/tcp Zephyr Notification Service serv-hm connection
682 2104/udp Zephyr Notification Service hostmanager
683 2104/tcp Zephyr Notification Service hostmanager
684 2123/udp GTP control messages (GTP-C)
685 2123/tcp GTP control messages (GTP-C)
686 2142/udp TDMoIP (TDM over IP)
687 2142/tcp TDMoIP (TDM over IP)
688 2152/udp GTP user data messages (GTP-U)
689 2152/tcp GTP user data messages (GTP-U)
690 2159/udp GDB remote debug port
691 2159/tcp GDB remote debug port
692 2181/udp EForward-document transport system
693 2181/tcp EForward-document transport system
694 2210/udp NOAAPORT Broadcast Network
695 2210/tcp NOAAPORT Broadcast Network
696 2211/udp EMWIN
697 2211/tcp EMWIN
698 2222/udp EtherNet/IP implicit messaging for IO data
699 2222/tcp EtherNet/IP implicit messaging for IO data
700 2261/udp CoMotion master
701 2261/tcp CoMotion master
702 2262/udp CoMotion backup
703 2262/tcp CoMotion backup
704 2266/udp M-Files
705 2266/tcp M-Files
706 2399/udp FileMaker Data Access Layer (ODBC/JDBC)
707 2399/tcp FileMaker Data Access Layer (ODBC/JDBC)
708 2401/udp CVS version control system password-based server
709 2401/tcp CVS version control system password-based server
710 2404/udp IEC 60870-5-104, used to send electric power telecontrol messages between two systems via directly connected data circuits
711 2404/tcp IEC 60870-5-104, used to send electric power telecontrol messages between two systems via directly connected data circuits
712 2427/udp Media Gateway Control Protocol (MGCP) media gateway
713 2427/tcp Media Gateway Control Protocol (MGCP) media gateway
714 2447/udp ovwdb—OpenView Network Node Manager (NNM) daemon
715 2447/tcp ovwdb—OpenView Network Node Manager (NNM) daemon
716 2483/udp Oracle database listening for insecure client connections to the listener, replaces port 1521
717 2483/tcp Oracle database listening for insecure client connections to the listener, replaces port 1521
718 2484/udp Oracle database listening for SSL client connections to the listener
719 2484/tcp Oracle database listening for SSL client connections to the listener
720 2535/udp Multicast Address Dynamic Client Allocation Protocol (MADCAP). All standard messages are UDP datagrams.
721 2535/tcp Multicast Address Dynamic Client Allocation Protocol (MADCAP). All standard messages are UDP datagrams.
722 2541/udp LonTalk/IP
723 2541/tcp LonTalk/IP
724 2546/udp EVault data protection services
725 2546/tcp EVault data protection services
726 2547/udp EVault data protection services
727 2547/tcp EVault data protection services
728 2548/udp EVault data protection services
729 2548/tcp EVault data protection services
730 2638/udp SQL Anywhere database server
731 2638/tcp SQL Anywhere database server
732 2727/udp Media Gateway Control Protocol (MGCP) media gateway controller (call agent)
733 2727/tcp Media Gateway Control Protocol (MGCP) media gateway controller (call agent)
734 2809/udp corbaloc:iiop URL, per the CORBA 3.0.3 specification
735 2809/tcp corbaloc:iiop URL, per the CORBA 3.0.3 specification
736 2811/udp gsi ftp, per the GridFTP specification
737 2811/tcp gsi ftp, per the GridFTP specification
738 2944/udp Megaco text H.248
739 2944/tcp Megaco text H.248
740 2945/udp Megaco binary (ASN.1) H.248
741 2945/tcp Megaco binary (ASN.1) H.248
742 2947/udp gpsd, GPS daemon
743 2947/tcp gpsd, GPS daemon
744 2948/udp WAP push Multimedia Messaging Service (MMS)
745 2948/tcp WAP push Multimedia Messaging Service (MMS)
746 2949/udp WAP push secure (MMS)
747 2949/tcp WAP push secure (MMS)
748 2967/udp Symantec System Center agent (SSC-AGENT)
749 2967/tcp Symantec System Center agent (SSC-AGENT)
750 3020/udp Common Internet File System (CIFS). See also port 445 for Server Message Block (SMB), a dialect of CIFS.
751 3020/tcp Common Internet File System (CIFS). See also port 445 for Server Message Block (SMB), a dialect of CIFS.
752 3050/udp gds-db (Interbase/Firebird databases)
753 3050/tcp gds-db (Interbase/Firebird databases)
754 3052/udp APC PowerChute Network
755 3052/tcp APC PowerChute Network
756 3074/udp Xbox LIVE and Games for Windows – Live
757 3074/tcp Xbox LIVE and Games for Windows – Live
758 3225/udp Fibre Channel over IP (FCIP)
759 3225/tcp Fibre Channel over IP (FCIP)
760 3233/udp WhiskerControl research control protocol
761 3233/tcp WhiskerControl research control protocol
762 3260/udp iSCSI
763 3260/tcp iSCSI
764 3268/udp msft-gc, Microsoft Global Catalog (LDAP service which contains data from Active Directory forests)
765 3268/tcp msft-gc, Microsoft Global Catalog (LDAP service which contains data from Active Directory forests)
766 3269/udp msft-gc-ssl, Microsoft Global Catalog over SSL (similar to port 3268, LDAP over SSL)
767 3269/tcp msft-gc-ssl, Microsoft Global Catalog over SSL (similar to port 3268, LDAP over SSL)
768 3283/udp Net Assistant, a predecessor to Apple Remote Desktop
769 3283/tcp Net Assistant, a predecessor to Apple Remote Desktop
770 3305/udp Odette File Transfer Protocol (OFTP)
771 3305/tcp Odette File Transfer Protocol (OFTP)
772 3386/udp GTP' 3GPP GSM/UMTS CDR logging protocol
773 3386/tcp GTP' 3GPP GSM/UMTS CDR logging protocol
774 3389/udp Microsoft Terminal Server (RDP) officially registered as Windows Based Terminal (WBT)
775 3389/tcp Microsoft Terminal Server (RDP) officially registered as Windows Based Terminal (WBT)
776 3396/udp Novell NDPS Printer Agent
777 3396/tcp Novell NDPS Printer Agent
778 3412/udp xmlBlaster
779 3412/tcp xmlBlaster
780 3455/udp Resource Reservation Protocol (RSVP)
781 3455/tcp Resource Reservation Protocol (RSVP)
782 3478/udp STUN, a protocol for NAT traversal
783 3478/tcp STUN, a protocol for NAT traversal
784 3478/udp TURN, a protocol for NAT traversal (extension to STUN)
785 3478/tcp TURN, a protocol for NAT traversal (extension to STUN)
786 3478/udp STUN Behavior Discovery. See also port 5349.
787 3478/tcp STUN Behavior Discovery. See also port 5349.
788 3493/udp Network UPS Tools (NUT)
789 3493/tcp Network UPS Tools (NUT)
790 3516/udp Smartcard Port
791 3516/tcp Smartcard Port
792 3645/udp Cyc
793 3645/tcp Cyc
794 3659/udp Apple SASL, used by Mac OS X Server Password Server
795 3659/tcp Apple SASL, used by Mac OS X Server Password Server
796 3667/udp Information Exchange
797 3667/tcp Information Exchange
798 3690/udp Subversion (SVN) version control system
799 3690/tcp Subversion (SVN) version control system
800 3702/udp Web Services Dynamic Discovery (WS-Discovery), used by various components of Windows Vista and later
801 3702/tcp Web Services Dynamic Discovery (WS-Discovery), used by various components of Windows Vista and later
802 3724/udp Some Blizzard games
803 3724/tcp Some Blizzard games
804 3725/udp Netia NA-ER Port
805 3725/tcp Netia NA-ER Port
806 3768/udp RBLcheckd server daemon
807 3768/tcp RBLcheckd server daemon
808 3804/udp Harman Professional HiQnet protocol
809 3804/tcp Harman Professional HiQnet protocol
810 3826/udp WarMUX game server
811 3826/tcp WarMUX game server
812 3830/udp System Management Agent, developed and used by Cerner to monitor and manage solutions
813 3830/tcp System Management Agent, developed and used by Cerner to monitor and manage solutions
814 3880/udp IGRS
815 3880/tcp IGRS
816 3999/udp Norman distributed scanning service
817 3999/tcp Norman distributed scanning service
818 4018/udp Protocol information and warnings
819 4018/tcp Protocol information and warnings
820 4089/udp OpenCORE Remote Control Service
821 4089/tcp OpenCORE Remote Control Service
822 4090/udp Kerio
823 4090/tcp Kerio
824 4093/udp PxPlus Client server interface ProvideX
825 4093/tcp PxPlus Client server interface ProvideX
826 4096/udp Ascom Timeplex Bridge Relay Element (BRE)
827 4096/tcp Ascom Timeplex Bridge Relay Element (BRE)
828 4105/udp Shofar (ShofarNexus)
829 4105/tcp Shofar (ShofarNexus)
830 4116/udp Smartcard-TLS
831 4116/tcp Smartcard-TLS
832 4172/udp Teradici PCoIP
833 4172/tcp Teradici PCoIP
834 4303/udp Simple Railroad Command Protocol (SRCP)
835 4303/tcp Simple Railroad Command Protocol (SRCP)
836 4486/udp Integrated Client Message Service (ICMS)
837 4486/tcp Integrated Client Message Service (ICMS)
838 4500/udp IPSec NAT Traversal (RFC 3947, RFC 4306)
839 4500/assigned IPSec NAT Traversal (RFC 3947, RFC 4306)
840 4662/udp OrbitNet Message Service
841 4662/tcp OrbitNet Message Service
842 4730/udp Gearman's job server
843 4730/tcp Gearman's job server
844 4739/udp IP Flow Information Export
845 4739/tcp IP Flow Information Export
846 4753/udp SIMON (service and discovery)
847 4753/tcp SIMON (service and discovery)
848 4840/udp OPC UA Connection Protocol (TCP) and OPC UA Multicast Datagram Protocol (UDP) for OPC Unified Architecture from OPC Foundation
849 4840/tcp OPC UA Connection Protocol (TCP) and OPC UA Multicast Datagram Protocol (UDP) for OPC Unified Architecture from OPC Foundation
850 4843/udp OPC UA TCP Protocol over TLS/SSL for OPC Unified Architecture from OPC Foundation
851 4843/tcp OPC UA TCP Protocol over TLS/SSL for OPC Unified Architecture from OPC Foundation
852 4847/udp Web Fresh Communication, Quadrion Software & Odorless Entertainment
853 4847/tcp Web Fresh Communication, Quadrion Software & Odorless Entertainment
854 4894/udp LysKOM Protocol A
855 4894/tcp LysKOM Protocol A
856 4950/udp Cylon Controls UC32 Communications Port
857 4950/tcp Cylon Controls UC32 Communications Port
858 5010/udp Registered to: TelePath (the IBM FlowMark workflow-management system messaging platform). The TCP port is now used for: IBM WebSphere MQ Workflow
859 5010/tcp Registered to: TelePath (the IBM FlowMark workflow-management system messaging platform). The TCP port is now used for: IBM WebSphere MQ Workflow
860 5011/udp TelePath (the IBM FlowMark workflow-management system messaging platform)
861 5011/tcp TelePath (the IBM FlowMark workflow-management system messaging platform)
862 5025/udp scpi-raw Standard Commands for Programmable Instruments
863 5025/tcp scpi-raw Standard Commands for Programmable Instruments
864 5060/udp Session Initiation Protocol (SIP)
865 5060/tcp Session Initiation Protocol (SIP)
866 5062/udp Localisation access
867 5062/tcp Localisation access
868 5064/udp EPICS Channel Access server
869 5064/tcp EPICS Channel Access server
870 5065/udp EPICS Channel Access repeater beacon
871 5065/tcp EPICS Channel Access repeater beacon
872 5084/udp EPCglobal Low Level Reader Protocol (LLRP)
873 5084/tcp EPCglobal Low Level Reader Protocol (LLRP)
874 5085/udp EPCglobal Low Level Reader Protocol (LLRP) over TLS
875 5085/tcp EPCglobal Low Level Reader Protocol (LLRP) over TLS
876 5099/udp SafeNet, Inc Sentinel LM, Sentinel RMS, License Manager, server-to-server
877 5099/tcp SafeNet, Inc Sentinel LM, Sentinel RMS, License Manager, server-to-server
878 5150/udp ATMP Ascend Tunnel Management Protocol
879 5150/tcp ATMP Ascend Tunnel Management Protocol
880 5154/udp BZFlag
881 5154/tcp BZFlag
882 5190/udp AOL Instant Messenger protocol. The chat app is defunct as of 15 December 2017.
883 5190/tcp AOL Instant Messenger protocol. The chat app is defunct as of 15 December 2017.
884 5298/udp Extensible Messaging and Presence Protocol (XMPP)
885 5298/tcp Extensible Messaging and Presence Protocol (XMPP)
886 5310/udp Outlaws (1997 video game). Both UDP and TCP are reserved, but only UDP is used
887 5310/tcp Outlaws (1997 video game). Both UDP and TCP are reserved, but only UDP is used
888 5353/udp Multicast DNS (mDNS)
889 5353/assigned Multicast DNS (mDNS)
890 5355/udp Link-Local Multicast Name Resolution (LLMNR), allows hosts to perform name resolution for hosts on the same local link (only provided by Windows Vista and Server 2008)
891 5355/tcp Link-Local Multicast Name Resolution (LLMNR), allows hosts to perform name resolution for hosts on the same local link (only provided by Windows Vista and Server 2008)
892 5402/udp Multicast File Transfer Protocol (MFTP)
893 5402/tcp Multicast File Transfer Protocol (MFTP)
894 5405/udp NetSupport Manager
895 5405/tcp NetSupport Manager
896 5412/udp IBM Rational Synergy (Telelogic Synergy) (Continuus CM) Message Router
897 5412/tcp IBM Rational Synergy (Telelogic Synergy) (Continuus CM) Message Router
898 5413/udp Wonderware SuiteLink service
899 5413/tcp Wonderware SuiteLink service
900 5417/udp SNS Agent
901 5417/tcp SNS Agent
902 5421/udp NetSupport Manager
903 5421/tcp NetSupport Manager
904 5556/udp Freeciv, Oracle WebLogic Server Node Manager
905 5556/tcp Freeciv, Oracle WebLogic Server Node Manager
906 5568/udp Session Data Transport (SDT), a part of Architecture for Control Networks (ACN)
907 5568/tcp Session Data Transport (SDT), a part of Architecture for Control Networks (ACN)
908 5722/udp Microsoft RPC, DFSR (SYSVOL) Replication Service
909 5722/tcp Microsoft RPC, DFSR (SYSVOL) Replication Service
910 5741/udp IDA Discover Port 1
911 5741/tcp IDA Discover Port 1
912 5742/udp IDA Discover Port 2
913 5742/tcp IDA Discover Port 2
914 5900/udp Remote Frame Buffer protocol (RFB)
915 5900/tcp Remote Frame Buffer protocol (RFB)
916 5931/udp AMMYY admin Remote Control
917 5931/tcp AMMYY admin Remote Control
918 5984/udp CouchDB database server
919 5984/tcp CouchDB database server
920 6000/udp X11-used between an X client and server over the network
921 6000/tcp X11-used between an X client and server over the network
922 6001/udp X11-used between an X client and server over the network
923 6001/tcp X11-used between an X client and server over the network
924 6002/udp X11-used between an X client and server over the network
925 6002/tcp X11-used between an X client and server over the network
926 6003/udp X11-used between an X client and server over the network
927 6003/tcp X11-used between an X client and server over the network
928 6004/udp X11-used between an X client and server over the network
929 6004/tcp X11-used between an X client and server over the network
930 6005/udp X11-used between an X client and server over the network
931 6005/tcp X11-used between an X client and server over the network
932 6006/udp X11-used between an X client and server over the network
933 6006/tcp X11-used between an X client and server over the network
934 6007/udp X11-used between an X client and server over the network
935 6007/tcp X11-used between an X client and server over the network
936 6008/udp X11-used between an X client and server over the network
937 6008/tcp X11-used between an X client and server over the network
938 6009/udp X11-used between an X client and server over the network
939 6009/tcp X11-used between an X client and server over the network
940 6010/udp X11-used between an X client and server over the network
941 6010/tcp X11-used between an X client and server over the network
942 6011/udp X11-used between an X client and server over the network
943 6011/tcp X11-used between an X client and server over the network
944 6012/udp X11-used between an X client and server over the network
945 6012/tcp X11-used between an X client and server over the network
946 6013/udp X11-used between an X client and server over the network
947 6013/tcp X11-used between an X client and server over the network
948 6014/udp X11-used between an X client and server over the network
949 6014/tcp X11-used between an X client and server over the network
950 6015/udp X11-used between an X client and server over the network
951 6015/tcp X11-used between an X client and server over the network
952 6016/udp X11-used between an X client and server over the network
953 6016/tcp X11-used between an X client and server over the network
954 6017/udp X11-used between an X client and server over the network
955 6017/tcp X11-used between an X client and server over the network
956 6018/udp X11-used between an X client and server over the network
957 6018/tcp X11-used between an X client and server over the network
958 6019/udp X11-used between an X client and server over the network
959 6019/tcp X11-used between an X client and server over the network
960 6020/udp X11-used between an X client and server over the network
961 6020/tcp X11-used between an X client and server over the network
962 6021/udp X11-used between an X client and server over the network
963 6021/tcp X11-used between an X client and server over the network
964 6022/udp X11-used between an X client and server over the network
965 6022/tcp X11-used between an X client and server over the network
966 6023/udp X11-used between an X client and server over the network
967 6023/tcp X11-used between an X client and server over the network
968 6024/udp X11-used between an X client and server over the network
969 6024/tcp X11-used between an X client and server over the network
970 6025/udp X11-used between an X client and server over the network
971 6025/tcp X11-used between an X client and server over the network
972 6026/udp X11-used between an X client and server over the network
973 6026/tcp X11-used between an X client and server over the network
974 6027/udp X11-used between an X client and server over the network
975 6027/tcp X11-used between an X client and server over the network
976 6028/udp X11-used between an X client and server over the network
977 6028/tcp X11-used between an X client and server over the network
978 6029/udp X11-used between an X client and server over the network
979 6029/tcp X11-used between an X client and server over the network
980 6030/udp X11-used between an X client and server over the network
981 6030/tcp X11-used between an X client and server over the network
982 6031/udp X11-used between an X client and server over the network
983 6031/tcp X11-used between an X client and server over the network
984 6032/udp X11-used between an X client and server over the network
985 6032/tcp X11-used between an X client and server over the network
986 6033/udp X11-used between an X client and server over the network
987 6033/tcp X11-used between an X client and server over the network
988 6034/udp X11-used between an X client and server over the network
989 6034/tcp X11-used between an X client and server over the network
990 6035/udp X11-used between an X client and server over the network
991 6035/tcp X11-used between an X client and server over the network
992 6036/udp X11-used between an X client and server over the network
993 6036/tcp X11-used between an X client and server over the network
994 6037/udp X11-used between an X client and server over the network
995 6037/tcp X11-used between an X client and server over the network
996 6038/udp X11-used between an X client and server over the network
997 6038/tcp X11-used between an X client and server over the network
998 6039/udp X11-used between an X client and server over the network
999 6039/tcp X11-used between an X client and server over the network
1000 6040/udp X11-used between an X client and server over the network
1001 6040/tcp X11-used between an X client and server over the network
1002 6041/udp X11-used between an X client and server over the network
1003 6041/tcp X11-used between an X client and server over the network
1004 6042/udp X11-used between an X client and server over the network
1005 6042/tcp X11-used between an X client and server over the network
1006 6043/udp X11-used between an X client and server over the network
1007 6043/tcp X11-used between an X client and server over the network
1008 6044/udp X11-used between an X client and server over the network
1009 6044/tcp X11-used between an X client and server over the network
1010 6045/udp X11-used between an X client and server over the network
1011 6045/tcp X11-used between an X client and server over the network
1012 6046/udp X11-used between an X client and server over the network
1013 6046/tcp X11-used between an X client and server over the network
1014 6047/udp X11-used between an X client and server over the network
1015 6047/tcp X11-used between an X client and server over the network
1016 6048/udp X11-used between an X client and server over the network
1017 6048/tcp X11-used between an X client and server over the network
1018 6049/udp X11-used between an X client and server over the network
1019 6049/tcp X11-used between an X client and server over the network
1020 6050/udp X11-used between an X client and server over the network
1021 6050/tcp X11-used between an X client and server over the network
1022 6051/udp X11-used between an X client and server over the network
1023 6051/tcp X11-used between an X client and server over the network
1024 6052/udp X11-used between an X client and server over the network
1025 6052/tcp X11-used between an X client and server over the network
1026 6053/udp X11-used between an X client and server over the network
1027 6053/tcp X11-used between an X client and server over the network
1028 6054/udp X11-used between an X client and server over the network
1029 6054/tcp X11-used between an X client and server over the network
1030 6055/udp X11-used between an X client and server over the network
1031 6055/tcp X11-used between an X client and server over the network
1032 6056/udp X11-used between an X client and server over the network
1033 6056/tcp X11-used between an X client and server over the network
1034 6057/udp X11-used between an X client and server over the network
1035 6057/tcp X11-used between an X client and server over the network
1036 6058/udp X11-used between an X client and server over the network
1037 6058/tcp X11-used between an X client and server over the network
1038 6059/udp X11-used between an X client and server over the network
1039 6059/tcp X11-used between an X client and server over the network
1040 6060/udp X11-used between an X client and server over the network
1041 6060/tcp X11-used between an X client and server over the network
1042 6061/udp X11-used between an X client and server over the network
1043 6061/tcp X11-used between an X client and server over the network
1044 6062/udp X11-used between an X client and server over the network
1045 6062/tcp X11-used between an X client and server over the network
1046 6063/udp X11-used between an X client and server over the network
1047 6063/tcp X11-used between an X client and server over the network
1048 6110/udp softcm, HP Softbench CM
1049 6110/tcp softcm, HP Softbench CM
1050 6111/udp spc, HP Softbench Sub-Process Control
1051 6111/tcp spc, HP Softbench Sub-Process Control
1052 6112/udp dtspcd, execute commands and launch applications remotely
1053 6112/tcp dtspcd, execute commands and launch applications remotely
1054 6346/udp gnutella-svc, gnutella (FrostWire, Limewire, Shareaza, etc.)
1055 6346/tcp gnutella-svc, gnutella (FrostWire, Limewire, Shareaza, etc.)
1056 6347/udp gnutella-rtr, Gnutella alternate
1057 6347/tcp gnutella-rtr, Gnutella alternate
1058 6350/udp App Discovery and Access Protocol
1059 6350/tcp App Discovery and Access Protocol
1060 6444/udp Sun Grid Engine Qmaster Service
1061 6444/tcp Sun Grid Engine Qmaster Service
1062 6445/udp Sun Grid Engine Execution Service
1063 6445/tcp Sun Grid Engine Execution Service
1064 6464/udp Port assignment for medical device communication in accordance to IEEE 11073-20701
1065 6464/tcp Port assignment for medical device communication in accordance to IEEE 11073-20701
1066 6515/udp Elipse RPC Protocol (REC)
1067 6515/tcp Elipse RPC Protocol (REC)
1068 6619/udp odette-ftps, Odette File Transfer Protocol (OFTP) over TLS/SSL
1069 6619/tcp odette-ftps, Odette File Transfer Protocol (OFTP) over TLS/SSL
1070 6622/udp Multicast FTP
1071 6622/tcp Multicast FTP
1072 6679/udp Osorno Automation Protocol (OSAUT)
1073 6679/tcp Osorno Automation Protocol (OSAUT)
1074 6888/udp MUSE
1075 6888/tcp MUSE
1076 6969/udp acmsoda
1077 6969/tcp acmsoda
1078 7262/udp CNAP (Calypso Network Access Protocol)
1079 7262/tcp CNAP (Calypso Network Access Protocol)
1080 7272/udp WatchMe - WatchMe Monitoring
1081 7272/tcp WatchMe - WatchMe Monitoring
1082 7400/udp RTPS (Real Time Publish Subscribe) DDS Discovery
1083 7400/tcp RTPS (Real Time Publish Subscribe) DDS Discovery
1084 7401/udp RTPS (Real Time Publish Subscribe) DDS User-Traffic
1085 7401/tcp RTPS (Real Time Publish Subscribe) DDS User-Traffic
1086 7402/udp RTPS (Real Time Publish Subscribe) DDS Meta-Traffic
1087 7402/tcp RTPS (Real Time Publish Subscribe) DDS Meta-Traffic
1088 7542/udp Saratoga file transfer protocol
1089 7542/tcp Saratoga file transfer protocol
1090 7547/udp CPE WAN Management Protocol (CWMP) Technical Report 069
1091 7547/tcp CPE WAN Management Protocol (CWMP) Technical Report 069
1092 7624/udp Instrument Neutral Distributed Interface
1093 7624/tcp Instrument Neutral Distributed Interface
1094 8008/udp Alternative port for HTTP. See also ports 80 and 8080.
1095 8008/tcp Alternative port for HTTP. See also ports 80 and 8080.
1096 8074/udp Gadu-Gadu
1097 8074/tcp Gadu-Gadu
1098 8080/udp Alternative port for HTTP. See also ports 80 and 8008.
1099 8080/tcp Alternative port for HTTP. See also ports 80 and 8008.
1100 8243/udp HTTPS listener for Apache Synapse
1101 8243/tcp HTTPS listener for Apache Synapse
1102 8280/udp HTTP listener for Apache Synapse
1103 8280/tcp HTTP listener for Apache Synapse
1104 8883/udp Secure MQTT (MQTT over TLS)
1105 8883/tcp Secure MQTT (MQTT over TLS)
1106 9001/udp ETL Service Manager
1107 9001/tcp ETL Service Manager
1108 9080/udp glrpc, Groove Collaboration software GLRPC
1109 9080/tcp glrpc, Groove Collaboration software GLRPC
1110 9101/udp Bacula Director
1111 9101/tcp Bacula Director
1112 9102/udp Bacula File Daemon
1113 9102/tcp Bacula File Daemon
1114 9103/udp Bacula Storage Daemon
1115 9103/tcp Bacula Storage Daemon
1116 9119/udp MXit Instant Messenger
1117 9119/tcp MXit Instant Messenger
1118 9389/udp adws, Microsoft AD DS Web Services, Powershell uses this port
1119 9389/tcp adws, Microsoft AD DS Web Services, Powershell uses this port
1120 9418/udp git, Git pack transfer service
1121 9418/tcp git, Git pack transfer service
1122 9535/udp mngsuite, LANDesk Management Suite Remote Control
1123 9535/tcp mngsuite, LANDesk Management Suite Remote Control
1124 9536/udp laes-bf, IP Fabrics Surveillance buffering function
1125 9536/tcp laes-bf, IP Fabrics Surveillance buffering function
1126 9800/udp WebDAV Source
1127 9800/tcp WebDAV Source
1128 10000/udp Network Data Management Protocol
1129 10000/tcp Network Data Management Protocol
1130 10050/udp Zabbix agent
1131 10050/tcp Zabbix agent
1132 10051/udp Zabbix trapper
1133 10051/tcp Zabbix trapper
1134 10110/udp NMEA 0183 Navigational Data. Transport of NMEA 0183 sentences over TCP or UDP
1135 10110/tcp NMEA 0183 Navigational Data. Transport of NMEA 0183 sentences over TCP or UDP
1136 11001/udp metasys ( Johnson Controls Metasys java AC control environment )
1137 11001/tcp metasys ( Johnson Controls Metasys java AC control environment )
1138 11112/udp ACR/NEMA Digital Imaging and Communications in Medicine (DICOM)
1139 11112/tcp ACR/NEMA Digital Imaging and Communications in Medicine (DICOM)
1140 11371/udp OpenPGP HTTP key server
1141 11371/tcp OpenPGP HTTP key server
1142 13720/udp Symantec NetBackup—bprd (formerly VERITAS)
1143 13720/tcp Symantec NetBackup—bprd (formerly VERITAS)
1144 13721/udp Symantec NetBackup—bpdbm (formerly VERITAS)
1145 13721/tcp Symantec NetBackup—bpdbm (formerly VERITAS)
1146 13724/udp Symantec Network Utility—vnetd (formerly VERITAS)
1147 13724/tcp Symantec Network Utility—vnetd (formerly VERITAS)
1148 13782/udp Symantec NetBackup—bpcd (formerly VERITAS)
1149 13782/tcp Symantec NetBackup—bpcd (formerly VERITAS)
1150 13783/udp Symantec VOPIED protocol (formerly VERITAS)
1151 13783/tcp Symantec VOPIED protocol (formerly VERITAS)
1152 13785/udp Symantec NetBackup Database—nbdb (formerly VERITAS)
1153 13785/tcp Symantec NetBackup Database—nbdb (formerly VERITAS)
1154 13786/udp Symantec nomdb (formerly VERITAS)
1155 13786/tcp Symantec nomdb (formerly VERITAS)
1156 15345/udp XPilot Contact
1157 15345/tcp XPilot Contact
1158 17500/udp Dropbox LanSync Protocol (db-lsp); used to synchronize file catalogs between Dropbox clients on a local network.
1159 17500/tcp Dropbox LanSync Protocol (db-lsp); used to synchronize file catalogs between Dropbox clients on a local network.
1160 19813/udp 4D database Client Server Communication
1161 19813/tcp 4D database Client Server Communication
1162 24465/udp Tonido Directory Server for Tonido which is a Personal Web App and P2P platform
1163 24465/tcp Tonido Directory Server for Tonido which is a Personal Web App and P2P platform
1164 24554/udp BINKP, Fidonet mail transfers over TCP/IP
1165 24554/tcp BINKP, Fidonet mail transfers over TCP/IP
1166 26000/udp id Software's Quake server
1167 26000/tcp id Software's Quake server
1168 27000/udp FlexNet Publisher's License server (from the range of default ports)
1169 27000/tcp FlexNet Publisher's License server (from the range of default ports)
1170 27001/udp FlexNet Publisher's License server (from the range of default ports)
1171 27001/tcp FlexNet Publisher's License server (from the range of default ports)
1172 27002/udp FlexNet Publisher's License server (from the range of default ports)
1173 27002/tcp FlexNet Publisher's License server (from the range of default ports)
1174 27003/udp FlexNet Publisher's License server (from the range of default ports)
1175 27003/tcp FlexNet Publisher's License server (from the range of default ports)
1176 27004/udp FlexNet Publisher's License server (from the range of default ports)
1177 27004/tcp FlexNet Publisher's License server (from the range of default ports)
1178 27005/udp FlexNet Publisher's License server (from the range of default ports)
1179 27005/tcp FlexNet Publisher's License server (from the range of default ports)
1180 27006/udp FlexNet Publisher's License server (from the range of default ports)
1181 27006/tcp FlexNet Publisher's License server (from the range of default ports)
1182 27007/udp FlexNet Publisher's License server (from the range of default ports)
1183 27007/tcp FlexNet Publisher's License server (from the range of default ports)
1184 27008/udp FlexNet Publisher's License server (from the range of default ports)
1185 27008/tcp FlexNet Publisher's License server (from the range of default ports)
1186 27009/udp FlexNet Publisher's License server (from the range of default ports)
1187 27009/tcp FlexNet Publisher's License server (from the range of default ports)
1188 33434/udp traceroute
1189 33434/tcp traceroute
1190 40000/udp SafetyNET p – a real-time Industrial Ethernet protocol
1191 40000/tcp SafetyNET p – a real-time Industrial Ethernet protocol
1192 44818/udp EtherNet/IP explicit messaging
1193 44818/tcp EtherNet/IP explicit messaging
1194 47808/udp BACnet Building Automation and Control Networks (4780810 = BAC016)
1195 47808/tcp BACnet Building Automation and Control Networks (4780810 = BAC016)
1196 49151/udp Reserved
1197 49151/tcp Reserved
0 websocket-client>=0.46.0
0 websocket-client>=0.54.0
11 autobahn>=17.10.1
22 colorama>=0.3.9
33 deprecation>=1.0.1
2121 sqlalchemy_schemadisplay>=1.3
2222 tqdm>=4.15.0
2323 twisted>=18.7.0
24 webargs>=3.0.0
24 #webargs==5.0.0 fails with Python 2
25 webargs==4.4.1
2526 marshmallow-sqlalchemy
2627 git+https://github.com/infobyte/filteralchemy@dev#egg=filteralchemy
2728 filedepot>=0.5.0
1010 threshold = 0.75
1111 min_weight = 0.3
1212
13 """
14 APPLY_MS_REFS adds
15 'https://docs.microsoft.com/en-us/security-updates/securitybulletins/2017/ms17-010'
16 as refs to all vulnerabilities which name begins with 'MS17-010'
17 and its creator is 'Nessus'.
18 """
19
1320 rules = [
1421 {
15 'id': 'PARENT_TEST',
22 'id': 'APPLY_MS_REFS',
1623 'model': 'Vulnerability',
17 'parent': '192.168.1.18',
18 'object': "regex=^generic-",
19 'conditions': ["severity=info"],
20 'actions': ["--UPDATE:severity=critical"]
21 },
22 {
23 'id': 'CIFRADO_DEBIL',
24 'model': 'Vulnerability',
25 'object': "name=EN-Cifrado%Débil%(SSL%weak%ciphers)",
26 'actions': ["--UPDATE:severity=info"]
27 },
28
29 {
30 'id': 'CLIENT_TEST',
31 'model': 'Vulnerability',
32 'parent': '50.56.220.123',
33 'object': "regex=^Device",
34 'conditions': ["severity=info", "creator=Nessus regex=^OS"],
35 'actions': ["--UPDATE:severity=critical", "--UPDATE:confirmed=True"]
36 },
37
38 {
39 'id': 'CLIENT_TEST_2',
40 'model': 'Vulnerability',
41 'parent': 'http',
42 'object': "regex=Email target=200.58.121.156",
43 'conditions': ["severity=info", "creator=Burp"],
44 'actions': ["--UPDATE:severity=med", "--UPDATE:confirmed=True"]
45 },
46
47 {
48 'id': 'CLIENT_TEST_3',
49 'model': 'Vulnerability',
50 'parent': '320131ea90e3986c8221291c683d6d19bfe8503b',
51 'object': "creator=Nessus --old",
52 'conditions': ["severity=info", "creator=Nessus"],
53 'actions': ["--UPDATE:refs=VCritical", "--UPDATE:confirmed=True"]
54 },
55
56 {
57 'id': 'CU1',
58 'model': 'Vulnerability',
59 'parent': '50.56.220.123',
60 'object': "severity=critical",
61 'actions': ["--UPDATE:severity=info"]
62 },
63
64 {
65 'id': 'CU2',
66 'model': 'Vulnerability',
67 'parent': '50.56.220.123',
68 'object': "severity=info confirmed=True",
69 'actions': ["--EXECUTE:ls"]
70 },
71
72 {
73 'id': 'CU3A',
74 'model': 'Vulnerability',
75 'fields': ['name'],
76 'actions': ["--UPDATE:confirmed=False"]
77 },
78
79 {
80 'id': 'CU3B',
81 'model': 'Vulnerability',
82 'fields': ['name'],
83 'object': "--old",
84 'actions': ["--UPDATE:confirmed=True"]
85 },
86
87 {
88 'id': 'CU4',
89 'model': 'Vulnerability',
90 'object': "name=Email%addresses%disclosed creator=Burp",
91 'actions': ["--UPDATE:refs=RefsX"]
92 },
93
94 {
95 'id': 'CU4B',
96 'model': 'Vulnerability',
97 'object': "name=Email%addresses%disclosed creator=Burp",
98 'actions': ["--UPDATE:-refs=RefsY"]
99 },
100
101 {
102 'id': 'CU5',
103 'model': 'Vulnerability',
104 'object': "name=OS%Identification",
105 'actions': ["--UPDATE:template=445"]
106 },
107
108 {
109 'id': 'CU5B1',
110 'model': 'Vulnerability',
111 'object': "severity=critical",
112 'actions': ["--UPDATE:template=EN-Cifrado Debil (SSL weak ciphers)"]
113 },
114
115 {
116 'id': 'CU5B',
117 'model': 'Vulnerability',
118 'object': "severity=critical",
119 'actions': ["--UPDATE:template=EN-Cifrado Debil (SSL weak ciphers)"]
120 },
121 {
122 'id': 'CU6',
123 'model': 'Service',
124 'object': "name=http",
125 'actions': ["--UPDATE:owned=True"]
126 },
127 {
128 'id': 'CU6B',
129 'model': 'Service',
130 'fields': ['name'],
131 'actions': ["--UPDATE:description=SET BY RULE"]
132 },
133
134 {
135 'id': 'CU7',
136 'model': 'Host',
137 'object': "name=172.16.138.1",
138 'actions': ["--DELETE:"]
139 },
140
141 {
142 'id': 'CU7B',
143 'model': 'Host',
144 'fields': ['name'],
145 'actions': ["--UPDATE:owned=True"]
24 'object': "regex=^MS17-010",
25 'conditions': ["creator=Nessus"],
26 'actions': ["--UPDATE:refs=https://docs.microsoft.com/en-us/security-updates/securitybulletins/2017/ms17-010"]
14627 }
147
14828 ]
469469 for obj in objects:
470470 for action in actions:
471471 action = action.strip('--')
472 command, expression = action.split(':')
472 array = action.split(':')
473 command = array[0]
474 expression = str(':').join(array[1:])
473475
474476 if command == 'UPDATE':
475 key, value = expression.split('=')
477 array_exp = expression.split('=')
478 key = array_exp[0]
479 value = str('=').join(array_exp[1:])
476480 if obj.class_signature == 'VulnerabilityWeb' or obj.class_signature == 'Vulnerability':
477481 if update_vulnerability(ws, obj, key, value, _server):
478482 insert_rule(rule['id'], command, obj, _objs_value, fields=None, key=key, value=value)
708712 os.remove(lockf)
709713 exit(0)
710714
711 except Exception as errorMsg:
712 logger.error(errorMsg)
713 os.remove(lockf)
714 exit(0)
715 # except Exception as errorMsg:
716 # logger.error(errorMsg)
717 # os.remove(lockf)
718 # exit(0)
715719
716720
717721 if __name__ == "__main__":
00 # Faraday Penetration Test IDE
11 # Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/)
22 # See the file 'doc/LICENSE' for the license information
3 import datetime
43 import time
54 from datetime import datetime
65
2524 workspace = PrimaryKeyRelatedField('name', dump_only=True)
2625
2726 def load_itime(self, value):
28 return datetime.datetime.fromtimestamp(value)
27 return datetime.fromtimestamp(value)
2928
3029 def get_itime(self, obj):
3130 return time.mktime(obj.start_date.utctimetuple()) * 1000
0 # Faraday Penetration Test IDE
1 # Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/)
2 # See the file 'doc/LICENSE' for the license information
3
4 from flask import Blueprint
5 from marshmallow import fields
6
7 from server.models import CustomFieldsSchema
8 from server.api.base import (
9 AutoSchema,
10 ReadWriteView,
11 )
12
13
14 custom_fields_schema_api = Blueprint('custom_fields_schema_api', __name__)
15
16
17 class CustomFieldsSchemaSchema(AutoSchema):
18
19 class Meta:
20 model = CustomFieldsSchema
21 fields = ('field_name',
22 'field_type',
23 'field_display_name',
24 'field_order',
25 )
26
27
28 class CustomFieldsSchemaView(ReadWriteView):
29 route_base = 'custom_fields_schema'
30 model_class = CustomFieldsSchema
31 schema_class = CustomFieldsSchemaSchema
32
33 CustomFieldsSchemaView.register(custom_fields_schema_api)
8585 self._stop = True
8686
8787 def run(self):
88 logger.info('Tool report processor started')
8889 while not self._stop:
8990 try:
9091
144145
145146 report_file = request.files['file']
146147
147 if report_file.filename == '':
148 abort(400)
149
150148 if report_file:
151149
152150 chars = string.ascii_uppercase + string.digits
1313 from flask_classful import route
1414 from flask_restless.search import search
1515 from marshmallow import Schema, fields, post_load, ValidationError
16 from marshmallow.validate import OneOf, Length
16 from marshmallow.validate import OneOf
1717 from sqlalchemy.orm import aliased, joinedload, selectin_polymorphic, undefer
1818 from sqlalchemy.orm.exc import NoResultFound
19 from psycopg2 import DataError
19
2020 from depot.manager import DepotManager
2121 from server.api.base import (
2222 AutoSchema,
23 InvalidUsage,
23 FilterAlchemyMixin,
2424 FilterSetMeta,
2525 PaginatedMixin,
26 FilterAlchemyMixin,
2726 ReadWriteWorkspacedView,
28 )
27 InvalidUsage)
2928 from server.fields import FaradayUploadedFile
3029 from server.models import (
3130 db,
4342 from server.api.modules.services import ServiceSchema
4443 from server.schemas import (
4544 MutableField,
46 PrimaryKeyRelatedField,
47 SelfNestedField,
4845 SeverityField,
4946 MetadataSchema,
47 SelfNestedField,
48 FaradayCustomField,
49 PrimaryKeyRelatedField,
5050 )
5151
5252 vulns_api = Blueprint('vulns_api', __name__)
133133 metadata = SelfNestedField(CustomMetadataSchema())
134134 date = fields.DateTime(attribute='create_date',
135135 dump_only=True) # This is only used for sorting
136 custom_fields = FaradayCustomField(table_name='vulnerability', attribute='custom_fields')
136137
137138 class Meta:
138139 model = Vulnerability
145146 'desc', 'impact', 'confirmed', 'name',
146147 'service', 'obj_id', 'type', 'policyviolations',
147148 '_attachments',
148 'target', 'host_os', 'resolution', 'metadata')
149 'target', 'host_os', 'resolution', 'metadata',
150 'custom_fields')
149151
150152 def get_type(self, obj):
151153 return obj.__class__.__name__
262264 'service', 'obj_id', 'type', 'policyviolations',
263265 'request', '_attachments', 'params',
264266 'target', 'host_os', 'resolution', 'method', 'metadata',
265 'status_code')
267 'status_code', 'custom_fields'
268 )
266269
267270
268271 # Use this override for filterset fields that filter by en exact match by
305308 alias.name == value
306309 )
307310
311
308312 class HostnamesFilter(Filter):
309313 def filter(self, query, model, attr, value):
310314 alias = aliased(Hostname, name='hostname_filter')
322326
323327 query = service_hostnames_query.union(host_hostnames_query)
324328 return query
329
325330
326331 class CustomILike(operators.Operator):
327332 """A filter operator that puts a % in the beggining and in the
378383 validate=OneOf(Vulnerability.STATUSES + ['opened'])
379384 ))
380385 hostnames = HostnamesFilter(fields.Str())
386 confirmed = Filter(fields.Boolean())
381387
382388 def filter(self):
383389 """Generate a filtered query from request parameters.
567573 @route('/<vuln_id>/attachment/', methods=['POST'])
568574 def post_attachment(self, workspace_name, vuln_id):
569575 vuln_workspace_check = db.session.query(VulnerabilityGeneric, Workspace.id).join(
570 Workspace).filter(VulnerabilityGeneric.id == vuln_id, Workspace.name == workspace_name)
576 Workspace).filter(VulnerabilityGeneric.id == vuln_id,
577 Workspace.name == workspace_name).first()
571578
572579 if vuln_workspace_check:
573580 if 'file' not in request.files:
648655 else:
649656 flask.abort(404, "Vulnerability not found")
650657
658 @route('/<vuln_id>/attachment/<attachment_filename>/', methods=['DELETE'])
659 def delete_attachment(self, workspace_name, vuln_id, attachment_filename):
660 vuln_workspace_check = db.session.query(VulnerabilityGeneric, Workspace.id).join(
661 Workspace).filter(
662 VulnerabilityGeneric.id == vuln_id, Workspace.name == workspace_name).first()
663
664 if vuln_workspace_check:
665 file_obj = db.session.query(File).filter_by(object_type='vulnerability',
666 object_id=vuln_id,
667 filename=attachment_filename).first()
668 if file_obj:
669 db.session.delete(file_obj)
670 db.session.commit()
671 depot = DepotManager.get()
672 depot.delete(file_obj.content.get('file_id'))
673 return flask.jsonify({'message': 'Attachment was successfully deleted'})
674 else:
675 flask.abort(404, "File not found")
676 else:
677 flask.abort(404, "Vulnerability not found")
678
651679
652680 VulnerabilityView.register(vulns_api)
00 # Faraday Penetration Test IDE
11 # Copyright (C) 2016 Infobyte LLC (http://www.infobytesec.com/)
22 # See the file 'doc/LICENSE' for the license information
3 import os
34 import json
45
56 import flask
2122 SelfNestedField,
2223 )
2324 from server.api.base import ReadWriteView, AutoSchema
25 from config.configuration import getInstanceConfiguration
2426
2527 workspace_api = Blueprint('workspace_api', __name__)
2628
175177 scope = data.pop('scope', [])
176178 workspace = super(WorkspaceView, self)._perform_create(data, **kwargs)
177179 workspace.set_scope(scope)
180 self._createWorkspaceFolder(workspace.name)
178181 db.session.commit()
179182 return workspace
183
184 def _createWorkspaceFolder(self, name):
185 CONF = getInstanceConfiguration()
186 self._report_path = os.path.join(CONF.getReportPath(), name)
187 self._report_ppath = os.path.join(self._report_path, "process")
188 self._report_upath = os.path.join(self._report_path, "unprocessed")
189
190 if not os.path.exists(self._report_path):
191 os.mkdir(self._report_path)
192
193 if not os.path.exists(self._report_ppath):
194 os.mkdir(self._report_ppath)
195
196 if not os.path.exists(self._report_upath):
197 os.mkdir(self._report_upath)
180198
181199 def _update_object(self, obj, data):
182200 scope = data.pop('scope', [])
7676 from server.api.modules.upload_reports import upload_api
7777 from server.api.modules.websocket_auth import websocket_auth_api
7878 from server.api.modules.get_exploits import exploits_api
79 from server.api.modules.custom_fields import custom_fields_schema_api
7980 app.register_blueprint(commandsrun_api)
8081 app.register_blueprint(activityfeed_api)
8182 app.register_blueprint(credentials_api)
9293 app.register_blueprint(upload_api)
9394 app.register_blueprint(websocket_auth_api)
9495 app.register_blueprint(exploits_api)
96 app.register_blueprint(custom_fields_schema_api)
9597
9698
9799 def check_testing_configuration(testing, app):
0 import sys
1 import click
2
3 from server.web import app
4 from server.models import (
5 db,
6 CustomFieldsSchema
7 )
8 from server.utils.database import get_or_create
9
10
11 def add_custom_field_main():
12 with app.app_context():
13 add_custom_field_wizard()
14
15 def delete_custom_field_main():
16 with app.app_context():
17 delete_custom_field_wizard()
18
19
20 def delete_custom_field_wizard():
21 print('This wizard will guide you to DELETE custom field to the vulneraiblity model.')
22 print('All available custom fields are:')
23 for custom_field in db.session.query(CustomFieldsSchema):
24 print('* {0}'.format(custom_field.field_name))
25 print('End of custom fields')
26 field_name = click.prompt('Field name')
27 custom_field = db.session.query(CustomFieldsSchema).filter_by(field_name=field_name).first()
28 if custom_field:
29 db.session.delete(custom_field)
30 db.session.commit()
31 else:
32 print('Custom field not found')
33
34 def add_custom_field_wizard():
35 print('This wizard will guide you to ADD custom field to the vulneraiblity model.')
36 field_name = click.prompt('Field name')
37 field_display_name = click.prompt('Display name')
38 field_type = click.prompt('Field type (int, str, list)', type=click.Choice(['int', 'str', 'list']))
39 custom_fields = db.session.query(CustomFieldsSchema)
40 current_used_orders = set()
41 if custom_fields.count():
42 print('Custom field current order')
43 for custom_field in custom_fields:
44 current_used_orders.add(custom_field.field_order)
45 print('Field {0}, order {1}'.format(custom_field.field_display_name, custom_field.field_order))
46 field_order = click.prompt('Field order index')
47 invalid_field_order = False
48 try:
49 int(field_order)
50 except ValueError:
51 invalid_field_order = True
52
53 while invalid_field_order or int(field_order) in current_used_orders:
54 print('Field order already used or invalid value, please choose another value')
55 field_order = click.prompt('Field order index')
56 try:
57 int(field_order)
58 except ValueError:
59 invalid_field_order = True
60 continue
61 invalid_field_order = False
62 confirmation = click.prompt('New CustomField will be added to vulnerability -> Order {order} ({0},{1},{2}) <-, confirm to continue (yes/no)'.format(field_name, field_display_name, field_type, order=field_order))
63 if not confirmation:
64 sys.exit(1)
65
66 custom_field_data, created = get_or_create(
67 db.session,
68 CustomFieldsSchema,
69 table_name='vulnerability',
70 field_name=field_name,
71 field_order=field_order,
72 )
73 if not created:
74 print('Custom field already exists, skipping')
75 sys.exit(1)
76 custom_field_data.field_display_name = field_display_name,
77 custom_field_data.field_type = field_type
78 db.session.commit()
6262 report_managers.append(report_manager)
6363 report_manager.start()
6464
65 #for report_manager in report_managers:
66 # report_manager.join()
65 for report_manager in report_managers:
66 report_manager.stop()
6767
68 #for controller in controllers:
69 # controller.join()
68 for controller in controllers:
69 controller.stop()
9090 return None
9191
9292
93 def check_postgresql_encoding():
94 with app.app_context():
95 psql_status = check_postgres()
96 if psql_status:
97 encoding = db.engine.execute("SHOW SERVER_ENCODING").first()[0]
98 return encoding
99 else:
100 return None
101
102
93103 def check_client():
94104
95105 port_rest = CONF.getApiRestfulConInfoPort()
194204 return exit_code
195205
196206
197 def print_postgresql_locks_status():
198 """Prints the status of locks in Postgresql using check_locks_postgresql()"""
207 def print_postgresql_other_status():
208 """Prints the status of locks in Postgresql using check_locks_postgresql() and
209 prints Postgresql encoding using check_postgresql_encoding()"""
210
199211 lock_status = check_locks_postgresql()
200212 if lock_status:
201213 print('[{yellow}-{white}] Warning: PostgreSQL lock detected.' \
206218 elif lock_status == None:
207219 pass
208220
221 encoding = check_postgresql_encoding()
222 if encoding:
223 print('[{green}+{white}] PostgreSQL encoding: {db_encoding}'.\
224 format(green=Fore.GREEN, white=Fore.WHITE, db_encoding=encoding))
225 elif encoding == None:
226 pass
227
209228
210229 def print_faraday_status():
211230 """Prints Status of farday using check_server_running() and check_client"""
291310 def full_status_check():
292311 print('\n{white}Checking if postgreSQL is running...'.format(white=Fore.WHITE))
293312 print_postgresql_status()
294 print_postgresql_locks_status()
313 print_postgresql_other_status()
295314
296315 print('\n{white}Checking if Faraday is running...'.format(white=Fore.WHITE))
297316 print_faraday_status()
0 import os
1 import sys
2 import shutil
3 import tempfile
4 from tqdm import tqdm
5 from colorama import init
6 from colorama import Fore, Style
7
8 try:
9 from pip._internal.operations import freeze
10 except ImportError: # pip < 10.0
11 from pip.operations import freeze
12
13 import config.constant as constants
14 from server.commands import status_check
15
16 init()
17
18 def init_config():
19 #Creates the directory where all the info will go to
20 path = tempfile.mkdtemp()
21 return path
22
23 def get_status_check(path):
24 #Executes status check from with-in the code and uses stdout to save info to file
25 #stdout was the only way to get this information without doing a big refactor
26 original_stdout = sys.stdout
27
28 sys.stdout = open(path + '/status_check.txt','wt')
29 status_check.full_status_check()
30
31 sys.stdout.close()
32 sys.stdout = original_stdout
33
34
35 def get_pip_freeze(path):
36 #Executes pip freeze internally and saves the info a pip_freeze.txt file
37 pip_freeze = freeze.freeze()
38 pip_file = open(path + '/pip_freeze.txt', 'a')
39 for line in pip_freeze:
40 pip_file.write(line)
41 pip_file.write('\n')
42 pip_file.close()
43
44 def get_logs(path):
45 #Copies the logs using the logs path saved on constants
46 shutil.copytree(constants.CONST_FARADAY_HOME_PATH +'/logs', path + '/logs')
47
48 def make_zip(path):
49 #Makes a zip file of the new folder with all the information obtained inside
50 shutil.make_archive('faraday_support', 'zip', path)
51
52 def end_config(path):
53 #Deletes recursively the directory created on the init_config
54 shutil.rmtree(path)
55
56 def all_for_support():
57 with tqdm(total=5) as pbar:
58 path = init_config()
59 get_status_check(path)
60 pbar.update(1)
61 get_logs(path)
62 pbar.update(1)
63 get_pip_freeze(path)
64 pbar.update(1)
65 make_zip(path)
66 pbar.update(1)
67 end_config(path)
68 pbar.update(1)
69
70 print('[{green}+{white}] Process Completed. You will find a {bright}faraday_support.zip{normal} file inside Faraday\'s root directory.'
71 .format(green=Fore.GREEN, white=Fore.WHITE, bright=Style.BRIGHT, normal=Style.NORMAL))
55 import os
66 import shutil
77 import errno
8 import ConfigParser
8 try:
9 import ConfigParser
10 except ImportError:
11 import configparser as ConfigParser
912
1013 from logging import (
1114 DEBUG,
169172 self.certificate = None
170173 self.keyfile = None
171174 self.port = None
175 self.enabled = False
172176
173177
174178 class StorageConfigObject(ConfigSection):
33 See the file 'doc/LICENSE' for the license information
44
55 '''
6 import json
67 import imghdr
78 from tempfile import SpooledTemporaryFile
89
910 from PIL import Image
10
11 import sqlalchemy as sa
12 from sqlalchemy.dialects.postgresql.json import JSONB
1113 from depot.fields.upload import UploadedFile
1214 from depot.io.utils import file_from_content
1315 from depot.io.utils import INMEMORY_FILESIZE
8486 if public_url:
8587 return public_url
8688 return DepotManager.get_middleware().url_for(self['thumb_path'])
89
90
91 class JSONType(sa.types.TypeDecorator):
92 impl = sa.UnicodeText
93
94 def load_dialect_impl(self, dialect):
95 if dialect.name == 'postgresql':
96 return dialect.type_descriptor(JSONB())
97 else:
98 return dialect.type_descriptor(self.impl)
99
100 def process_bind_param(self, value, dialect):
101 if dialect.name == 'postgresql':
102 return value
103 if value is not None:
104 value = json.dumps(value)
105 return value
106
107 def process_result_value(self, value, dialect):
108 if dialect.name == 'postgresql':
109 return value
110 if value is not None:
111 value = json.loads(value)
112 return value
3838 SQLAlchemy as OriginalSQLAlchemy,
3939 _EngineConnector
4040 )
41
4142 from depot.fields.sqlalchemy import UploadedFileField
4243
4344 import server.config
44 from server.fields import FaradayUploadedFile
45 from server.fields import FaradayUploadedFile, JSONType
4546 from flask_security import (
4647 RoleMixin,
4748 UserMixin,
482483 version or "")
483484
484485
486 class CustomFieldsSchema(db.Model):
487 __tablename__ = 'custom_fields_schema'
488
489 id = Column(Integer, primary_key=True)
490 field_name = Column(Text)
491 field_type = Column(Text)
492 field_display_name = Column(Text)
493 field_order = Column(Integer)
494 table_name = Column(Text)
495
496
485497 class VulnerabilityABC(Metadata):
486498 # revisar plugin nexpose, netspark para terminar de definir uniques. asegurar que se carguen bien
487499 EASE_OF_RESOLUTIONS = [
520532 CheckConstraint('1.0 <= risk AND risk <= 10.0',
521533 name='check_vulnerability_risk'),
522534 )
535
536 custom_fields = Column(JSONType)
523537
524538 @property
525539 def parent(self):
663677 proxy_factory=CustomAssociationSet,
664678 creator=_build_associationproxy_creator_non_workspaced('PolicyViolationTemplate')
665679 )
680 custom_fields = Column(JSONType)
666681
667682
668683 class CommandObject(db.Model):
14771492
14781493 __tablename__ = 'faraday_user'
14791494 ROLES = ['admin', 'pentester', 'client']
1495 OTP_STATES = ["disabled", "requested", "confirmed"]
14801496
14811497 id = Column(Integer, primary_key=True)
14821498 username = NonBlankColumn(String(255), unique=True)
14931509 confirmed_at = Column(DateTime())
14941510 role = Column(Enum(*ROLES, name='user_roles'),
14951511 nullable=False, default='client')
1512 _otp_secret = Column(
1513 String(16),
1514 name="otp_secret", nullable=True)
1515 state_otp = Column(Enum(*OTP_STATES, name='user_otp_states'), nullable=False, default="disabled")
1516
14961517 # TODO: add many to many relationship to add permission to workspace
14971518
14981519 workspace_permission_instances = relationship(
44
55 '''
66 import time
7 import json
78 import datetime
89 from marshmallow import fields, Schema
910 from marshmallow.exceptions import ValidationError
1011 from dateutil.tz import tzutc
1112
12 from server.models import VulnerabilityABC
13 from server.models import (
14 db,
15 VulnerabilityABC,
16 CustomFieldsSchema,
17 )
1318
1419
1520 class JSTimestampField(fields.Integer):
2328 def _deserialize(self, value, attr, data):
2429 if value is not None and value:
2530 return datetime.datetime.fromtimestamp(self._validated(value)/1e3)
31
32
33 class FaradayCustomField(fields.Field):
34 def __init__(self, table_name='vulnerability', *args, **kwargs):
35 self.table_name = table_name
36 super(FaradayCustomField, self).__init__(*args, **kwargs)
37
38 def _serialize(self, value, attr, obj, **kwargs):
39 if not value:
40 value = {}
41 res = {}
42 custom_fields = db.session.query(CustomFieldsSchema).filter_by(
43 table_name=self.table_name)
44 for custom_field in custom_fields:
45 serialized_value = value.get(custom_field.field_display_name)
46 res[custom_field.field_display_name] = serialized_value
47
48 return res
49
50 def _deserialize(self, value, attr, data, **kwargs):
51 serialized = {}
52 if value is not None and value:
53 for key, raw_data in value.iteritems():
54 field_schema = db.session.query(CustomFieldsSchema).filter_by(
55 table_name=self.table_name,
56 field_display_name=key,
57 ).first()
58 if not field_schema:
59 raise ValidationError("Invalid custom field, not found in schema. Did you add it first?")
60 if field_schema.field_type == 'str':
61 serialized[key] = str(raw_data)
62 elif field_schema.field_type == 'int':
63 try:
64 serialized[key] = int(raw_data)
65 except TypeError:
66 return None
67 except ValueError:
68 raise ValidationError("Can not convert custom type to int")
69 elif field_schema.field_type == 'list':
70 serialized[key] = raw_data
71 else:
72 raise ValidationError("Custom Field datatype not supported yet")
73
74 return serialized
2675
2776
2877 class PrimaryKeyRelatedField(fields.Field):
1212 import errno
1313 import atexit
1414 import signal
15 from functools import partial
16
1517 import server.config
16
1718 from server.utils.logger import get_logger
1819
1920
157158 return False
158159 else:
159160 raise err
160
161
161162 remove_pid_file(port)
162163 return True
163164
206207 def create_pid_file(port):
207208 with open(server.config.FARADAY_SERVER_PID_FILE.format(port), 'w') as pid_file:
208209 pid_file.write('{}'.format(os.getpid()))
209 atexit.register(remove_pid_file)
210 atexit.register(partial(remove_pid_file, port))
210211
211212 def remove_pid_file(port):
212213 os.remove(server.config.FARADAY_SERVER_PID_FILE.format(port))
88
99 import twisted.web
1010 from twisted.web.resource import Resource, ForbiddenResource
11
1211 # Ugly hack to make "flask shell" work. It works because when running via flask
1312 # shell, __file__ will be server/web.py instead of faraday-server.py
1413 if os.path.split(os.path.dirname(__file__))[-1] == 'server':
139138
140139 def run(self):
141140 def signal_handler(*args):
141 logger.info('Received SIGTERM, shutting down.')
142142 logger.info("Stopping threads, please wait...")
143143 # teardown()
144144 self.raw_report_processor.stop()
145 reactor.stop()
146145
147146 site = twisted.web.server.Site(self.__root_resource)
148147 if self.__ssl_enabled:
240240 margin-right: 15px;
241241 }
242242
243 .nav-tabs {
244 border-bottom: none !important;
245 }
246
247 .nav-tabs > li.active > a, .nav-tabs > li.active > a:focus, .nav-tabs > li.active > a:hover {
248 color: #67aef9;
249 cursor: default;
250 background-color: #fff;
251 border: none;
252 border-bottom: 3px solid #67aef9;
253 font-weight: bold;
254 }
255
256 .nav-tabs > li > a {
257 color: #8c9799;
258 }
259
260 .nav > li:not(.active) > a:hover {
261 background-color: #fff !important;
262 border-color: #fff #fff #ddd !important;
263 }
264
265 .edit-vulns-dropdowns {
266 margin-bottom: 15px;
267 }
268
269 .primary-btn {
270 width: calc(100% - 29px);
271 }
272
273 .secondary-btn {
274 left: -5px;
275 position: relative;
276 }
277
278 .btn-change-property {
279 border: none;
280 padding: 5px;
281 color: #fff;
282 font-weight: bold;
283 }
284
285 .data-name {
286 font-size: 1.5em;
287 font-weight: bold;
288 color: #5e6667;
289 }
290
291 .modal-data-name {
292 margin: 25px 0;
293 }
294
295 .tab-pane-header {
296 color: #5e6667;
297 font-size: 1.2em;
298 font-weight: bold;
299 margin-bottom: 15px;
300 }
301
302 .tab-pane-container {
303 width: 100%;
304 }
305
306 .btn-primary-white {
307 background-color: #fff;
308 border: 1px solid #ddd;
309 border-right: none;
310 color: #5e6667;
311 text-transform: capitalize;
312 font-weight: normal;
313 }
314
315 .btn-secondary-white{
316 background-color: #fff;
317 border: 1px solid #ddd;
318 border-left: none;
319 color: #5e6667;
320 }
321
322 .edit-name-icon {
323 color: #999;
324 cursor: pointer;
325 margin-left: 10px;
326 }
327
328 /*.modal-data-name:hover .edit-name-icon {*/
329 /*display: inline-flex;*/
330 /*}*/
331
332 #inp-edit-name{
333 font-weight: bold;
334 color: #5e6667;
335 }
336
337 .fields-of-vulnWeb {
338 position: relative;
339 top: 22px;
340 }
341
342 /* The container */
343 .radio-container {
344 display: block;
345 position: relative;
346 padding-left: 55px;
347 margin-bottom: 12px;
348 cursor: pointer;
349 font-size: 22px;
350 -webkit-user-select: none;
351 -moz-user-select: none;
352 -ms-user-select: none;
353 user-select: none;
354 }
355
356 /* Hide the browser's default radio button */
357 .radio-container input {
358 position: absolute;
359 opacity: 0;
360 cursor: pointer;
361 }
362
363 /* Create a custom radio button */
364 .checkmark {
365 position: absolute;
366 top: 5px;
367 left: 25px;
368 height: 20px;
369 width: 20px;
370 background-color: #ddd;
371 border-radius: 50%;
372 }
373
374 /* On mouse-over, add a grey background color */
375 .radio-container:hover input ~ .checkmark {
376 background-color: #ccc;
377 }
378
379 /* When the radio button is checked, add a blue background */
380 .radio-container input:checked ~ .checkmark {
381 background-color: #008000;
382 }
383
384 /* Create the indicator (the dot/circle - hidden when not checked) */
385 .checkmark:after {
386 content: "";
387 position: absolute;
388 display: none;
389 }
390
391 /* Show the indicator (dot/circle) when checked */
392 .radio-container input:checked ~ .checkmark:after {
393 display: block;
394 top: 6px;
395 left: 6px;
396 }
397
398 /* Style the indicator (dot/circle) */
399 .radio-container .checkmark:after {
400 top: 9px;
401 left: 9px;
402 width: 8px;
403 height: 8px;
404 border-radius: 50%;
405 background: white;
406 }
407
408 .customs-radio-inline{
409 display: inline-flex;
410 }
411
412
413
414 /* The container */
415 .chbox-container {
416 display: block;
417 position: relative;
418 padding-left: 55px;
419 margin-bottom: 12px;
420 cursor: pointer;
421 font-size: 22px;
422 -webkit-user-select: none;
423 -moz-user-select: none;
424 -ms-user-select: none;
425 user-select: none;
426 }
427
428 /* Hide the browser's default checkbox */
429 .chbox-container input {
430 position: absolute;
431 opacity: 0;
432 cursor: pointer;
433 height: 0;
434 width: 0;
435 }
436
437 /* On mouse-over, add a grey background color */
438 .chbox-container:hover input ~ .checkmark {
439 background-color: #ccc;
440 }
441
442 /* When the checkbox is checked, add a blue background */
443 .chbox-container input:checked ~ .checkmark {
444 background-color: #008000;
445 }
446
447 /* Create the checkmark/indicator (hidden when not checked) */
448 .checkmark:after {
449 content: "";
450 position: absolute;
451 display: none;
452 }
453
454 /* Show the checkmark when checked */
455 .chbox-container input:checked ~ .checkmark:after {
456 display: block;
457 }
458
459 /* Style the checkmark/indicator */
460 .chbox-container .checkmark:after {
461 left: 8px;
462 top: 5px;
463 width: 5px;
464 height: 10px;
465 border: solid white;
466 border-width: 0 3px 3px 0;
467 -webkit-transform: rotate(45deg);
468 -ms-transform: rotate(45deg);
469 transform: rotate(45deg);
470 }
471
472 .chbox-container .checkmark{
473 top: 0;
474 }
475
476 .custom-divider {
477 border-top: 1px solid #ddd;
478 margin: 10px 0 15px 0;
479 }
480
481 li.nav-item.has-error:not(.active) {
482 border-bottom: 1px dashed #a94442;
483 }
484
485 li.nav-item.has-error:not(.active) a {
486 color: #a94442;
487 }
243488 .active-toggle{
244489 width: 3%;
245490 text-align: center!important;
255500 position: relative;
256501 top: 220px;
257502 color: #aeaeb1;
503 }
504 .active-toggle{
505 width: 3%;
506 text-align: center!important;
507 }
508
509 .active-toggle-container{
510 cursor: pointer;
511 }
512
513 .forbidden-error {
514 text-align: center;
515 overflow-wrap: break-word;
516 position: relative;
517 top: 220px;
518 color: #aeaeb1;
519 }
520
521 .last-item-field {
522 margin-bottom: 25px;
258523 }
55 <font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
66 <font-face units-per-em="1200" ascent="960" descent="-240" />
77 <missing-glyph horiz-adv-x="500" />
8 <glyph />
9 <glyph />
10 <glyph unicode="&#xd;" />
8 <glyph horiz-adv-x="0" />
9 <glyph horiz-adv-x="400" />
1110 <glyph unicode=" " />
12 <glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
13 <glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
11 <glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
12 <glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
1413 <glyph unicode="&#xa0;" />
15 <glyph unicode="&#x2000;" horiz-adv-x="652" />
16 <glyph unicode="&#x2001;" horiz-adv-x="1304" />
17 <glyph unicode="&#x2002;" horiz-adv-x="652" />
18 <glyph unicode="&#x2003;" horiz-adv-x="1304" />
19 <glyph unicode="&#x2004;" horiz-adv-x="434" />
20 <glyph unicode="&#x2005;" horiz-adv-x="326" />
21 <glyph unicode="&#x2006;" horiz-adv-x="217" />
22 <glyph unicode="&#x2007;" horiz-adv-x="217" />
23 <glyph unicode="&#x2008;" horiz-adv-x="163" />
14 <glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
15 <glyph unicode="&#x2000;" horiz-adv-x="650" />
16 <glyph unicode="&#x2001;" horiz-adv-x="1300" />
17 <glyph unicode="&#x2002;" horiz-adv-x="650" />
18 <glyph unicode="&#x2003;" horiz-adv-x="1300" />
19 <glyph unicode="&#x2004;" horiz-adv-x="433" />
20 <glyph unicode="&#x2005;" horiz-adv-x="325" />
21 <glyph unicode="&#x2006;" horiz-adv-x="216" />
22 <glyph unicode="&#x2007;" horiz-adv-x="216" />
23 <glyph unicode="&#x2008;" horiz-adv-x="162" />
2424 <glyph unicode="&#x2009;" horiz-adv-x="260" />
2525 <glyph unicode="&#x200a;" horiz-adv-x="72" />
2626 <glyph unicode="&#x202f;" horiz-adv-x="260" />
27 <glyph unicode="&#x205f;" horiz-adv-x="326" />
28 <glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
29 <glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
27 <glyph unicode="&#x205f;" horiz-adv-x="325" />
28 <glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
29 <glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
30 <glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
31 <glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
3032 <glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
31 <glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
32 <glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
33 <glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
34 <glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
35 <glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
36 <glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
37 <glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
38 <glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
39 <glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
40 <glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
41 <glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
42 <glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
43 <glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
44 <glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
45 <glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
46 <glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
47 <glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
48 <glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
49 <glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
50 <glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
51 <glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
52 <glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
53 <glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
54 <glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
55 <glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
56 <glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
57 <glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
58 <glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
59 <glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
60 <glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
61 <glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
62 <glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
63 <glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
64 <glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
65 <glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
66 <glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
67 <glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
68 <glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
69 <glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
70 <glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
71 <glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
72 <glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
73 <glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
74 <glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
75 <glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
76 <glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
77 <glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
78 <glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
79 <glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
80 <glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
81 <glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
82 <glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
83 <glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
84 <glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
85 <glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
86 <glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
87 <glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
88 <glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
89 <glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
90 <glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
91 <glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
92 <glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
93 <glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
94 <glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
95 <glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
96 <glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
97 <glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
98 <glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
99 <glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
100 <glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
101 <glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
102 <glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
103 <glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
104 <glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
105 <glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
106 <glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
107 <glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
108 <glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
109 <glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
110 <glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
111 <glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
112 <glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
113 <glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
114 <glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
115 <glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
116 <glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
117 <glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
118 <glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
119 <glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
120 <glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
121 <glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
122 <glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
123 <glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
124 <glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
125 <glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
126 <glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
127 <glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
128 <glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
129 <glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
130 <glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
131 <glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
132 <glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
133 <glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
134 <glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
135 <glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
136 <glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
137 <glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
138 <glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
139 <glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
140 <glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
141 <glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
142 <glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
143 <glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
144 <glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
145 <glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
146 <glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
147 <glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
148 <glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
149 <glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
150 <glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
151 <glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
152 <glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
153 <glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
154 <glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
155 <glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
156 <glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
157 <glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
158 <glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
159 <glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
160 <glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
161 <glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
162 <glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
163 <glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
164 <glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
165 <glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
166 <glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
167 <glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
168 <glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
169 <glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
170 <glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
171 <glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
172 <glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
173 <glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
174 <glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
175 <glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
176 <glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
177 <glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
178 <glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
179 <glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
180 <glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
181 <glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
182 <glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
183 <glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
184 <glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
185 <glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
186 <glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
187 <glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
188 <glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
189 <glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
190 <glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
191 <glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
192 <glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
193 <glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
194 <glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
195 <glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
196 <glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
197 <glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
198 <glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
199 <glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
200 <glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
201 <glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
202 <glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
203 <glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
204 <glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
205 <glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
206 <glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
207 <glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
208 <glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
209 <glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
210 <glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
211 <glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
212 <glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
213 <glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
214 <glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
215 <glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
216 <glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
217 <glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
218 <glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
219 <glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
220 <glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
221 <glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
222 <glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
223 <glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
224 <glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
225 <glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
226 <glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
33 <glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
34 <glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
35 <glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
36 <glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
37 <glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
38 <glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
39 <glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
40 <glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
41 <glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
42 <glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
43 <glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
44 <glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
45 <glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
46 <glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
47 <glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
48 <glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
49 <glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
50 <glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
51 <glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
52 <glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
53 <glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
54 <glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
55 <glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
56 <glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
57 <glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
58 <glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
59 <glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
60 <glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
61 <glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
62 <glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
63 <glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
64 <glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
65 <glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
66 <glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
67 <glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
68 <glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
69 <glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
70 <glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
71 <glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
72 <glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
73 <glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
74 <glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
75 <glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
76 <glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
77 <glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
78 <glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
79 <glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
80 <glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
81 <glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
82 <glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
83 <glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
84 <glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
85 <glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
86 <glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
87 <glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
88 <glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
89 <glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
90 <glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
91 <glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
92 <glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
93 <glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
94 <glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
95 <glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
96 <glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
97 <glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
98 <glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
99 <glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
100 <glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
101 <glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
102 <glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
103 <glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
104 <glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
105 <glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
106 <glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
107 <glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
108 <glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
109 <glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
110 <glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
111 <glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
112 <glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
113 <glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
114 <glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
115 <glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
116 <glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
117 <glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
118 <glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
119 <glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
120 <glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
121 <glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
122 <glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
123 <glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
124 <glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
125 <glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
126 <glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
127 <glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
128 <glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
129 <glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
130 <glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
131 <glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
132 <glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
133 <glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
134 <glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
135 <glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
136 <glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
137 <glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
138 <glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
139 <glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
140 <glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
141 <glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
142 <glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
143 <glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
144 <glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
145 <glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
146 <glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
147 <glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
148 <glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
149 <glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
150 <glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
151 <glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
152 <glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
153 <glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
154 <glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
155 <glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
156 <glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
157 <glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
158 <glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
159 <glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
160 <glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
161 <glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
162 <glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
163 <glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
164 <glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
165 <glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
166 <glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
167 <glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
168 <glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
169 <glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
170 <glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
171 <glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
172 <glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
173 <glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
174 <glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
175 <glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
176 <glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
177 <glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
178 <glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
179 <glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
180 <glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
181 <glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
182 <glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
183 <glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
184 <glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
185 <glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
186 <glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
187 <glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
188 <glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
189 <glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
190 <glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
191 <glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
192 <glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
193 <glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
194 <glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
195 <glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
196 <glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
197 <glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
198 <glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
199 <glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
200 <glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
201 <glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
202 <glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
203 <glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
204 <glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
205 <glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
206 <glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
207 <glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
208 <glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
209 <glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
210 <glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
211 <glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
212 <glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
213 <glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
214 <glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
215 <glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
216 <glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
217 <glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
218 <glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
219 <glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
220 <glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
221 <glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
222 <glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
223 <glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
224 <glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
225 <glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
226 <glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
227 <glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
228 <glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
229 <glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
230 <glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
231 <glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
232 <glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
233 <glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
234 <glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
235 <glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
236 <glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
237 <glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
238 <glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
239 <glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
240 <glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
241 <glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
242 <glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
243 <glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
244 <glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
245 <glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
246 <glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
247 <glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
248 <glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
249 <glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
250 <glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
251 <glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
252 <glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
253 <glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
254 <glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
255 <glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
256 <glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
257 <glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
258 <glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
259 <glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
260 <glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
261 <glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
262 <glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
263 <glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
264 <glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
265 <glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
266 <glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
267 <glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
268 <glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
269 <glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
270 <glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
271 <glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
272 <glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
273 <glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
274 <glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
275 <glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
276 <glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
277 <glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
278 <glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
279 <glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
280 <glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
281 <glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
282 <glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
283 <glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
284 <glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
285 <glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
227286 </font>
228287 </defs></svg>
143143 <script type="text/javascript" src="scripts/statusReport/controllers/modalNew.js"></script>
144144 <script type="text/javascript" src="scripts/statusReport/directives/textCollapse.js"></script>
145145 <script type="text/javascript" src="scripts/statusReport/directives/appendSearchParam.js"></script>
146 <script type="text/javascript" src="scripts/statusReport/directives/autofocus.js"></script>
147 <script type="text/javascript" src="scripts/statusReport/directives/customField.js"></script>
148 <script type="text/javascript" src="scripts/statusReport/directives/checkCustomType.js"></script>
146149 <script type="text/javascript" src="scripts/statusReport/providers/target.js"></script>
147150 <script type="text/javascript" src="scripts/statusReport/providers/reference.js"></script>
148151 <script type="text/javascript" src="scripts/statusReport/providers/parser.js"></script>
00 /*!
1 * Bootstrap v3.1.1 (http://getbootstrap.com)
2 * Copyright 2011-2014 Twitter, Inc.
1 * Bootstrap v3.4.0 (https://getbootstrap.com/)
2 * Copyright 2011-2018 Twitter, Inc.
33 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4 */
5
6 .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:active,.btn.active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#2e97bd 0,#2e97bd 100%);background-image:linear-gradient(to bottom,#2e97bd 0,#2e97bd 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2e97bd', endColorstr='#ff2e97bd', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#278eaa}.btn-primary:hover,.btn-primary:focus{background-color:#2e97bd;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2e97bd;border-color:#278eaa}.btn-success{background-image:-webkit-linear-gradient(top,#cae388 0,#a1ce32 100%);background-image:linear-gradient(to bottom,#cae388 0,#a1ce32 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcae388', endColorstr='#ffa1ce32', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#9dbf30}.btn-success:hover,.btn-success:focus{background-color:#a1ce32;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#a1ce32;border-color:#9dbf30}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#e66462 0,#df3936 100%);background-image:linear-gradient(to bottom,#e66462 0,#df3936 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe66462', endColorstr='#ffdf3936', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#d13434}.btn-danger:hover,.btn-danger:focus{background-color:#df3936;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#df3936;border-color:#d13434}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-image:-webkit-linear-gradient(top,#2e97bd 0,#357ebd 100%);background-image:linear-gradient(to bottom,#2e97bd 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2e97bd', endColorstr='#ff357ebd', GradientType=0);background-color:#357ebd}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#2e97bd 0,#3071a9 100%);background-image:linear-gradient(to bottom,#2e97bd 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2e97bd', endColorstr='#ff3071a9', GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#2e97bd 0,#3278b3 100%);background-image:linear-gradient(to bottom,#2e97bd 0,#3278b3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2e97bd', endColorstr='#ff3278b3', GradientType=0);border-color:#3278b3}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#2e97bd 0,#357ebd 100%);background-image:linear-gradient(to bottom,#2e97bd 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2e97bd', endColorstr='#ff357ebd', GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
4 */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x;background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x;background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
5 /*# sourceMappingURL=bootstrap-theme.min.css.map */
00 /*!
1 * Bootstrap v3.3.7 (http://getbootstrap.com)
2 * Copyright 2011-2016 Twitter, Inc.
1 * Bootstrap v3.4.0 (https://getbootstrap.com/)
2 * Copyright 2011-2018 Twitter, Inc.
33 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4 *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
4 *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:"Glyphicons Halflings";src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
55 /*# sourceMappingURL=bootstrap.min.css.map */
00 /*!
1 * Bootstrap v3.3.7 (http://getbootstrap.com)
2 * Copyright 2011-2016 Twitter, Inc.
1 * Bootstrap v3.4.0 (https://getbootstrap.com/)
2 * Copyright 2011-2018 Twitter, Inc.
33 * Licensed under the MIT license
44 */
5 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
6 this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
5 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(n){"use strict";n.fn.emulateTransitionEnd=function(t){var e=!1,i=this;n(this).one("bsTransitionEnd",function(){e=!0});return setTimeout(function(){e||n(i).trigger(n.support.transition.end)},t),this},n(function(){n.support.transition=function o(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(t.style[i]!==undefined)return{end:e[i]};return!1}(),n.support.transition&&(n.event.special.bsTransitionEnd={bindType:n.support.transition.end,delegateType:n.support.transition.end,handle:function(t){if(n(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(s){"use strict";var e='[data-dismiss="alert"]',a=function(t){s(t).on("click",e,this.close)};a.VERSION="3.4.0",a.TRANSITION_DURATION=150,a.prototype.close=function(t){var e=s(this),i=e.attr("data-target");i||(i=(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),i="#"===i?[]:i;var o=s(document).find(i);function n(){o.detach().trigger("closed.bs.alert").remove()}t&&t.preventDefault(),o.length||(o=e.closest(".alert")),o.trigger(t=s.Event("close.bs.alert")),t.isDefaultPrevented()||(o.removeClass("in"),s.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(a.TRANSITION_DURATION):n())};var t=s.fn.alert;s.fn.alert=function o(i){return this.each(function(){var t=s(this),e=t.data("bs.alert");e||t.data("bs.alert",e=new a(this)),"string"==typeof i&&e[i].call(t)})},s.fn.alert.Constructor=a,s.fn.alert.noConflict=function(){return s.fn.alert=t,this},s(document).on("click.bs.alert.data-api",e,a.prototype.close)}(jQuery),function(s){"use strict";var n=function(t,e){this.$element=s(t),this.options=s.extend({},n.DEFAULTS,e),this.isLoading=!1};function i(o){return this.each(function(){var t=s(this),e=t.data("bs.button"),i="object"==typeof o&&o;e||t.data("bs.button",e=new n(this,i)),"toggle"==o?e.toggle():o&&e.setState(o)})}n.VERSION="3.4.0",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",null==n.resetText&&i.data("resetText",i[o]()),setTimeout(s.proxy(function(){i[o](null==n[t]?this.options[t]:n[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(e).attr(e,e).prop(e,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(e).removeAttr(e).prop(e,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var t=s.fn.button;s.fn.button=i,s.fn.button.Constructor=n,s.fn.button.noConflict=function(){return s.fn.button=t,this},s(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(t){var e=s(t.target).closest(".btn");i.call(e,"toggle"),s(t.target).is('input[type="radio"], input[type="checkbox"]')||(t.preventDefault(),e.is("input,button")?e.trigger("focus"):e.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){s(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),function(p){"use strict";var c=function(t,e){this.$element=p(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=e,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",p.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",p.proxy(this.pause,this)).on("mouseleave.bs.carousel",p.proxy(this.cycle,this))};function r(n){return this.each(function(){var t=p(this),e=t.data("bs.carousel"),i=p.extend({},c.DEFAULTS,t.data(),"object"==typeof n&&n),o="string"==typeof n?n:i.slide;e||t.data("bs.carousel",e=new c(this,i)),"number"==typeof n?e.to(n):o?e[o]():i.interval&&e.pause().cycle()})}c.VERSION="3.4.0",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},c.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(p.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},c.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(o)},c.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(i<t?"next":"prev",this.$items.eq(t))},c.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&p.support.transition&&(this.$element.trigger(p.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(t,e){var i=this.$element.find(".item.active"),o=e||this.getItemForDirection(t,i),n=this.interval,s="next"==t?"left":"right",a=this;if(o.hasClass("active"))return this.sliding=!1;var r=o[0],l=p.Event("slide.bs.carousel",{relatedTarget:r,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var h=p(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass("active")}var d=p.Event("slid.bs.carousel",{relatedTarget:r,direction:s});return p.support.transition&&this.$element.hasClass("slide")?(o.addClass(t),"object"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one("bsTransitionEnd",function(){o.removeClass([t,s].join(" ")).addClass("active"),i.removeClass(["active",s].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger(d)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(i.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var t=p.fn.carousel;p.fn.carousel=r,p.fn.carousel.Constructor=c,p.fn.carousel.noConflict=function(){return p.fn.carousel=t,this};var e=function(t){var e=p(this),i=e.attr("href");i&&(i=i.replace(/.*(?=#[^\s]+$)/,""));var o=e.attr("data-target")||i,n=p(document).find(o);if(n.hasClass("carousel")){var s=p.extend({},n.data(),e.data()),a=e.attr("data-slide-to");a&&(s.interval=!1),r.call(n,s),a&&n.data("bs.carousel").to(a),t.preventDefault()}};p(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),p(window).on("load",function(){p('[data-ride="carousel"]').each(function(){var t=p(this);r.call(t,t.data())})})}(jQuery),function(a){"use strict";var r=function(t,e){this.$element=a(t),this.options=a.extend({},r.DEFAULTS,e),this.$trigger=a('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var e,i=t.attr("data-target")||(e=t.attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"");return a(document).find(i)}function l(o){return this.each(function(){var t=a(this),e=t.data("bs.collapse"),i=a.extend({},r.DEFAULTS,t.data(),"object"==typeof o&&o);!e&&i.toggle&&/show|hide/.test(o)&&(i.toggle=!1),e||t.data("bs.collapse",e=new r(this,i)),"string"==typeof o&&e[o]()})}r.VERSION="3.4.0",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(t=e.data("bs.collapse"))&&t.transitioning)){var i=a.Event("show.bs.collapse");if(this.$element.trigger(i),!i.isDefaultPrevented()){e&&e.length&&(l.call(e,"hide"),t||e.data("bs.collapse",null));var o=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[o](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var n=function(){this.$element.removeClass("collapsing").addClass("collapse in")[o](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return n.call(this);var s=a.camelCase(["scroll",o].join("-"));this.$element.one("bsTransitionEnd",a.proxy(n,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[o](this.$element[0][s])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=a.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var e=this.dimension();this.$element[e](this.$element[e]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!a.support.transition)return i.call(this);this.$element[e](0).one("bsTransitionEnd",a.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},r.prototype.getParent=function(){return a(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(t,e){var i=a(e);this.addAriaAndCollapsedClass(n(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var t=a.fn.collapse;a.fn.collapse=l,a.fn.collapse.Constructor=r,a.fn.collapse.noConflict=function(){return a.fn.collapse=t,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(t){var e=a(this);e.attr("data-target")||t.preventDefault();var i=n(e),o=i.data("bs.collapse")?"toggle":e.data();l.call(i,o)})}(jQuery),function(a){"use strict";var r='[data-toggle="dropdown"]',o=function(t){a(t).on("click.bs.dropdown",this.toggle)};function l(t){var e=t.attr("data-target");e||(e=(e=t.attr("href"))&&/#[A-Za-z]/.test(e)&&e.replace(/.*(?=#[^\s]*$)/,""));var i=e&&a(document).find(e);return i&&i.length?i:t.parent()}function s(o){o&&3===o.which||(a(".dropdown-backdrop").remove(),a(r).each(function(){var t=a(this),e=l(t),i={relatedTarget:this};e.hasClass("open")&&(o&&"click"==o.type&&/input|textarea/i.test(o.target.tagName)&&a.contains(e[0],o.target)||(e.trigger(o=a.Event("hide.bs.dropdown",i)),o.isDefaultPrevented()||(t.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",i)))))}))}o.VERSION="3.4.0",o.prototype.toggle=function(t){var e=a(this);if(!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(s(),!o){"ontouchstart"in document.documentElement&&!i.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",s);var n={relatedTarget:this};if(i.trigger(t=a.Event("show.bs.dropdown",n)),t.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),i.toggleClass("open").trigger(a.Event("shown.bs.dropdown",n))}return!1}},o.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var e=a(this);if(t.preventDefault(),t.stopPropagation(),!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(!o&&27!=t.which||o&&27==t.which)return 27==t.which&&i.find(r).trigger("focus"),e.trigger("click");var n=i.find(".dropdown-menu li:not(.disabled):visible a");if(n.length){var s=n.index(t.target);38==t.which&&0<s&&s--,40==t.which&&s<n.length-1&&s++,~s||(s=0),n.eq(s).trigger("focus")}}}};var t=a.fn.dropdown;a.fn.dropdown=function e(i){return this.each(function(){var t=a(this),e=t.data("bs.dropdown");e||t.data("bs.dropdown",e=new o(this)),"string"==typeof i&&e[i].call(t)})},a.fn.dropdown.Constructor=o,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=t,this},a(document).on("click.bs.dropdown.data-api",s).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,o.prototype.toggle).on("keydown.bs.dropdown.data-api",r,o.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",o.prototype.keydown)}(jQuery),function(a){"use strict";var s=function(t,e){this.options=e,this.$body=a(document.body),this.$element=a(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};function r(o,n){return this.each(function(){var t=a(this),e=t.data("bs.modal"),i=a.extend({},s.DEFAULTS,t.data(),"object"==typeof o&&o);e||t.data("bs.modal",e=new s(this,i)),"string"==typeof o?e[o](n):i.show&&e.show(n)})}s.VERSION="3.4.0",s.TRANSITION_DURATION=300,s.BACKDROP_TRANSITION_DURATION=150,s.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},s.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},s.prototype.show=function(i){var o=this,t=a.Event("show.bs.modal",{relatedTarget:i});this.$element.trigger(t),this.isShown||t.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(t){a(t.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var t=a.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),t&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:i});t?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(s.TRANSITION_DURATION):o.$element.trigger("focus").trigger(e)}))},s.prototype.hide=function(t){t&&t.preventDefault(),t=a.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(s.TRANSITION_DURATION):this.hideModal())},s.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},s.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},s.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},s.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},s.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},s.prototype.backdrop=function(t){var e=this,i=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=a.support.transition&&i;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+i).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;o?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var n=function(){e.removeBackdrop(),t&&t()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):n()}else t&&t()},s.prototype.handleUpdate=function(){this.adjustDialog()},s.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},s.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",t+n),a(this.fixedContent).each(function(t,e){var i=e.style.paddingRight,o=a(e).css("padding-right");a(e).data("padding-right",i).css("padding-right",parseFloat(o)+n+"px")}))},s.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),a(this.fixedContent).each(function(t,e){var i=a(e).data("padding-right");a(e).removeData("padding-right"),e.style.paddingRight=i||""})},s.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var t=a.fn.modal;a.fn.modal=r,a.fn.modal.Constructor=s,a.fn.modal.noConflict=function(){return a.fn.modal=t,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(t){var e=a(this),i=e.attr("href"),o=e.attr("data-target")||i&&i.replace(/.*(?=#[^\s]+$)/,""),n=a(document).find(o),s=n.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(i)&&i},n.data(),e.data());e.is("a")&&t.preventDefault(),n.one("show.bs.modal",function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",function(){e.is(":visible")&&e.trigger("focus")})}),r.call(n,s,this)})}(jQuery),function(g){"use strict";var m=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};m.VERSION="3.4.0",m.TRANSITION_DURATION=150,m.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){return(t=g.extend({},this.getDefaults(),this.$element.data(),t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-d<c.top?"bottom":"right"==s&&l.right+h>c.width?"left":"left"==s&&l.left-h<c.left?"right":s,o.removeClass(p).addClass(s)}var f=this.getCalculatedOffset(s,l,h,d);this.applyPlacement(f,s);var u=function(){var t=i.hoverState;i.$element.trigger("shown.bs."+i.type),i.hoverState=null,"out"==t&&i.leave(i)};g.support.transition&&this.$tip.hasClass("fade")?o.one("bsTransitionEnd",u).emulateTransitionEnd(m.TRANSITION_DURATION):u()}},m.prototype.applyPlacement=function(t,e){var i=this.tip(),o=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,g.offset.setOffset(i[0],g.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},t),0),i.addClass("in");var r=i[0].offsetWidth,l=i[0].offsetHeight;"top"==e&&l!=n&&(t.top=t.top+n-l);var h=this.getViewportAdjustedDelta(e,t,r,l);h.left?t.left+=h.left:t.top+=h.top;var d=/top|bottom/.test(e),p=d?2*h.left-o+r:2*h.top-n+l,c=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(p,i[0][c],d)},m.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},m.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},m.prototype.hide=function(t){var e=this,i=g(this.$tip),o=g.Event("hide.bs."+this.type);function n(){"in"!=e.hoverState&&i.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),t&&t()}if(this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass("in"),g.support.transition&&i.hasClass("fade")?i.one("bsTransitionEnd",n).emulateTransitionEnd(m.TRANSITION_DURATION):n(),this.hoverState=null,this},m.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},m.prototype.hasContent=function(){return this.getTitle()},m.prototype.getPosition=function(t){var e=(t=t||this.$element)[0],i="BODY"==e.tagName,o=e.getBoundingClientRect();null==o.width&&(o=g.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var n=window.SVGElement&&e instanceof window.SVGElement,s=i?{top:0,left:0}:n?null:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},r=i?{width:g(window).width(),height:g(window).height()}:null;return g.extend({},o,a,r,s)},m.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},m.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var t=g.fn.tooltip;g.fn.tooltip=function e(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=t,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.0",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.0",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(n[t+1]===undefined||e<n[t+1])&&this.activate(s[t])},n.prototype.activate=function(t){this.activeTarget=t,this.clear();var e=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=s(e).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},n.prototype.clear=function(){s(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var t=s.fn.scrollspy;s.fn.scrollspy=e,s.fn.scrollspy.Constructor=n,s.fn.scrollspy.noConflict=function(){return s.fn.scrollspy=t,this},s(window).on("load.bs.scrollspy.data-api",function(){s('[data-spy="scroll"]').each(function(){var t=s(this);e.call(t,t.data())})})}(jQuery),function(r){"use strict";var a=function(t){this.element=r(t)};function e(i){return this.each(function(){var t=r(this),e=t.data("bs.tab");e||t.data("bs.tab",e=new a(this)),"string"==typeof i&&e[i]()})}a.VERSION="3.4.0",a.TRANSITION_DURATION=150,a.prototype.show=function(){var t=this.element,e=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=(i=t.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=e.find(".active:last a"),n=r.Event("hide.bs.tab",{relatedTarget:t[0]}),s=r.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(n),t.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var a=r(document).find(i);this.activate(t.closest("li"),e),this.activate(a,a.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},a.prototype.activate=function(t,e,i){var o=e.find("> .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.0",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n<i&&"top";if("bottom"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&"bottom":!(n+a<=t-o)&&"bottom";var r=null==this.affixed,l=r?n:s.top;return null!=i&&n<=i?"top":null!=o&&t-o<=l+(r?a:e)&&"bottom"},h.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(h.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},h.prototype.checkPositionWithEventLoop=function(){setTimeout(l.proxy(this.checkPosition,this),1)},h.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),e=this.options.offset,i=e.top,o=e.bottom,n=Math.max(l(document).height(),l(document.body).height());"object"!=typeof e&&(o=i=e),"function"==typeof i&&(i=e.top(this.$element)),"function"==typeof o&&(o=e.bottom(this.$element));var s=this.getState(n,t,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var a="affix"+(s?"-"+s:""),r=l.Event(a+".bs.affix");if(this.$element.trigger(r),r.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(h.RESET).addClass(a).trigger(a.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:n-t-o})}};var t=l.fn.affix;l.fn.affix=i,l.fn.affix.Constructor=h,l.fn.affix.noConflict=function(){return l.fn.affix=t,this},l(window).on("load",function(){l('[data-spy="affix"]').each(function(){var t=l(this),e=t.data();e.offset=e.offset||{},null!=e.offsetBottom&&(e.offset.bottom=e.offsetBottom),null!=e.offsetTop&&(e.offset.top=e.offsetTop),i.call(t,e)})})}(jQuery);
402402 ServerAPI.getWorkspace = function (wsName) {
403403 var getUrl = createDbUrl(wsName);
404404 return get(getUrl);
405 }
406
407 ServerAPI.getCustomFields = function () {
408 return get(APIURL + "custom_fields_schema/");
405409 }
406410
407411 ServerAPI.activateWorkspace = function (wsName) {
33
44 angular.module('faradayApp')
55 .controller('modalEditCtrl',
6 ['$modalInstance', '$routeParams','EASEOFRESOLUTION', 'STATUSES', 'commonsFact',
7 'BASEURL', 'severities', 'vuln', 'vulnModelsManager', 'vulnsManager', 'referenceFact',
8 'encodeURIComponentFilter',
9 function($modalInstance, $routeParams,EASEOFRESOLUTION, STATUSES, commonsFact,
10 BASEURL, severities, vuln, vulnModelsManager, vulnsManager, referenceFact,
11 encodeURIComponent) {
12
13 var vm = this;
14
15 vm.baseurl;
16 vm.saveAsModelDisabled = false;
17 vm.easeofresolution;
18 vm.new_ref;
19 vm.new_policyviolation;
20 vm.icons;
21 vm.cweList;
22 vm.cweLimit;
23 vm.cwe_filter;
24
25 vm.file_name_error;
26
27 vm.data;
28 vm.vuln;
29
30 init = function() {
31 vm.modelMessage = "Click here."
32 vm.easeofresolution = EASEOFRESOLUTION;
33 vm.severities = severities;
34 vm.statuses = STATUSES;
35 vm.new_ref = "";
36 vm.new_policyviolation = "";
37 vm.icons = {};
38 vm.baseurl = BASEURL;
39
40 vm.cweList = [];
41 vulnModelsManager.get().then(function(data) {
42 vm.cweList = data;
43 });
44 vm.cweLimit = 5;
45 vm.cwe_filter = "";
46
47 vm.file_name_error = false;
48
49 vm.data = {
50 _id: undefined,
51 _attachments: {},
52 confirmed: false,
53 data: "",
54 desc: "",
55 easeofresolution: undefined,
56 impact: {
57 accountability: false,
58 availability: false,
59 confidentiality: false,
60 integrity: false
61 },
62 name: "",
63 refs: {},
64 resolution: "",
65 severity: undefined,
66 method: "",
67 path: "",
68 pname: "",
69 params: "",
70 query: "",
71 request: "",
72 response: "",
73 website: "",
74 status: "opened",
75 policyviolations: []
76 };
77
78 vm.vuln = angular.copy(vuln);
79
80 vm.populate(vm.vuln);
81
82 // TODO: EVIDENCE SHOUD BE LOADED ALREADY?
83 if(vm.vuln._attachments !== undefined) {
84 vm.data._attachments = vm.vuln._attachments;
85 vm.icons = commonsFact.loadIcons(vm.data._attachments);
86 }
87 };
88
89 vm.saveAsModel = function() {
90 vm.modelMessage = "Done."
91 vm.vulnModelsManager.create(vm.data);
92 vm.saveAsModelDisabled = true;
93 };
94
95 vm.selectedFiles = function(files, e) {
96 files.forEach(function(file) {
97 file.newfile = true;
98 if(file.name.charAt(0) != "_") {
99 if(!vm.data._attachments.hasOwnProperty(file)) vm.data._attachments[file.name] = file;
100 } else {
101 vm.file_name_error = true;
6 ['$modalInstance', '$routeParams', 'EASEOFRESOLUTION', 'STATUSES', 'commonsFact',
7 'BASEURL', 'severities', 'vuln', 'vulnModelsManager', 'vulnsManager', 'referenceFact',
8 'encodeURIComponentFilter', 'customFields',
9 function ($modalInstance, $routeParams, EASEOFRESOLUTION, STATUSES, commonsFact,
10 BASEURL, severities, vuln, vulnModelsManager, vulnsManager, referenceFact,
11 encodeURIComponent, customFields) {
12
13 var vm = this;
14
15 vm.baseurl;
16 vm.saveAsModelDisabled = false;
17 vm.easeofresolution;
18 vm.new_ref;
19 vm.new_policyviolation;
20 vm.icons;
21 vm.cweList;
22 vm.cweLimit;
23 vm.cwe_filter;
24
25 vm.file_name_error;
26
27 vm.data;
28 vm.vuln;
29
30 init = function () {
31 vm.modelMessage = "Click here."
32 vm.easeofresolution = EASEOFRESOLUTION;
33 vm.severities = severities;
34 vm.statuses = STATUSES;
35 vm.new_ref = "";
36 vm.new_policyviolation = "";
37 vm.icons = {};
38 vm.baseurl = BASEURL;
39
40 vm.cweList = [];
41 vulnModelsManager.get().then(function (data) {
42 vm.cweList = data;
43 });
44 vm.cweLimit = 5;
45 vm.cwe_filter = "";
46
47 vm.file_name_error = false;
48
49 vm.customFields = customFields;
50
51 vm.data = {
52 _id: undefined,
53 _attachments: {},
54 confirmed: false,
55 data: "",
56 desc: "",
57 easeofresolution: undefined,
58 impact: {
59 accountability: false,
60 availability: false,
61 confidentiality: false,
62 integrity: false
63 },
64 name: "",
65 refs: {},
66 resolution: "",
67 severity: undefined,
68 method: "",
69 path: "",
70 pname: "",
71 params: "",
72 query: "",
73 request: "",
74 response: "",
75 type: "Vulnerability",
76 website: "",
77 status: "opened",
78 policyviolations: [],
79 custom_fields:{}
80 };
81
82 vm.vuln = angular.copy(vuln);
83
84 vm.populate(vm.vuln);
85
86 // TODO: EVIDENCE SHOUD BE LOADED ALREADY?
87 if (vm.vuln._attachments !== undefined) {
88 vm.data._attachments = vm.vuln._attachments;
89 vm.icons = commonsFact.loadIcons(vm.data._attachments);
90 }
91
92 angular.element('#nav-tabs-container a[data-target="#general"]').click();
93 };
94
95 vm.saveAsModel = function () {
96 vm.modelMessage = "Done."
97 vm.vulnModelsManager.create(vm.data);
98 vm.saveAsModelDisabled = true;
99 };
100
101 vm.selectedFiles = function (files, e) {
102 files.forEach(function (file) {
103 file.newfile = true;
104 if (file.name.charAt(0) != "_") {
105 if (!vm.data._attachments.hasOwnProperty(file)) vm.data._attachments[file.name] = file;
106 } else {
107 vm.file_name_error = true;
108 }
109 });
110 vm.icons = commonsFact.loadIcons(vm._attachments);
102111 }
103 });
104 vm.icons = commonsFact.loadIcons(vm._attachments);
105 }
106
107 vm.removeEvidence = function(name) {
108 delete vm.data._attachments[name];
109 delete vm.icons[name];
110 };
111
112 vm.toggleImpact = function(key) {
113 vm.data.impact[key] = !vm.data.impact[key];
114 };
115
116 vm.ok = function() {
117 // add the ref in new_ref, if there's any
118 vm.newReference();
119 // convert refs to an array of strings
120 var refs = [];
121 vm.data.refs.forEach(function(ref) {
122 refs.push(ref.value);
123 });
124 vm.data.refs = refs;
125
126 // add the policy violation in new_policyviolation, if there's any
127 vm.newPolicyViolation();
128 // convert policy violations to an array of strings
129 var policyviolations = [];
130 vm.data.policyviolations.forEach(function(policyviolation) {
131 policyviolations.push(policyviolation.value);
132 });
133 vm.data.policyviolations = policyviolations;
134
135 vulnsManager.updateVuln(vm.vuln, vm.data).then(function(){
136 $modalInstance.close(vm.data);
137 }, function(data){
138 commonsFact.showMessage("Error updating vuln " + vm.vuln.name + " (" + vm.vuln._id + "): " + (data.message || JSON.stringify(data.messages)));
139 });
140
141
142 };
143
144 vm.cancel = function() {
145 $modalInstance.dismiss('cancel');
146 };
147
148 vm.newReference = function() {
149 if (vm.new_ref != "") {
150 // we need to check if the ref already exists
151 if (vm.data.refs.filter(function(ref) {return ref.value === vm.new_ref}).length == 0) {
152 vm.data.refs.push({value: vm.new_ref});
153 vm.new_ref = "";
154 }
155 }
156 };
157
158 vm.openReference = function(text) {
159 window.open(referenceFact.processReference(text), '_blank');
160 };
161
162 vm.openEvidence = function(name) {
163 var currentEvidence = vm.data._attachments[name];
164 if (!currentEvidence.newfile)
165 window.open(vm.baseurl + '_api/v2/ws/' + $routeParams.wsId + '/vulns/' + vm.data._id + '/attachment/' + encodeURIComponent(name), '_blank');
166 };
167
168 vm.newPolicyViolation = function() {
169 if (vm.new_policyviolation != "") {
170 // we need to check if the policy violation already exists
171 if (vm.data.policyviolations.filter(function(policyviolation) {return policyviolation.value === vm.new_policyviolation}).length == 0) {
172 vm.data.policyviolations.push({value: vm.new_policyviolation});
173 vm.new_policyviolation = "";
174 }
175 }
176 };
177
178 vm.populate = function(item) {
179 for (var key in vm.data) {
180 if (key != "refs" && key != "policyviolations" && item.hasOwnProperty(key) && vm.data.hasOwnProperty(key)) {
181 vm.data[key] = item[key];
182 }
183 }
184 // convert refs to an array of objects
185 var refs = [];
186 item.refs.forEach(function(ref) {
187 refs.push({value: ref});
188 });
189 vm.data.refs = refs;
190
191 // convert policyviolations to an array of objects
192 var policyviolations = [];
193 item.policyviolations.forEach(function(policyviolation) {
194 policyviolations.push({value: policyviolation});
195 });
196 vm.data.policyviolations = policyviolations;
197 };
198
199 init();
200 }]);
112
113 vm.removeEvidence = function (name) {
114 delete vm.data._attachments[name];
115 delete vm.icons[name];
116 };
117
118 vm.toggleImpact = function (key) {
119 vm.data.impact[key] = !vm.data.impact[key];
120 };
121
122 vm.ok = function () {
123 // add the ref in new_ref, if there's any
124 vm.newReference();
125 // convert refs to an array of strings
126 var refs = [];
127 vm.data.refs.forEach(function (ref) {
128 refs.push(ref.value);
129 });
130 vm.data.refs = refs;
131
132 // add the policy violation in new_policyviolation, if there's any
133 vm.newPolicyViolation();
134 // convert policy violations to an array of strings
135 var policyviolations = [];
136 vm.data.policyviolations.forEach(function (policyviolation) {
137 policyviolations.push(policyviolation.value);
138 });
139 vm.data.policyviolations = policyviolations;
140
141 vulnsManager.updateVuln(vm.vuln, vm.data).then(function () {
142 $modalInstance.close(vm.data);
143 }, function (data) {
144 commonsFact.showMessage("Error updating vuln " + vm.vuln.name + " (" + vm.vuln._id + "): " + (data.message || JSON.stringify(data.messages)));
145 });
146
147
148 };
149
150 vm.cancel = function () {
151 $modalInstance.dismiss('cancel');
152 };
153
154 vm.newReference = function () {
155 if (vm.new_ref != "") {
156 // we need to check if the ref already exists
157 if (vm.data.refs.filter(function (ref) {
158 return ref.value === vm.new_ref
159 }).length == 0) {
160 vm.data.refs.push({value: vm.new_ref});
161 vm.new_ref = "";
162 }
163 }
164 };
165
166 vm.openReference = function (text) {
167 window.open(referenceFact.processReference(text), '_blank');
168 };
169
170 vm.openEvidence = function (name) {
171 var currentEvidence = vm.data._attachments[name];
172 if (!currentEvidence.newfile)
173 window.open(vm.baseurl + '_api/v2/ws/' + $routeParams.wsId + '/vulns/' + vm.data._id + '/attachment/' + encodeURIComponent(name), '_blank');
174 };
175
176 vm.newPolicyViolation = function () {
177 if (vm.new_policyviolation != "") {
178 // we need to check if the policy violation already exists
179 if (vm.data.policyviolations.filter(function (policyviolation) {
180 return policyviolation.value === vm.new_policyviolation
181 }).length == 0) {
182 vm.data.policyviolations.push({value: vm.new_policyviolation});
183 vm.new_policyviolation = "";
184 }
185 }
186 };
187
188 vm.populate = function (item) {
189 for (var key in vm.data) {
190 if (key != "refs" && key != "policyviolations" && item.hasOwnProperty(key) && vm.data.hasOwnProperty(key)) {
191 vm.data[key] = item[key];
192 }
193 }
194 // convert refs to an array of objects
195 var refs = [];
196 item.refs.forEach(function (ref) {
197 refs.push({value: ref});
198 });
199 vm.data.refs = refs;
200
201 // convert policyviolations to an array of objects
202 var policyviolations = [];
203 item.policyviolations.forEach(function (policyviolation) {
204 policyviolations.push({value: policyviolation});
205 });
206 vm.data.policyviolations = policyviolations;
207 };
208
209
210 vm.updateBtnSeverityColor = function (severity) {
211 var color = undefined;
212 switch (severity) {
213 case "unclassified":
214 color = '#999999';
215 break;
216 case "info":
217 color = '#2e97bd';
218 break;
219 case "low":
220 color = '#a1ce31';
221 break;
222 case "med":
223 color = '#dfbf35';
224 break;
225 case "high":
226 color = '#df3936';
227 break;
228 case "critical":
229 color = '#932ebe';
230 break;
231 }
232
233 angular.element('#btn-chg-severity').css('background-color', color);
234 angular.element('#caret-chg-severity').css('background-color', color);
235 };
236
237 vm.changeSeverity = function (severity) {
238 vm.data.severity = severity;
239 vm.updateBtnSeverityColor(severity);
240 };
241
242 vm.updateBtnStatusColor = function (status) {
243 var color = undefined;
244 switch (status) {
245 case "opened":
246 color = '#DB3130';
247 break;
248 case "closed":
249 color = '#97F72C';
250 break;
251 case "re-opened":
252 color = '#DBB72F';
253 break;
254 case "risk-accepted":
255 color = '#288DB4';
256 break;
257 default:
258 color = '#aaaaaa';
259 break;
260 }
261
262 angular.element('#btn-chg-status').css('background-color', color);
263 angular.element('#caret-chg-status').css('background-color', color);
264 };
265
266 vm.changeStatus = function (status) {
267 vm.data.status = status;
268 vm.updateBtnStatusColor(status);
269 };
270
271
272 init();
273 }])
274 ;
33
44 angular.module('faradayApp')
55 .controller('modalNewVulnCtrl',
6 ['$modalInstance', '$filter', '$upload', 'EASEOFRESOLUTION', 'commonsFact', 'severities', 'workspace', 'targetFact', 'vulnModelsManager', 'vulnsManager',
7 function($modalInstance, $filter, $upload, EASEOFRESOLUTION, commonsFact, severities, workspace, targetFact, vulnModelsManager, vulnsManager) {
6 ['$modalInstance', '$filter', '$upload', 'EASEOFRESOLUTION', 'commonsFact', 'severities', 'workspace', 'targetFact', 'vulnModelsManager', 'vulnsManager', 'customFields',
7 function($modalInstance, $filter, $upload, EASEOFRESOLUTION, commonsFact, severities, workspace, targetFact, vulnModelsManager, vulnsManager, customFields) {
88
99 var vm = this;
1010
4545 vm.icons = {};
4646
4747 vm.host_parents = false;
48
49 vm.customFields = customFields;
4850
4951 vm.cweList = [];
5052 vulnModelsManager.get().then(function(data) {
8486 response: "",
8587 severity: undefined,
8688 type: "Vulnerability",
87 website: ""
89 website: "",
90 custom_fields:{}
8891 };
92
93 customFields.forEach(function(cf) {
94 vm.data.custom_fields[cf.field_display_name] = null;
95 });
8996
9097 vm.targets = [];
9198 vm.target_filter = "";
238245 vm.data.policyviolations = policyviolations;
239246 }
240247
248 vm.updateBtnSeverityColor = function (severity) {
249 var color = undefined;
250 switch (severity) {
251 case "unclassified":
252 color = '#999999';
253 break;
254 case "info":
255 color = '#2e97bd';
256 break;
257 case "low":
258 color = '#a1ce31';
259 break;
260 case "med":
261 color = '#dfbf35';
262 break;
263 case "high":
264 color = '#df3936';
265 break;
266 case "critical":
267 color = '#932ebe';
268 break;
269 default:
270 color = '#AAAAAA';
271 break;
272 }
273
274 angular.element('#btn-chg-severity').css('background-color', color);
275 angular.element('#caret-chg-severity').css('background-color', color);
276 };
277
278 vm.changeSeverity = function (severity) {
279 vm.data.severity = severity;
280 vm.updateBtnSeverityColor(severity);
281 };
282
241283 init();
242284 }]);
3131 $scope.vulnWebSelected;
3232
3333 $scope.gridHeight;
34 $scope.customFields;
3435 var allVulns;
3536
3637 var searchFilter = {};
272273
273274 loadVulns();
274275
276 loadCustomFields();
277
275278 angular.element($window).bind("resize", function () {
276279 resizeGrid();
277280 });
281 };
282
283
284 var loadCustomFields = function () {
285 var deferred = $q.defer();
286 ServerAPI.getCustomFields().then(
287 function(response){
288 $scope.customFields = response.data;
289 deferred.resolve($scope.customFields);
290 }, function(){
291 deferred.reject();
292 });
278293 };
279294
280295 var defineColumns = function() {
800815 },
801816 vuln: function() {
802817 return vulns[0];
818 },
819 customFields: function () {
820 return $scope.customFields;
803821 }
804822 }
805823 });
10661084 },
10671085 workspace: function() {
10681086 return $scope.workspace;
1087 },
1088 customFields: function () {
1089 return $scope.customFields;
10691090 }
10701091 }
10711092 });
0 // Faraday Penetration Test IDE
1 // Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/)
2 // See the file 'doc/LICENSE' for the license information
3
4 angular.module('faradayApp')
5 .directive('autofocus', ['$timeout', function ($timeout) {
6 return {
7 restrict: 'A',
8 link: function ($scope, $element) {
9 $timeout(function () {
10 $element[0].focus();
11 });
12 }
13 }
14 }]);
0 // Faraday Penetration Test IDE
1 // Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/)
2 // See the file 'doc/LICENSE' for the license information
3
4 angular.module('faradayApp')
5 .directive('checkCustomType', function () {
6 return {
7 restrict: 'A',
8 link: function (scope, elm, attrs, ctrl) {
9 elm.on('keydown', function (event) {
10 if (attrs.checkCustomType === 'int') {
11 if (event.shiftKey) {
12 event.preventDefault();
13 return false;
14 }
15 //console.log(event.which);
16 if ([8, 13, 27, 37, 38, 39, 40].indexOf(event.which) > -1) {
17 // backspace, enter, escape, arrows
18 return true;
19 } else if (event.which >= 48 && event.which <= 57) {
20 // numbers 0 to 9
21 return true;
22 } else if (event.which >= 96 && event.which <= 105) {
23 // numpad number
24 return true;
25 }
26 else {
27 event.preventDefault();
28 return false;
29 }
30 }else {
31 return true;
32 }
33
34 });
35 }
36 }
37 });
0 // Faraday Penetration Test IDE
1 // Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/)
2 // See the file 'doc/LICENSE' for the license information
3
4 angular.module('faradayApp')
5 .directive('customField', [function () {
6 return {
7 restrict: 'E',
8 scope: true,
9 replace: true,
10 template: '<div><div class="tab-pane-header">{{cf.field_display_name}}</div> \n\
11 <div class="form-group" ng-if="cf.field_type !== \'list\'"> \n\
12 <label class="sr-only" for="{{cf.field_name}}">{{cf.field_display_name}}</label> \n\
13 <input type="text" class="form-control input-sm" id="{{cf.field_name}}" name="{{cf.field_name}}" \n\
14 placeholder="{{cf.field_display_name}}" \n\
15 ng-model="modal.data.custom_fields[cf.field_display_name]" check-custom-type="{{cf.field_type}}" \n\
16 uib-tooltip="{{(cf.field_type === \'int\') ? \'Type only numbers\' : \'Input type text\'}}"/> \n\
17 </div> \n\
18 <div class="form-group " ng-if="cf.field_type === \'list\'">\n\
19 <div class="input-group"> \n\
20 <label class="sr-only" for="{{cf.field_name}}">{{cf.field_display_name}}</label> \n\
21 <input type="text" class="form-control input-sm" id="{{cf.field_name}}" name="{{cf.field_name}}" \n\
22 placeholder="{{cf.field_display_name}}" \n\
23 ng-model="valueField" \n\
24 uib-tooltip="Input type list"/> \n\
25 <span class="input-group-addon cursor"><i class="fa fa-plus-circle" ng-click="newValueField(valueField)"></i></span> \n\
26 </div> \n\
27 </div> \n\
28 <div class="col-md-12 reference last-item-field" ng-repeat="item in modal.data.custom_fields[cf.field_display_name] track by $index" ng-class="{\'last-item-field\':$last}" ng-if="cf.field_type === \'list\'"> \n\
29 <div class="input-group margin-bottom-sm"> \n\
30 <label class="sr-only" for="vuln-refs-create">{{cf.field_display_name}}</label> \n\
31 <input type="text" class="form-control" id="vuln-refs-create" placeholder="{{cf.field_display_name}}" \n\
32 ng-model="item.value" \n\
33 role="button" readonly/> \n\
34 <span class="input-group-addon cursor" ng-click="modal.data.custom_fields[cf.field_display_name].splice($index, 1)"> \n\
35 <i class="fa fa-minus-circle"></i></span> \n\
36 </div> \n\
37 </div> \n\
38 </div></div>',
39 link: function (scope, element, attrs) {
40
41 scope.newValueField = function (valueField) {
42 if (valueField !== "" && valueField !== undefined) {
43 if(scope.modal.data.custom_fields[scope.cf.field_display_name] == null )
44 scope.modal.data.custom_fields[scope.cf.field_display_name] = [];
45
46 // we need to check if the ref already exists
47 if (scope.modal.data.custom_fields[scope.cf.field_display_name].filter(function(field) {return field.value === valueField}).length === 0) {
48 scope.modal.data.custom_fields[scope.cf.field_display_name].push({value: valueField});
49 scope.valueField = "";
50 }
51 angular.element('#'+scope.cf.field_name).val("");
52 }
53 }
54 }
55 }
56 }]);
22 <!-- See the file 'doc/LICENSE' for the license information -->
33
44 <form name="formEdit" novalidate>
5 <div class="modal-header">
6 <div class="modal-button">
7 <button class="btn btn-success" ng-click="modal.ok()" ng-disabled="formEdit.$invalid || modal.data.severity === undefined">OK</button>
8 <button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>
5 <!--<div class="modal-header">-->
6 <!--<div class="modal-button">-->
7 <!--<button class="btn btn-success" ng-click="modal.ok()"-->
8 <!--ng-disabled="formEdit.$invalid || modal.data.severity === undefined">OK-->
9 <!--</button>-->
10 <!--<button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>-->
11 <!--</div>-->
12 <!--<h3 class="modal-title">Vulnerability edit</h3>-->
13 <!--</div>-->
14
15
16 <div class="modal-body">
17
18 <div class="mt-3">
19 <div class="modal-data-name" ng-init="modal.isNameEditable = false">
20 <div ng-if="modal.isNameEditable == false && modal.data.name !== undefined">
21 <span class="data-name">{{modal.data.name}}</span>
22 <span class="edit-name-icon" ng-click="modal.isNameEditable = true"><i
23 class="fa fa-pencil fa-lg" aria-hidden="true"></i></span>
24 </div>
25
26 <div ng-if="modal.isNameEditable == true || modal.data.name == undefined">
27 <div class="form-group" ng-class="{'has-error': formEdit.name.$invalid }">
28 <label class="sr-only" for="inp-edit-name">Vuln name</label>
29 <input type="text" class="form-control" id="inp-edit-name"
30 ng-model="modal.data.name" name="name" placeholder="Vuln name"
31 ng-blur="modal.isNameEditable = modal.data.name == undefined "
32 autofocus required>
33 </div>
34 </div>
35
36 </div>
37
38 <div class="edit-vulns-dropdowns row" ng-init="modal.updateBtnSeverityColor(modal.data.severity);modal.updateBtnStatusColor(modal.data.status)">
39
40 <div class="btn-group col-md-3 col-sm-6 col-xs-6">
41 <button type="button" class="dropdown-toggle btn-change-property primary-btn"
42 data-toggle="dropdown"
43 id="btn-chg-severity"
44 title="{{modal.data.severity}}">
45 {{modal.data.severity | uppercase}}
46 </button>
47 <button type="button" class="dropdown-toggle secondary-btn btn-change-property"
48 data-toggle="dropdown"
49 id="caret-chg-severity"
50 title="Change severity">
51 <span> <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i> </span>
52 </button>
53 <ul class="dropdown-menu dropdown-menu-right" role="menu">
54 <li>
55 <a class="ws"
56 ng-click="modal.changeSeverity('unclassified')">UNCLASSIFIED</a>
57 <a class="ws"
58 ng-click="modal.changeSeverity('info')">INFO</a>
59 <a class="ws"
60 ng-click="modal.changeSeverity('low')">LOW</a>
61 <a class="ws"
62 ng-click="modal.changeSeverity('med')">MEDIUM</a>
63 <a class="ws"
64 ng-click="modal.changeSeverity('high')">HIGH</a>
65 <a class="ws"
66 ng-click="modal.changeSeverity('critical')">CRITICAL</a>
67 </li>
68 </ul>
69 </div>
70
71
72 <div class="btn-group col-md-3 col-sm-6 col-xs-6">
73 <button type="button" class="dropdown-toggle btn-change-property primary-btn btn-primary-white"
74 data-toggle="dropdown"
75 id="btn-chg-ease_resolution"
76 title="{{modal.data.easeofresolution}}">
77 {{modal.data.easeofresolution || "Ease of Resolution"}}
78 </button>
79 <button type="button" class="dropdown-toggle secondary-btn btn-change-property btn-secondary-white"
80 data-toggle="dropdown"
81 id="caret-ease_resolution"
82 title="Change Ease of Resolution">
83 <span> <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i> </span>
84 </button>
85 <ul class="dropdown-menu dropdown-menu-right" role="menu">
86 <li>
87 <a class="ws"
88 ng-click="modal.data.easeofresolution = null">Undetermined</a>
89 <a class="ws"
90 ng-click="modal.data.easeofresolution = 'trivial'">Trivial</a>
91 <a class="ws"
92 ng-click="modal.data.easeofresolution = 'simple'">Simple</a>
93 <a class="ws"
94 ng-click="modal.data.easeofresolution = 'moderate'">Moderate</a>
95 <a class="ws"
96 ng-click="modal.data.easeofresolution = 'difficult'">Difficult</a>
97 <a class="ws"
98 ng-click="modal.data.easeofresolution = 'infeasible'">Infeasible</a>
99 </li>
100 </ul>
101 </div>
102
103
104 <div class="btn-group col-md-3 col-sm-6 col-xs-6">
105 <button type="button" class="dropdown-toggle btn-change-property primary-btn text-capitalize"
106 data-toggle="dropdown"
107 id="btn-chg-status"
108 title="{{modal.data.status}}">
109 {{modal.data.status || "Status"}}
110 </button>
111 <button type="button" class="dropdown-toggle secondary-btn btn-change-property"
112 data-toggle="dropdown"
113 id="caret-chg-status"
114 title="Change Status">
115 <span> <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i> </span>
116 </button>
117 <ul class="dropdown-menu dropdown-menu-right" role="menu">
118 <li>
119 <a class="ws"
120 ng-click="modal.changeStatus('opened')">Opened</a>
121 <a class="ws"
122 ng-click="modal.changeStatus('closed')">Closed</a>
123 <a class="ws"
124 ng-click="modal.changeStatus('re-opened')">Re-opened</a>
125 <a class="ws"
126 ng-click="modal.changeStatus('risk-accepted')">Risk-accepted</a>
127 </li>
128 </ul>
129 </div>
130
131 <div class="col-md-3 col-sm-6 col-xs-6">
132 <label class="chbox-container">
133 <div class="tab-pane-header"><h4>Confirmed</h4></div>
134 <input type="checkbox" ng-checked="modal.data.confirmed === true" ng-model="modal.data.confirmed">
135 <span class="checkmark"></span>
136 </label>
137 </div>
138
139 </div>
140
141
142 <!-- Nav tabs -->
143 <ul class="nav nav-tabs" id="nav-tabs-container">
144 <li class="nav-item active" ng-class="{'has-error': formEdit.desc.$invalid}">
145 <a class="nav-link active" data-toggle="tab" data-target="#general"
146 href="javascript:;">General</a>
147 </li>
148 <li class="nav-item">
149 <a class="nav-link" data-toggle="tab" data-target="#technical_details" href="javascript:;">Technical
150 Details</a>
151 </li>
152 <li class="nav-item">
153 <a class="nav-link" data-toggle="tab" data-target="#tab-evidence" href="javascript:;">Evidence</a>
154 </li>
155 <li class="nav-item">
156 <a class="nav-link" data-toggle="tab" data-target="#tab-custom-fields" href="javascript:;">Custom Fields</a>
157 </li>
158 </ul>
159
160 <!-- Tab panes -->
161 <div class="tab-content">
162 <div id="general" class="container tab-pane-container tab-pane active"><br>
163
164 <div class="col-md-12">
165 <div class="tab-pane-header">Search vulnerability database templates
166 <a
167 href="https://github.com/infobyte/faraday/wiki/vulnerabilities-database"
168 target="_blank"><span class="glyphicon glyphicon-question-sign"
169 title="Read more about vulnerability templates in the official Faraday Documentation"></span></a>
170 </div>
171 <div class="form-group">
172 <input type="text" ng-model="modal.cwe_selected" class="form-control input-sm"
173 placeholder="Search for vulnerability templates"
174 uib-typeahead="cwe as cwe.name for cwe in modal.cweList | filter:{name: $viewValue} | limitTo:10"
175 typeahead-on-select="modal.populate($item, $model, $label)">
176 </div>
177 </div>
178
179 <div class="col-md-12 custom-divider"></div>
180
181
182 <div class="col-md-12">
183 <div class="tab-pane-header">Description</div>
184 <div class="form-group" ng-class="{'has-error': formEdit.desc.$invalid }">
185 <label class="sr-only" for="vuln-data">Vuln description</label>
186 <textarea class="form-control" id="vuln-desc" name="desc"
187 ng-model="modal.data.desc" placeholder="Description"
188 style="margin: 0 2px 0 0; height: 239px; width: 810px;" required></textarea>
189 </div><!-- .form-group -->
190 </div>
191
192
193 <div class="form-group margin-top-22px">
194 <div class="col-md-12">
195 <div class="tab-pane-header">References</div>
196 <div class="input-group margin-bottom-sm">
197 <label class="sr-only" for="vuln-refs">References</label>
198 <input type="text" class="form-control" id="vuln-refs" placeholder="Reference"
199 ng-model="modal.new_ref"/>
200 <span class="input-group-addon cursor" ng-click="modal.newReference()"><i
201 class="fa fa-plus-circle"></i></span>
202 </div>
203 </div>
204 <div class="col-md-12 reference" ng-repeat="reference in modal.data.refs">
205 <div class="input-group margin-bottom-sm">
206 <label class="sr-only" for="vuln-refs-create">References</label>
207 <input type="text" class="form-control" id="vuln-refs-create" placeholder="Reference"
208 ng-model="reference.value" ng-click="modal.openReference(reference.value)"
209 role="button"
210 readonly/>
211 <span class="input-group-addon cursor" ng-click="modal.data.refs.splice($index, 1)"><i
212 class="fa fa-minus-circle"></i></span>
213 </div>
214 </div>
215 </div><!-- .form-group -->
216
217
218 <div class="col-md-12 margin-top-22px">
219 <div class="tab-pane-header">Resolution</div>
220 <div class="form-group">
221 <label class="sr-only" for="vuln-data">Vuln resolution</label>
222 <textarea class="form-control" id="vuln-resolution" rows="4"
223 ng-model="modal.data.resolution" placeholder="Resolution"></textarea>
224 </div><!-- .form-group -->
225 </div>
226
227
228 <div class="form-group margin-top-22px">
229 <div class="col-md-12">
230 <div class="tab-pane-header">Policy Violations</div>
231 <div class="input-group margin-bottom-sm">
232 <label class="sr-only" for="vuln-policyviolations">Policy Violations</label>
233 <input type="text" class="form-control" id="vuln-policyviolations"
234 placeholder="Policy Violations" ng-model="modal.new_policyviolation"/>
235 <span class="input-group-addon cursor" ng-click="modal.newPolicyViolation()"><i
236 class="fa fa-plus-circle"></i></span>
237 </div>
238 </div>
239 <div class="col-md-12 reference" ng-repeat="policyviolation in modal.data.policyviolations">
240 <div class="input-group margin-bottom-sm">
241 <label class="sr-only" for="vuln-policyviolations-value">Policy Violation</label>
242 <input type="text" class="form-control" id="vuln-policyviolations-value"
243 placeholder="Policy Violation" ng-model="policyviolation.value" disabled/>
244 <span class="input-group-addon cursor"
245 ng-click="modal.data.policyviolations.splice($index, 1)"><i
246 class="fa fa-minus-circle"></i></span>
247 </div>
248 </div>
249 </div><!-- .form-group -->
250
251 <div class="col-md-12 margin-bottom-15px margin-top-22px">
252 <div class="tab-pane-header">Impact</div>
253 <h4><span ng-repeat="(key, value) in modal.data.impact" class="normal-size"
254 style="cursor: pointer;">
255 <span ng-class="{'label-impact label-default-impact': !value, 'label-impact label-success-impact': value}"
256 ng-click="modal.toggleImpact(key)">{{key}}</span>
257 </span></h4><!-- .normal-size -->
258 </div>
259
260 </div>
261 <div id="technical_details" class="container tab-pane-container tab-pane fade"><br>
262 <div class="col-md-12">
263 <div class="tab-pane-header">Data</div>
264 <div class="form-group">
265 <label class="sr-only" for="vuln-data">Vuln data</label>
266 <textarea class="form-control" id="vuln-data" rows="5"
267 ng-model="modal.data.data" placeholder="Data"></textarea>
268 </div><!-- .form-group -->
269 </div>
270
271 <div class="col-md-6 col-sm-12 col-xs-12" ng-show="modal.data.type === 'VulnerabilityWeb'">
272 <div class="tab-pane-header">Request</div>
273 <div class="form-group">
274 <label class="sr-only" for="vuln-request">Vuln request</label>
275 <textarea class="form-control" id="vuln-request" rows="8"
276 ng-model="modal.data.request" placeholder="Request"></textarea>
277 </div><!-- .form-group -->
278 </div>
279
280 <div class="col-md-6 col-sm-12 col-xs-12" ng-show="modal.data.type === 'VulnerabilityWeb'">
281 <div class="tab-pane-header">Response</div>
282 <div class="form-group">
283 <label class="sr-only" for="vuln-response">Vuln response</label>
284 <textarea class="form-control" id="vuln-response" rows="8"
285 ng-model="modal.data.response" placeholder="Response"></textarea>
286 </div><!-- .form-group -->
287 </div>
288
289 <div class="margin-top-22px" ng-show="modal.data.type === 'VulnerabilityWeb'">
290 <div class="col-md-4">
291 <div class="tab-pane-header">Method</div>
292 <div class="form-group">
293 <label class="sr-only control-label" for="vuln-method">Method</label>
294 <input type="text" class="form-control" id="vuln-method" placeholder="Method"
295 ng-model="modal.data.method"/>
296 </div><!-- .form-group -->
297 </div>
298
299 <div class="col-md-3">
300 <div class="tab-pane-header">Param Name</div>
301 <div class="form-group">
302 <label class="sr-only control-label" for="vuln-pname">Param Name</label>
303 <input type="text" class="form-control" id="vuln-pname" placeholder="Param name"
304 ng-model="modal.data.pname"/>
305 </div><!-- .form-group -->
306 </div>
307
308 <div class="col-md-5">
309 <div class="tab-pane-header">Params</div>
310 <div class="form-group">
311 <label class="sr-only control-label" for="vuln-params">Params</label>
312 <input type="text" class="form-control" id="vuln-params" placeholder="Params"
313 ng-model="modal.data.params"/>
314 </div><!-- .form-group -->
315 </div>
316
317 <div class="col-md-4">
318 <div class="tab-pane-header">Path</div>
319 <div class="form-group">
320 <label class="sr-only control-label" for="vuln-path">Path</label>
321 <input type="text" class="form-control" id="vuln-path" placeholder="Path"
322 ng-model="modal.data.path"/>
323 </div><!-- .form-group -->
324 </div>
325
326 <div class="col-md-4">
327 <div class="tab-pane-header">Query</div>
328 <div class="form-group">
329 <label class="sr-only control-label" for="vuln-query">Query</label>
330 <input type="text" class="form-control" id="vuln-query" placeholder="Query"
331 ng-model="modal.data.query"/>
332 </div><!-- .form-group -->
333 </div>
334
335 <div class="col-md-4">
336 <div class="tab-pane-header">Website</div>
337 <div class="form-group">
338 <label class="sr-only control-label" for="vuln-website">Website</label>
339 <input type="text" class="form-control" id="vuln-website" placeholder="Website"
340 ng-model="modal.data.website"/>
341 </div><!-- .form-group -->
342 </div>
343 </div>
344 </div>
345 <div id="tab-evidence" class="container tab-pane fade"><br>
346 <div class="col-md-12 margin-bottom-15px">
347 <div class="tab-pane-header">Evidence</div>
348 <div class="alert alert-danger normal-size" role="alert" ng-if="modal.file_name_error">
349 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
350 <span class="sr-only">Error:</span>
351 Cannot upload evidence starting with underscore, please choose a different name for the
352 file.
353 </div>
354 <div class="form-group normal-size">
355 <input type="file" id="evidence" ng-file-select ng-multiple="true" resetOnClick="false"
356 ng-file-change="modal.selectedFiles($files, $event)"/>
357 <p class="help-block">Multiple files are allowed.</p>
358 </div><!-- .form-group -->
359 <div id="evidenceFiles" class="normal-size" ng-if="modal.data._attachments">
360 <ul>
361 <li ng-repeat="(name, file) in modal.data._attachments">
362 <div class="btn-group">
363 <button type="button" class="btn btn-default"
364 ng-click="modal.openEvidence(name)">
365 <span class="fa {{icons[name]}}"
366 title="Evidence {{name | decodeURIComponent}}"></span> {{name |
367 decodeURIComponent}}
368 </button><!-- ng-repeat -->
369 <button type="button" class="btn btn-danger"
370 ng-click="modal.removeEvidence(name)">
371 <span class="glyphicon glyphicon-trash"></span>
372 </button>
373 </div>
374 </li>
375 </ul>
376 </div><!-- #evidenceFiles -->
377 </div>
378
379 </div>
380
381 <div id="tab-custom-fields" class="container tab-pane-container tab-pane fade"><br>
382 <div class="col-md-12 margin-bottom-15px">
383 <div class="col-md-12" ng-repeat="cf in modal.customFields | orderBy : 'field_order'">
384 <custom-field field="{{cf}}"></custom-field>
385 </div>
386
387 </div>
388 </div>
9389 </div>
10 <h3 class="modal-title">Vulnerability edit</h3>
11 </div>
12 <div class="modal-body">
13 <div class="form-horizontal">
14 <div class="form-group">
15 <div class="col-md-12">
16 <h5>Vulnerability template</h5>
17 <input type="text" ng-model="modal.cwe_selected" class="form-control input-sm" placeholder="Search for vulnerability template" uib-typeahead="cwe as cwe.name for cwe in modal.cweList | filter:{name: $viewValue} | limitTo:10" typeahead-on-select="modal.populate($item, $model, $label)">
18 </div>
390
391
392 <div class="modal-footer">
393 <div class="modal-button">
394 <button class="btn btn-success" ng-click="modal.ok()" ng-disabled="formEdit.$invalid">OK</button>
395 <button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>
19396 </div>
20 <div class="form-group">
21 <div class="col-md-3 severities">
22 <h5>Severity</h5>
23 <button type="button" class="btn btn-default dropdown-toggle color-{{modal.data.severity}}" name="severity" data-toggle="dropdown" title="Change severity" ng-class="{'button-error': modal.data.severity === undefined}">
24 {{modal.data.severity || 'Edit severity'}} <span class="caret" style="color:#000"></span>
25 </button>
26 <ul id="nav" class="dropdown-menu dropdown-menu-left" role="menu">
27 <li ng-repeat="s in modal.severities"><a href="" class="ws color-{{s}}" ng-click="modal.data.severity=s">{{s}}</a></li>
28 </ul><!-- WS navigation -->
29 </div>
30 <div class="col-md-3">
31 <h5>Ease of Resolution</h5>
32 <select class="form-control" ng-model="modal.data.easeofresolution" ng-options="e as e for e in modal.easeofresolution" style="padding:0px 12px;">
33 <option value=""></option>
34 </select>
35 </div>
36 <div class="col-md-3">
37 <h5>Status</h5>
38 <select class="form-control" ng-model="modal.data.status" ng-options="e as e for e in modal.statuses" style="padding:0px 12px;">
39 </select>
40 </div>
41 <div class="col-md-3">
42 <h5>Confirmed</h5>
43 <input type="checkbox" id="confirmed" ng-model="modal.data.confirmed" />
44 </div>
45 </div><!-- .form-group -->
46 <div class="form-group" ng-class="{'has-error': formEdit.name.$invalid }">
47 <div class="col-md-12">
48 <label class="sr-only" for="vuln-name">Vuln name</label>
49 <input type="text" class="form-control" id="vuln-name" name="name" placeholder="Name" ng-model="modal.data.name" required/>
50 </div>
51 </div><!-- .form-group -->
52 <div class="form-group" ng-class="{'has-error': formEdit.desc.$invalid }">
53 <div class="col-md-12">
54 <label class="sr-only" for="vuln-desc">Vuln description</label>
55 <textarea class="form-control" id="vuln-desc" name="desc" placeholder="Description" ng-model="modal.data.desc" required="" style="margin: 0px 2px 0px 0px; height: 239px; width: 867px;"></textarea></textarea>
56 </div>
57 </div><!-- .form-group -->
58 <div class="form-group">
59 <div class="col-md-12">
60 <label class="sr-only" for="vuln-data">Vuln data</label>
61 <textarea class="form-control" id="vuln-data" placeholder="Data" ng-model="modal.data.data"></textarea>
62 </div>
63 </div><!-- .form-group -->
64 <div class="form-group">
65 <div class="col-md-12">
66 <div class="input-group margin-bottom-sm">
67 <label class="sr-only" for="vuln-refs">References</label>
68 <input type="text" class="form-control" id="vuln-refs" placeholder="Reference" ng-model="modal.new_ref"/>
69 <span class="input-group-addon cursor" ng-click="modal.newReference()"><i class="fa fa-plus-circle"></i></span>
70 </div>
71 </div>
72 <div class="col-md-12 reference" ng-repeat="reference in modal.data.refs">
73 <div class="input-group margin-bottom-sm">
74 <label class="sr-only" for="vuln-refs">References</label>
75 <input type="text" class="form-control" id="vuln-refs" placeholder="Reference" ng-model="reference.value" ng-click="modal.openReference(reference.value)" role="button" readonly />
76 <span class="input-group-addon cursor" ng-click="modal.data.refs.splice($index, 1)"><i class="fa fa-minus-circle"></i></span>
77 </div>
78 </div>
79 </div><!-- .form-group -->
80 <div class="form-group">
81 <div class="col-md-12">
82 <label class="sr-only" for="vuln-resolution">Vuln Resolution</label>
83 <textarea class="form-control" id="vuln-resolution" placeholder="Resolution" ng-model="modal.data.resolution"></textarea>
84 </div>
85 </div><!-- .form-group -->
86 <div class="form-group">
87 <div class="col-md-12">
88 <div class="input-group margin-bottom-sm">
89 <label class="sr-only" for="vuln-policyviolations">Policy Violations</label>
90 <input type="text" class="form-control" id="vuln-policyviolations" placeholder="Policy Violations" ng-model="modal.new_policyviolation"/>
91 <span class="input-group-addon cursor" ng-click="modal.newPolicyViolation()"><i class="fa fa-plus-circle"></i></span>
92 </div>
93 </div>
94 <div class="col-md-12 reference" ng-repeat="policyviolation in modal.data.policyviolations">
95 <div class="input-group margin-bottom-sm">
96 <label class="sr-only" for="vuln-policyviolations">Policy Violation</label>
97 <input type="text" class="form-control" id="vuln-policyviolations" placeholder="Policy Violation" ng-model="policyviolation.value" disabled/>
98 <span class="input-group-addon cursor" ng-click="modal.data.policyviolations.splice($index, 1)"><i class="fa fa-minus-circle"></i></span>
99 </div>
100 </div>
101 </div><!-- .form-group -->
102 <div ng-if="modal.vuln.type === 'VulnerabilityWeb'">
103 <div class="form-group">
104 <div class="col-md-4">
105 <label class="sr-only control-label" for="vuln-method">Method</label>
106 <input type="text" class="form-control input-error" id="vuln-method" placeholder="Method" ng-model="modal.data.method"/>
107 </div>
108 <div class="col-md-3">
109 <label class="sr-only control-label" for="vuln-pname">Param Name</label>
110 <input type="text" class="form-control input-error" id="vuln-pname" placeholder="Param name" ng-model="modal.data.pname"/>
111 </div>
112 <div class="col-md-5">
113 <label class="sr-only control-label" for="vuln-params">Params</label>
114 <input type="text" class="form-control input-error" id="vuln-params" placeholder="Params" ng-model="modal.data.params"/>
115 </div>
116 </div><!-- .form-group -->
117 <div class="form-group">
118 <div class="col-md-4">
119 <label class="sr-only control-label" for="vuln-path">Path</label>
120 <input type="text" class="form-control input-error" id="vuln-path" placeholder="Path" ng-model="modal.data.path"/>
121 </div>
122 <div class="col-md-4">
123 <label class="sr-only control-label" for="vuln-query">Query</label>
124 <input type="text" class="form-control input-error" id="vuln-query" placeholder="Query" ng-model="modal.data.query"/>
125 </div>
126 <div class="col-md-4">
127 <label class="sr-only control-label" for="vuln-website">Website</label>
128 <input type="text" class="form-control input-error" id="vuln-website" placeholder="Website" ng-model="modal.data.website"/>
129 </div>
130 </div><!-- .form-group -->
131 <div class="form-group">
132 <div class="col-md-12">
133 <label class="sr-only control-label" for="vuln-request">Request</label>
134 <textarea class="form-control input-error" id="vuln-request" placeholder="Request" ng-model="modal.data.request"></textarea>
135 </div>
136 </div><!-- .form-group -->
137 <div class="form-group">
138 <div class="col-md-12">
139 <label class="sr-only control-label" for="vuln-response">Response</label>
140 <textarea class="form-control input-error" id="vuln-response" placeholder="Response" ng-model="modal.data.response"></textarea>
141 </div>
142 </div><!-- .form-group -->
143 </div><!-- ng-if -->
144 </div><!-- .form-horizontal -->
145
146 <h4>Impact</h4>
147 <h4><span ng-repeat="(key, value) in modal.data.impact" class="normal-size" style="cursor: pointer;">
148 <span ng-class="{'label-impact label-default-impact': !value, 'label-impact label-success-impact': value}" ng-click="modal.toggleImpact(key)">{{key}}</span>
149 </span></h4><!-- .normal-size -->
150 <div>
151
152 <div>
153 <h4>Evidence</h4>
154 <div class="alert alert-danger normal-size" role="alert" ng-if="modal.file_name_error">
155 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
156 <span class="sr-only">Error:</span>
157 Cannot upload evidence starting with underscore, please choose a different name for the file.
158 </div>
159 <div class="form-group normal-size">
160 <input type="file" id="evidence" ng-file-select ng-multiple="true" resetOnClick="false" ng-file-change="modal.selectedFiles($files, $event)"/>
161 <p class="help-block">Multiple files are allowed.</p>
162 </div><!-- .form-group -->
163 <div id="evidenceFiles" class="normal-size" ng-if="modal.data._attachments">
164 <ul>
165 <li ng-repeat="(name, file) in modal.data._attachments">
166 <div class="btn-group">
167 <button type="button" class="btn btn-default" ng-click="modal.openEvidence(name)">
168 <span class="fa {{icons[name]}}" title="Evidence {{name | decodeURIComponent}}"></span> {{name | decodeURIComponent}}
169 </button><!-- ng-repeat -->
170 <button type="button" class="btn btn-danger" ng-click="modal.removeEvidence(name)">
171 <span class="glyphicon glyphicon-trash"></span>
172 </button>
173 </div>
174 </li>
175 </ul>
176 </div><!-- #evidenceFiles -->
177 </div><!-- ng-if -->
178 <div class="modal-footer">
179 <div class="modal-button">
180 <button class="btn btn-success" ng-click="modal.ok()" ng-disabled="formEdit.$invalid">OK</button>
181 <button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>
182397 </div>
398
399
400 <!--</div>-->
183401 </div>
184402 </form>
33
44 <form name="form" novalidate>
55 <div class="modal-header">
6 <div class="modal-button btn-toolbar">
7 <button class="btn btn-success" ng-click="modal.ok()" ng-disabled="form.$invalid || modal.data.severity === undefined || (modal.data.type === 'VulnerabilityWeb' && modal.host_parents) || modal.data.parents.length == 0">OK</button>
8 <button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>
9 </div>
6 <!--<div class="modal-button btn-toolbar">-->
7 <!--<button class="btn btn-success" ng-click="modal.ok()" ng-disabled="form.$invalid || modal.data.severity === undefined || (modal.data.type === 'VulnerabilityWeb' && modal.host_parents) || modal.data.parents.length == 0">OK</button>-->
8 <!--<button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>-->
9 <!--</div>-->
1010 <h3 class="modal-title">Vulnerability creation</h3>
1111 </div>
1212 <div class="modal-body">
13 <div class="form-horizontal">
14 <h5>Target</h5>
15 <div class="form-group">
16 <div class="col-md-10">
17 <div class="form-group input-accordion">
18 <input type="text" ng-model="modal.target_filter" class="form-control input-sm" placeholder="Search targets" ng-change="modal.currentPage = 0">
19 </div>
20 </div>
21 <div class="col-md-2">
22 <div class="btn-group btn-small-margin">
23 <button type="button" class="btn btn-default btn-sm" title="Select page" ng-click="modal.setTargets(true, modal.currentPage*modal.pageSize, modal.pageSize)">
24 Select page
25 </button>
26 <button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" title="Select options">
27 <span class="caret"></span>
28 </button>
29 <ul class="dropdown-menu dropdown-menu-right" role="menu">
30 <li ng-show="modal.target_filter && modal.targets_filtered.length > 0">
31 <a class="ws" ng-click="modal.setTargets(true, 0, modal.targets_filtered.length)">Select all hosts in search</a>
32 </li>
33 <li>
34 <a class="ws" ng-click="modal.setTargets(false, 0, modal.targets.length)">Select all hosts</a>
35 </li>
36 <li>
37 <a class="ws" ng-click="modal.setTargets(false, 0, 0)">Clear selection</a>
38 </li>
39 </ul>
40 </div><!-- .btn-group -->
41 </div>
13 <div class="mt-3">
14
15 <div class="edit-vulns-dropdowns row" ng-init="modal.changeSeverity('unclassified')">
16
17 <div class="btn-group col-md-3 col-sm-6 col-xs-6">
18 <button type="button" class="dropdown-toggle btn-change-property primary-btn"
19 data-toggle="dropdown"
20 id="btn-chg-severity"
21 title="{{modal.data.severity}}">
22 {{modal.data.severity || "Add Severity" | uppercase }}
23 </button>
24 <button type="button" class="dropdown-toggle secondary-btn btn-change-property"
25 data-toggle="dropdown"
26 id="caret-chg-severity"
27 title="Change severity">
28 <span> <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i> </span>
29 </button>
30 <ul class="dropdown-menu dropdown-menu-right" role="menu">
31 <li>
32 <a class="ws"
33 ng-click="modal.changeSeverity('unclassified')">UNCLASSIFIED</a>
34 <a class="ws"
35 ng-click="modal.changeSeverity('info')">INFO</a>
36 <a class="ws"
37 ng-click="modal.changeSeverity('low')">LOW</a>
38 <a class="ws"
39 ng-click="modal.changeSeverity('med')">MEDIUM</a>
40 <a class="ws"
41 ng-click="modal.changeSeverity('high')">HIGH</a>
42 <a class="ws"
43 ng-click="modal.changeSeverity('critical')">CRITICAL</a>
44 </li>
45 </ul>
46 </div>
47
48
49 <div class="btn-group col-md-3 col-sm-6 col-xs-6">
50 <button type="button" class="dropdown-toggle btn-change-property primary-btn btn-primary-white"
51 data-toggle="dropdown"
52 id="btn-chg-ease_resolution"
53 title="{{modal.data.easeofresolution}}">
54 {{modal.data.easeofresolution || "Ease of Resolution"}}
55 </button>
56 <button type="button" class="dropdown-toggle secondary-btn btn-change-property btn-secondary-white"
57 data-toggle="dropdown"
58 id="caret-ease_resolution"
59 title="Change Ease of Resolution">
60 <span> <i class="fa fa-angle-down fa-lg" aria-hidden="true"></i> </span>
61 </button>
62 <ul class="dropdown-menu dropdown-menu-right" role="menu">
63 <li>
64 <a class="ws"
65 ng-click="modal.data.easeofresolution = null">Undetermined</a>
66 <a class="ws"
67 ng-click="modal.data.easeofresolution = 'trivial'">Trivial</a>
68 <a class="ws"
69 ng-click="modal.data.easeofresolution = 'simple'">Simple</a>
70 <a class="ws"
71 ng-click="modal.data.easeofresolution = 'moderate'">Moderate</a>
72 <a class="ws"
73 ng-click="modal.data.easeofresolution = 'difficult'">Difficult</a>
74 <a class="ws"
75 ng-click="modal.data.easeofresolution = 'infeasible'">Infeasible</a>
76 </li>
77 </ul>
78 </div>
79
80 <div class="customs-radio-inline">
81 <label class="radio-container"
82 ng-click="modal.data.type = 'Vulnerability'"
83 title="Change type to Vulnerability">
84 <h5>Vulnerability</h5>
85 <input type="radio" checked="checked" name="radio" ng-checked="modal.data.type === 'Vulnerability'">
86 <span class="checkmark"></span>
87 </label>
88 <label class="radio-container"
89 ng-click="modal.data.type = 'VulnerabilityWeb'"
90 title="Change type to Vulnerability Web">
91 <h5>Vulnerability Web</h5>
92 <input type="radio" name="radio" ng-checked="modal.data.type === 'VulnerabilityWeb'">
93 <span class="checkmark"></span>
94 </label>
95 </div>
96
4297 </div>
43 <div class="form-group">
44 <div class="col-md-12">
45 <uib-accordion close-others="true">
46 <uib-accordion-group is-open="isopen" ng-repeat="host in modal.targets_filtered = (modal.targets | filter:modal.target_filter) | startFrom:modal.currentPage*modal.pageSize | limitTo:modal.pageSize" template-url="scripts/statusReport/partials/accordion-group.html" is-disabled="host.services.length < 1">
47 <uib-accordion-heading>
48 <a ng-click="modal.setTarget(host)" ng-class="{'multi-selected': modal.data.parents.indexOf(host) >= 0}">{{host.name}} ({{host.hostnames[0]}})</a>
49 </uib-accordion-heading>
50 <div class="panel-body" ng-repeat="service in host.services">
51 <a ng-model="service" ng-click="modal.setTarget(service)" ng-class="{'multi-selected': modal.data.parents.indexOf(service) >= 0}">{{service.name}} {{service.ports}}</a>
52 </div>
53 </uib-accordion-group>
54 </uib-accordion>
55 <div class="showPagination" ng-show="modal.targets_filtered.length > modal.pageSize">
98
99 <!-- Nav tabs -->
100 <ul class="nav nav-tabs" id="nav-tabs-container">
101 <li class="nav-item active" ng-class="{'has-error': modal.data.type == 'Vulnerability' && modal.data.parents.length == 0}">
102 <a class="nav-link" data-toggle="tab" data-target="#hosts" href="javascript:;">Hosts</a>
103 </li>
104 <li class="nav-item" ng-class="{'has-error': form.name.$invalid || form.desc.$invalid}">
105 <a class="nav-link active" data-toggle="tab" data-target="#general"
106 href="javascript:;">General</a>
107 </li>
108 <li class="nav-item">
109 <a class="nav-link" data-toggle="tab" data-target="#technical_details" href="javascript:;">Technical
110 Details</a>
111 </li>
112 <li class="nav-item">
113 <a class="nav-link" data-toggle="tab" data-target="#tab-evidence" href="javascript:;">Evidence</a>
114 </li>
115 <li class="nav-item">
116 <a class="nav-link" data-toggle="tab" data-target="#tab-custom-fields" href="javascript:;">Custom Fields</a>
117 </li>
118 </ul>
119
120
121 <div class="tab-content">
122 <div id="hosts" class="container tab-pane-container tab-pane active"><br>
123 <div class="col-md-12 margin-bottom-15px">
124 <div class="form-horizontal">
125 <div class="tab-pane-header">Target</div>
126 <div class="form-group">
127 <div class="col-md-10">
128 <div class="form-group input-accordion">
129 <input type="text" ng-model="modal.target_filter" class="form-control input-sm"
130 placeholder="Search targets" ng-change="modal.currentPage = 0">
131 </div>
132 </div>
133 <div class="col-md-2">
134 <div class="btn-group btn-small-margin">
135 <button type="button" class="btn btn-default btn-xs" title="Select page"
136 ng-click="modal.setTargets(true, modal.currentPage*modal.pageSize, modal.pageSize)"
137 style="height: 30px!important;">
138 Select page
139 </button>
140 <button type="button" class="btn btn-default btn-xs dropdown-toggle"
141 style="height: 30px!important;"
142 data-toggle="dropdown"
143 title="Select options">
144 <span class="caret"></span>
145 </button>
146 <ul class="dropdown-menu dropdown-menu-right" role="menu">
147 <li ng-show="modal.target_filter && modal.targets_filtered.length > 0">
148 <a class="ws"
149 ng-click="modal.setTargets(true, 0, modal.targets_filtered.length)">Select
150 all hosts in search</a>
151 </li>
152 <li>
153 <a class="ws"
154 ng-click="modal.setTargets(false, 0, modal.targets.length)">Select
155 all
156 hosts</a>
157 </li>
158 <li>
159 <a class="ws" ng-click="modal.setTargets(false, 0, 0)">Clear
160 selection</a>
161 </li>
162 </ul>
163 </div><!-- .btn-group -->
164 </div>
165 </div>
166 <div class="form-group">
167 <div class="col-md-12">
168 <uib-accordion close-others="true">
169 <uib-accordion-group is-open="isopen"
170 ng-repeat="host in modal.targets_filtered = (modal.targets | filter:modal.target_filter) | startFrom:modal.currentPage*modal.pageSize | limitTo:modal.pageSize"
171 template-url="scripts/statusReport/partials/accordion-group.html"
172 is-disabled="host.services.length < 1">
173 <uib-accordion-heading>
174 <a ng-click="modal.setTarget(host)"
175 ng-class="{'multi-selected': modal.data.parents.indexOf(host) >= 0}">{{host.name}}
176 ({{host.hostnames[0]}})</a>
177 </uib-accordion-heading>
178 <div class="panel-body" ng-repeat="service in host.services">
179 <a ng-model="service" ng-click="modal.setTarget(service)"
180 ng-class="{'multi-selected': modal.data.parents.indexOf(service) >= 0}">{{service.name}}
181 {{service.ports}}</a>
182 </div>
183 </uib-accordion-group>
184 </uib-accordion>
185 <div class="showPagination"
186 ng-show="modal.targets_filtered.length > modal.pageSize">
187 <div class="form-group">
188 <ul class="pagination">
189 <li><a ng-hide="modal.currentPage <= 0"
190 ng-click="modal.currentPage = modal.currentPage - 1"><span
191 aria-hidden="true">&laquo;</span><span
192 class="sr-only">Previous</span></a></li>
193 <li><a>{{modal.currentPage+1}}/{{ ((modal.targets_filtered.length /
194 modal.pageSize) |
195 integer) + 1}}</a></li>
196 <li>
197 <a ng-hide="modal.currentPage >= ((modal.targets_filtered.length / modal.pageSize) | integer)"
198 ng-click="modal.currentPage = modal.currentPage + 1"><span
199 aria-hidden="true">&raquo;</span><span
200 class="sr-only">Next</span></a></li>
201 </ul>
202 <ng-form name="goToPage">
203 <div class="col-md-2">
204 <input type="number" class="form-control"
205 ng-model="modal.newCurrentPage"
206 placeholder="Go to page"/>
207 </div>
208 <button class="btn btn-danger" ng-click="modal.go()">GO</button>
209 </ng-form>
210 </div>
211 </div>
212 </div>
213 </div>
214 <div class="alert alert-danger target_not_selected" role="alert"
215 ng-hide="modal.data.parents.length > 0">
216 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
217 <span class="sr-only">Error:</span>
218 There is no target selected
219 </div>
220 <div class="alert alert-danger target_not_selected" role="alert"
221 ng-show="modal.data.type === 'VulnerabilityWeb' && modal.host_parents">
222 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
223 <span class="sr-only">Error:</span>
224 Trying to create a Web Vulnerability with one or more Host parents. Please deselect the
225 Host targets or
226 <a href="" ng-click="modal.resetTarget()">click here to deselect all targets</a>
227 </div>
228 </div>
229
230 </div>
231 </div>
232
233 <div id="general" class="container tab-pane-container tab-pane"><br>
234 <div class="col-md-12">
235 <div class="tab-pane-header">Search vulnerability database templates
236 <a
237 href="https://github.com/infobyte/faraday/wiki/vulnerabilities-database"
238 target="_blank"><span class="glyphicon glyphicon-question-sign"
239 title="Read more about vulnerability templates in the official Faraday Documentation"></span></a>
240 </div>
56241 <div class="form-group">
57 <ul class="pagination">
58 <li><a ng-hide="modal.currentPage <= 0" ng-click="modal.currentPage = modal.currentPage - 1"><span aria-hidden="true">&laquo;</span><span class="sr-only">Previous</span></a></li>
59 <li><a>{{modal.currentPage+1}}/{{ ((modal.targets_filtered.length / modal.pageSize) | integer) + 1}}</a></li>
60 <li><a ng-hide="modal.currentPage >= ((modal.targets_filtered.length / modal.pageSize) | integer)" ng-click="modal.currentPage = modal.currentPage + 1"><span aria-hidden="true">&raquo;</span><span class="sr-only">Next</span></a></li>
242 <input type="text" ng-model="modal.cwe_selected" class="form-control input-sm"
243 placeholder="Search for vulnerability templates"
244 uib-typeahead="cwe as cwe.name for cwe in modal.cweList | filter:{name: $viewValue} | limitTo:10"
245 typeahead-on-select="modal.populate($item, $model, $label)">
246 </div>
247 </div>
248
249 <div class="col-md-12 custom-divider"></div>
250
251 <div class="col-md-12">
252 <div class="tab-pane-header">Name</div>
253 <div class="form-group" ng-class="{'has-error': form.name.$invalid }">
254 <label class="sr-only" for="vuln-name">Vuln name</label>
255 <input type="text" class="form-control input-sm" id="vuln-name" name="name"
256 placeholder="Name"
257 ng-model="modal.data.name" required/>
258 </div><!-- .form-group -->
259 </div>
260
261 <div class="col-md-12">
262 <div class="tab-pane-header">Description</div>
263 <div class="form-group" ng-class="{'has-error': form.desc.$invalid }">
264 <label class="sr-only" for="vuln-data">Vuln description</label>
265 <textarea class="form-control" id="vuln-desc" name="desc"
266 ng-model="modal.data.desc" required placeholder="Description"
267 style="margin: 0 2px 0 0; height: 239px; width: 810px;"></textarea>
268 </div><!-- .form-group -->
269 </div>
270
271
272 <div class="form-group margin-top-22px">
273 <div class="col-md-12">
274 <div class="tab-pane-header">References</div>
275 <div class="input-group margin-bottom-sm">
276 <label class="sr-only" for="vuln-refs">References</label>
277 <input type="text" class="form-control" id="vuln-refs" placeholder="Reference"
278 ng-model="modal.new_ref"/>
279 <span class="input-group-addon cursor" ng-click="modal.newReference()"><i
280 class="fa fa-plus-circle"></i></span>
281 </div>
282 </div>
283 <div class="col-md-12 reference" ng-repeat="reference in modal.data.refs">
284 <div class="input-group margin-bottom-sm">
285 <label class="sr-only" for="vuln-refs-create">References</label>
286 <input type="text" class="form-control" id="vuln-refs-create" placeholder="Reference"
287 ng-model="reference.value" ng-click="modal.openReference(reference.value)"
288 role="button"
289 readonly/>
290 <span class="input-group-addon cursor" ng-click="modal.data.refs.splice($index, 1)"><i
291 class="fa fa-minus-circle"></i></span>
292 </div>
293 </div>
294 </div><!-- .form-group -->
295
296
297 <div class="col-md-12 margin-top-22px">
298 <div class="tab-pane-header">Resolution</div>
299 <div class="form-group">
300 <label class="sr-only" for="vuln-data">Vuln resolution</label>
301 <textarea class="form-control" id="vuln-resolution" rows="4"
302 ng-model="modal.data.resolution" placeholder="Resolution"></textarea>
303 </div><!-- .form-group -->
304 </div>
305
306
307 <div class="form-group margin-top-22px">
308 <div class="col-md-12">
309 <div class="tab-pane-header">Policy Violations</div>
310 <div class="input-group margin-bottom-sm">
311 <label class="sr-only" for="vuln-policyviolations">Policy Violations</label>
312 <input type="text" class="form-control" id="vuln-policyviolations"
313 placeholder="Policy Violations" ng-model="modal.new_policyviolation"/>
314 <span class="input-group-addon cursor" ng-click="modal.newPolicyViolation()"><i
315 class="fa fa-plus-circle"></i></span>
316 </div>
317 </div>
318 <div class="col-md-12 reference" ng-repeat="policyviolation in modal.data.policyviolations">
319 <div class="input-group margin-bottom-sm">
320 <label class="sr-only" for="vuln-policyviolations-value">Policy Violation</label>
321 <input type="text" class="form-control" id="vuln-policyviolations-value"
322 placeholder="Policy Violation" ng-model="policyviolation.value" disabled/>
323 <span class="input-group-addon cursor"
324 ng-click="modal.data.policyviolations.splice($index, 1)"><i
325 class="fa fa-minus-circle"></i></span>
326 </div>
327 </div>
328 </div><!-- .form-group -->
329
330
331 <div class="col-md-12 margin-bottom-15px margin-top-22px">
332 <div class="tab-pane-header">Impact</div>
333 <h4><span ng-repeat="(key, value) in modal.data.impact" class="normal-size"
334 style="cursor: pointer;">
335 <span ng-class="{'label-impact label-default-impact': !value, 'label-impact label-success-impact': value}"
336 ng-click="modal.toggleImpact(key)">{{key}}</span>
337 </span></h4><!-- .normal-size -->
338 </div>
339
340 </div>
341
342 <div id="technical_details" class="container tab-pane-container tab-pane"><br>
343 <div class="col-md-12">
344 <div class="tab-pane-header">Data</div>
345 <div class="form-group">
346 <label class="sr-only" for="vuln-data">Vuln data</label>
347 <textarea class="form-control" id="vuln-data" rows="5"
348 ng-model="modal.data.data" placeholder="Data"></textarea>
349 </div><!-- .form-group -->
350 </div>
351
352 <div class="col-md-6 col-sm-12 col-xs-12" ng-show="modal.data.type === 'VulnerabilityWeb'">
353 <div class="tab-pane-header">Request</div>
354 <div class="form-group">
355 <label class="sr-only" for="vuln-request">Vuln request</label>
356 <textarea class="form-control" id="vuln-request" rows="8"
357 ng-model="modal.data.request" placeholder="Request"></textarea>
358 </div><!-- .form-group -->
359 </div>
360
361 <div class="col-md-6 col-sm-12 col-xs-12" ng-show="modal.data.type === 'VulnerabilityWeb'">
362 <div class="tab-pane-header">Response</div>
363 <div class="form-group">
364 <label class="sr-only" for="vuln-response">Vuln response</label>
365 <textarea class="form-control" id="vuln-response" rows="8"
366 ng-model="modal.data.response" placeholder="Response"></textarea>
367 </div><!-- .form-group -->
368 </div>
369
370 <div class="margin-top-22px" ng-show="modal.data.type === 'VulnerabilityWeb'">
371 <div class="col-md-4">
372 <div class="tab-pane-header">Method</div>
373 <div class="form-group">
374 <label class="sr-only control-label" for="vuln-method">Method</label>
375 <input type="text" class="form-control" id="vuln-method" placeholder="Method"
376 ng-model="modal.data.method"/>
377 </div><!-- .form-group -->
378 </div>
379
380 <div class="col-md-3">
381 <div class="tab-pane-header">Param Name</div>
382 <div class="form-group">
383 <label class="sr-only control-label" for="vuln-pname">Param Name</label>
384 <input type="text" class="form-control" id="vuln-pname" placeholder="Param name"
385 ng-model="modal.data.pname"/>
386 </div><!-- .form-group -->
387 </div>
388
389 <div class="col-md-5">
390 <div class="tab-pane-header">Params</div>
391 <div class="form-group">
392 <label class="sr-only control-label" for="vuln-params">Params</label>
393 <input type="text" class="form-control" id="vuln-params" placeholder="Params"
394 ng-model="modal.data.params"/>
395 </div><!-- .form-group -->
396 </div>
397
398 <div class="col-md-4">
399 <div class="tab-pane-header">Path</div>
400 <div class="form-group">
401 <label class="sr-only control-label" for="vuln-path">Path</label>
402 <input type="text" class="form-control" id="vuln-path" placeholder="Path"
403 ng-model="modal.data.path"/>
404 </div><!-- .form-group -->
405 </div>
406
407 <div class="col-md-4">
408 <div class="tab-pane-header">Query</div>
409 <div class="form-group">
410 <label class="sr-only control-label" for="vuln-query">Query</label>
411 <input type="text" class="form-control" id="vuln-query" placeholder="Query"
412 ng-model="modal.data.query"/>
413 </div><!-- .form-group -->
414 </div>
415
416 <div class="col-md-4">
417 <div class="tab-pane-header">Website</div>
418 <div class="form-group">
419 <label class="sr-only control-label" for="vuln-website">Website</label>
420 <input type="text" class="form-control" id="vuln-website" placeholder="Website"
421 ng-model="modal.data.website"/>
422 </div><!-- .form-group -->
423 </div>
424 </div>
425 </div>
426
427 <div id="tab-evidence" class="container tab-pane fade"><br>
428 <div class="col-md-12 margin-bottom-15px">
429 <div class="tab-pane-header">Evidence</div>
430 <div class="alert alert-danger normal-size" role="alert" ng-if="modal.file_name_error">
431 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
432 <span class="sr-only">Error:</span>
433 Cannot upload evidence starting with underscore, please choose a different name for the
434 file.
435 </div>
436 <div class="form-group normal-size">
437 <input type="file" id="evidence" ng-file-select ng-multiple="true" resetOnClick="false"
438 ng-file-change="modal.selectedFiles($files, $event)"/>
439 <p class="help-block">Multiple files are allowed.</p>
440 </div><!-- .form-group -->
441 <div id="evidenceFiles" class="normal-size" ng-if="modal.data._attachments">
442 <ul>
443 <li ng-repeat="(name, file) in modal.data._attachments">
444 <div class="btn-group">
445 <button type="button" class="btn btn-default"
446 ng-click="modal.openEvidence(name)">
447 <span class="fa {{icons[name]}}"
448 title="Evidence {{name | decodeURIComponent}}"></span> {{name |
449 decodeURIComponent}}
450 </button><!-- ng-repeat -->
451 <button type="button" class="btn btn-danger"
452 ng-click="modal.removeEvidence(name)">
453 <span class="glyphicon glyphicon-trash"></span>
454 </button>
455 </div>
456 </li>
61457 </ul>
62 <ng-form name="goToPage">
63 <div class="col-md-2">
64 <input type="number" class="form-control" ng-model="modal.newCurrentPage" placeholder="Go to page"/>
65 </div>
66 <button class="btn btn-danger" ng-click="modal.go()">GO</button>
67 </ng-form>
68 </div>
69 </div>
70 </div>
71 </div>
72 <div class="alert alert-danger target_not_selected" role="alert" ng-hide="modal.data.parents.length > 0">
73 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
74 <span class="sr-only">Error:</span>
75 There is no target selected
76 </div>
77 <div class="alert alert-danger target_not_selected" role="alert" ng-show="modal.data.type === 'VulnerabilityWeb' && modal.host_parents">
78 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
79 <span class="sr-only">Error:</span>
80 Trying to create a Vulnerability Web with Host parents. Please select only Service targets. Deselect the Host targets or <a href="" ng-click="modal.resetTarget()">click here to deselect all targets</a>
458 </div><!-- #evidenceFiles -->
459 </div>
460
461 </div>
462
463 <div id="tab-custom-fields" class="container tab-pane-container tab-pane fade"><br>
464 <div class="col-md-12 margin-bottom-15px">
465 <div class="col-md-12" ng-repeat="cf in modal.customFields | orderBy : 'field_order'">
466 <custom-field field="{{cf}}"></custom-field>
467 </div>
468 </div>
81469 </div>
82470 </div>
83471
84 <div class="form-horizontal">
85 <div class="form-group">
86 <div class="col-md-12">
87 <h5>Search vulnerability database templates <a href="https://github.com/infobyte/faraday/wiki/vulnerabilities-database" target="_blank"><span class="glyphicon glyphicon-question-sign" title="Read more about vulnerability templates in the official Faraday Documentation"></span></a></h5>
88 <input type="text" ng-model="modal.cwe_selected" class="form-control input-sm" placeholder="Search for vulnerability templates" uib-typeahead="cwe as cwe.name for cwe in modal.cweList | filter:{name: $viewValue} | limitTo:10" typeahead-on-select="modal.populate($item, $model, $label)">
89 </div>
472 <div class="modal-footer">
473 <div class="modal-button btn-toolbar">
474 <button class="btn btn-success" ng-click="modal.ok()"
475 ng-disabled="form.$invalid || modal.data.severity === undefined || (modal.data.type === 'VulnerabilityWeb' && modal.host_parents) || modal.data.parents.length == 0">
476 OK
477 </button>
478 <button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>
90479 </div>
91 <div class="form-group">
92 <div class="col-md-4">
93 <h5>Type</h5>
94 <select class="form-control" ng-model="modal.data.type" ng-options="option.value as option.name for option in modal.vuln_types" style="padding:0px 12px;">
95 </select>
96 </div>
97 <div class="col-md-4 severities">
98 <h5>Severity</h5>
99 <button type="button" class="btn btn-default dropdown-toggle color-{{modal.data.severity}}" name="severity" data-toggle="dropdown" title="Change severity" ng-class="{'button-error': modal.data.severity === undefined}">
100 {{modal.data.severity || 'Add severity'}} <span class="caret"></span>
101 </button>
102 <ul id="nav" class="dropdown-menu dropdown-menu-left" role="menu">
103 <li ng-repeat="s in modal.severities"><a href="" class="ws color-{{s}}" ng-click="modal.data.severity=s">{{s}}</a></li>
104 </ul><!-- WS navigation -->
105 </div>
106 <div class="col-md-4">
107 <h5>Ease of Resolution</h5>
108 <select class="form-control" ng-model="modal.data.easeofresolution" ng-options="e for e in modal.easeofresolution" style="padding:0px 12px;">
109 <option value=""></option>
110 </select>
111 </div>
112 </div><!-- .form-group -->
113 <div class="form-group" ng-class="{'has-error': form.name.$invalid }">
114 <div class="col-md-12">
115 <label class="sr-only" for="vuln-name">Vuln name</label>
116 <input type="text" class="form-control" id="vuln-name" name="name" placeholder="Name" ng-model="modal.data.name" required/>
117 </div>
118 </div><!-- .form-group -->
119 <div class="form-group" ng-class="{'has-error': form.desc.$invalid }">
120 <div class="col-md-12">
121 <label class="sr-only" for="vuln-desc">Vuln description</label>
122 <textarea class="form-control" id="vuln-desc" name="desc" placeholder="Description" ng-model="modal.data.desc" required="" style="margin: 0px 2px 0px 0px; height: 239px; width: 867px;"></textarea></textarea>
123 </div>
124 </div><!-- .form-group -->
125 <div class="form-group">
126 <div class="col-md-12">
127 <label class="sr-only" for="vuln-data">Vuln data</label>
128 <textarea class="form-control" id="vuln-data" placeholder="Data" ng-model="modal.data.data"></textarea>
129 </div>
130 </div><!-- .form-group -->
131 <div class="form-group">
132 <div class="col-md-12">
133 <div class="input-group margin-bottom-sm">
134 <label class="sr-only" for="vuln-refs">References</label>
135 <input type="text" class="form-control" id="vuln-refs" placeholder="Reference" ng-model="modal.new_ref"/>
136 <span class="input-group-addon cursor" ng-click="modal.newReference()"><i class="fa fa-plus-circle"></i></span>
137 </div>
138 </div>
139 <div class="col-md-12 reference" ng-repeat="reference in modal.data.refs">
140 <div class="input-group margin-bottom-sm">
141 <label class="sr-only" for="vuln-refs">References</label>
142 <input type="text" class="form-control" id="vuln-refs" placeholder="Reference" ng-model="reference.value" disabled/>
143 <span class="input-group-addon cursor" ng-click="modal.data.refs.splice($index, 1)"><i class="fa fa-minus-circle"></i></span>
144 </div>
145 </div>
146 </div><!-- .form-group -->
147 <div class="form-group">
148 <div class="col-md-12">
149 <label class="sr-only" for="vuln-resolution">Vuln Resolution</label>
150 <textarea class="form-control" id="vuln-resolution" placeholder="Resolution" ng-model="modal.data.resolution"></textarea>
151 </div>
152 </div><!-- .form-group -->
153 <div class="form-group">
154 <div class="col-md-12">
155 <div class="input-group margin-bottom-sm">
156 <label class="sr-only" for="vuln-policyviolations">Policy Violations</label>
157 <input type="text" class="form-control" id="vuln-policyviolations" placeholder="Policy Violations" ng-model="modal.new_policyviolation"/>
158 <span class="input-group-addon cursor" ng-click="modal.newPolicyViolation()"><i class="fa fa-plus-circle"></i></span>
159 </div>
160 </div>
161 <div class="col-md-12 reference" ng-repeat="policyviolation in modal.data.policyviolations">
162 <div class="input-group margin-bottom-sm">
163 <label class="sr-only" for="vuln-policyviolations">Policy Violation</label>
164 <input type="text" class="form-control" id="vuln-policyviolations" placeholder="Policy Violation" ng-model="policyviolation.value" disabled/>
165 <span class="input-group-addon cursor" ng-click="modal.data.policyviolations.splice($index, 1)"><i class="fa fa-minus-circle"></i></span>
166 </div>
167 </div>
168 </div><!-- .form-group -->
169 </div>
170
171 <div class="animate-switch-container" ng-switch on="modal.data.type">
172 <div class="animate-switch" ng-switch-when="VulnerabilityWeb">
173 <div class="form-horizontal">
174 <div class="form-group">
175 <div class="col-md-4">
176 <label class="sr-only control-label" for="vuln-method">Method</label>
177 <input type="text" class="form-control" id="vuln-method" placeholder="Method" ng-model="modal.data.method"/>
178 </div>
179 <div class="col-md-3">
180 <label class="sr-only control-label" for="vuln-pname">Param Name</label>
181 <input type="text" class="form-control" id="vuln-pname" placeholder="Param name" ng-model="modal.data.pname"/>
182 </div>
183 <div class="col-md-5">
184 <label class="sr-only control-label" for="vuln-params">Params</label>
185 <input type="text" class="form-control" id="vuln-params" placeholder="Params" ng-model="modal.data.params"/>
186 </div>
187 </div><!-- .form-group -->
188 <div class="form-group">
189 <div class="col-md-4">
190 <label class="sr-only control-label" for="vuln-path">Path</label>
191 <input type="text" class="form-control" id="vuln-path" placeholder="Path" ng-model="modal.data.path"/>
192 </div>
193 <div class="col-md-4">
194 <label class="sr-only control-label" for="vuln-query">Query</label>
195 <input type="text" class="form-control" id="vuln-query" placeholder="Query" ng-model="modal.data.query"/>
196 </div>
197 <div class="col-md-4">
198 <label class="sr-only control-label" for="vuln-website">Website</label>
199 <input type="text" class="form-control" id="vuln-website" placeholder="Website" ng-model="modal.data.website"/>
200 </div>
201 </div><!-- .form-group -->
202 <div class="form-group">
203 <div class="col-md-12">
204 <label class="sr-only control-label" for="vuln-request">Request</label>
205 <textarea class="form-control" id="vuln-request" placeholder="Request" ng-model="modal.data.request"></textarea>
206 </div>
207 </div><!-- .form-group -->
208 <div class="form-group">
209 <div class="col-md-12">
210 <label class="sr-only control-label" for="vuln-response">Response</label>
211 <textarea class="form-control" id="vuln-response" placeholder="Response" ng-model="modal.data.response"></textarea>
212 </div>
213 </div><!-- .form-group -->
214 </div><!-- .form-horizontal -->
215 </div><!-- .animate-switch -->
216 <div class="animate-switch" ng-switch-when="Vulnerability"></div>
217 </div><!-- .animate-switch-container -->
218
219 <h4>Impact</h4>
220 <h4><span ng-repeat="(key, value) in modal.data.impact" class="normal-size" style="cursor: pointer;">
221 <span ng-class="{'label-impact label-default-impact': !value, 'label-impact label-success-impact': value}" ng-click="modal.toggleImpact(key)">{{key}}</span>
222 </span></h4><!-- .normal-size -->
223 <div>
224 <h4>Evidence</h4>
225 <div class="alert alert-danger normal-size" role="alert" ng-if="modal.file_name_error">
226 <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
227 <span class="sr-only">Error:</span>
228 Cannot upload evidence starting with underscore, please choose a different name for the file.
229 </div>
230 <div class="form-group normal-size">
231 <input type="file" id="evidence" ng-file-select ng-multiple="true" resetOnClick="false" ng-file-change="modal.selectedFiles($files, $event)"/>
232 <p class="help-block">Multiple files are allowed.</p>
233 </div><!-- .form-group -->
234 <div id="evidenceFiles" class="normal-size" ng-if="modal.data._attachments">
235 <ul>
236 <li ng-repeat="e in modal.data._attachments | orderObjectBy:'name':true | orderBy:'name'">
237 <div class="btn-group">
238 <button type="button" class="btn btn-default">
239 <span class="fa {{icons[e.name]}}" title="Evidence {{e.name}}"></span> {{e.name}}
240 </button><!-- ng-repeat -->
241 <button type="button" class="btn btn-danger" ng-click="modal.removeEvidence(e.name)">
242 <span class="glyphicon glyphicon-trash"></span>
243 </button>
244 </div>
245 </li>
246 </ul>
247 </div><!-- #evidenceFiles -->
248 </div><!-- .modal-body -->
249 <div class="modal-footer">
250 <div class="modal-button btn-toolbar">
251 <button class="btn btn-success" ng-click="modal.ok()" ng-disabled="form.$invalid || modal.data.severity === undefined || (modal.data.type === 'VulnerabilityWeb' && modal.host_parents) || modal.data.parents.length == 0">OK</button>
252 <button class="btn btn-danger" ng-click="modal.cancel()">Cancel</button>
253480 </div>
254481 </div>
255482 </form>
139139 break;
140140
141141 default:
142 if(expression.substr(i, 3) === 'not' && !isOpenQuotes){
142 if(expression.substr(i, 3) === 'not' && expression.charAt(i-1) === ' '
143 && expression.charAt(i+3) === ' ' && !isOpenQuotes){
143144 tokens.push('not');
144145 i = i + 2;
145146 canAddToken = true;
146147 }
147148
148 else if(expression.substr(i, 3) === 'and' && !isOpenQuotes){
149 else if(expression.substr(i, 3) === 'and' && expression.charAt(i-1) === ' '
150 && expression.charAt(i+3) === ' ' && !isOpenQuotes){
149151 tokens.push('and');
150152 canAddToken = true;
151153 i = i + 2;
152154 }
153155
154 else if(expression.substr(i, 2) === 'or' && !isOpenQuotes){
156 else if(expression.substr(i, 2) === 'or' && expression.charAt(i-1) === ' '
157 && expression.charAt(i+2) === ' ' && !isOpenQuotes){
155158 tokens.push('or');
156159 canAddToken = true;
157160 i++;
4646 this.ws = "";
4747 this.status = "opened";
4848 this.policyviolations = "";
49 this.custom_fields = {};
4950
5051 if(data) {
5152 if(data.name === undefined || data.name === "") {
5859 var public_properties = [
5960 '_attachments', 'confirmed', 'data', 'desc', 'easeofresolution',
6061 'impact', 'name', 'owned', 'policyviolations', 'refs', 'resolution',
61 'severity', 'status',
62 'severity', 'status', 'custom_fields'
6263 ];
6364
6465 var saved_properties = public_properties.concat(
8081 self.ws = ws;
8182 if(data.parent !== undefined) self.parent = data.parent;
8283 if(data.parent_type !== undefined) self.parent_type = data.parent_type;
84 if(data.custom_fields !== undefined) self.custom_fields = data.custom_fields;
8385
8486 self.public_properties.forEach(function(property) {
8587 if(data[property] !== undefined) self[property] = data[property];
133133 $scope.insert = function (workspace) {
134134 delete workspace.selected;
135135 workspacesFact.put(workspace).then(function (resp) {
136 workspace.active = resp.data.active;
136137 workspace.stats = resp.data.stats;
137138 $scope.onSuccessInsert(workspace)
138139 },
88 import os
99 import sys
1010 import json
11 import random
12 import string
1113 import inspect
14
1215 import pytest
16 import psycopg2
17 from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
18
1319 from factory import Factory
1420 from flask.testing import FlaskClient
1521 from flask_principal import Identity, identity_changed
2026 from server.app import create_app
2127 from server.models import db
2228 from test_cases import factories
23
29 from server import config
2430
2531 # Discover factories to automatically register them to pytest-factoryboy and to
2632 # override its session
6975 def pytest_addoption(parser):
7076 # currently for tests using sqlite and memory have problem while using transactions
7177 # we need to review sqlite configuraitons for persistence using PRAGMA.
78 parser.addoption('--use-postgresql', action='store_true',
79 help="Forces the tests to be executed in postgresql "
80 "using server.ini credentials")
7281 parser.addoption('--connection-string',
7382 help="Database connection string. Defaults to in-memory "
7483 "sqlite if not specified:")
8897 def app(request):
8998 connection_string = request.config.getoption(
9099 '--connection-string')
91 if not connection_string:
100 use_postgresql = request.config.getoption(
101 '--use-postgresql')
102 sqlite = False
103 postgres_user, postgres_password = None, None
104
105 if use_postgresql and not connection_string:
106 connection_string = config.database.connection_string
107 if connection_string:
108 postgres_user, postgres_password = connection_string.split('://')[1].split('@')[0].split(':')
109
110 if postgres_user and postgres_password:
111 host = connection_string.split('://')[1].split('@')[1].split('/')[0]
112 con = psycopg2.connect(dbname='postgres',
113 user=postgres_user,
114 host=host,
115 password=postgres_password)
116
117 con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
118 cur = con.cursor()
119 db_name = ''.join(random.SystemRandom().choice(string.ascii_uppercase) for _ in range(20))
120 cur.execute("CREATE DATABASE \"%s\" ;" % db_name)
121 connection_string = 'postgresql+psycopg2://{postgres_user}:{postgres_password}@{host}/{db_name}'.format(
122 postgres_user=postgres_user,
123 postgres_password=postgres_password,
124 host=host,
125 db_name=db_name,
126 )
127 con.close()
128 else:
129 sqlite = True
92130 connection_string = 'sqlite:///'
131
93132 app = create_app(db_connection_string=connection_string, testing=True)
94133 app.test_client_class = CustomClient
95134
98137 ctx.push()
99138
100139 def teardown():
140 with ctx:
141 db.session.close()
142 db.engine.dispose()
101143 ctx.pop()
144 if not sqlite:
145 postgres_user, postgres_password = connection_string.split('://')[1].split('@')[0].split(':')
146 host = connection_string.split('://')[1].split('@')[1].split('/')[0]
147 con = psycopg2.connect(dbname='postgres',
148 user=postgres_user,
149 host=host,
150 password=postgres_password)
151
152 con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
153 cur = con.cursor()
154 cur.execute("DROP DATABASE \"%s\" ;" % db_name)
102155
103156 request.addfinalizer(teardown)
104157 app.config['NPLUSONE_RAISE'] = not request.config.getoption(
109162 @pytest.fixture(scope='function')
110163 def database(app, request):
111164 """Session-wide test database."""
112
113 def teardown():
114 if db.engine.dialect.name == 'sqlite':
115 # since sqlite was created in a temp file we skip the drops.
116 return
117 try:
118 db.engine.execute('DROP TABLE vulnerability CASCADE')
119 except Exception:
120 pass
121 try:
122 db.engine.execute('DROP TABLE vulnerability_template CASCADE')
123 except Exception:
124 pass
125 db.drop_all()
126165
127166 # Disable check_vulnerability_host_service_source_code constraint because
128167 # it doesn't work in sqlite
136175 db.init_app(app)
137176 db.create_all()
138177
139 request.addfinalizer(teardown)
140178 return db
141179
142180
3636 VulnerabilityTemplate,
3737 VulnerabilityWeb,
3838 Workspace,
39 ReferenceTemplate, CommandObject, Comment)
39 ReferenceTemplate,
40 CommandObject,
41 Comment,
42 CustomFieldsSchema
43 )
4044
4145 # Make partials for start and end date. End date must be after start date
4246 FuzzyStartTime = lambda: (
5862
5963 class FaradayFactory(factory.alchemy.SQLAlchemyModelFactory):
6064
61 # id = factory.Sequence(lambda n: n)
62 pass
63
6465 @classmethod
6566 def build_dict(cls, **kwargs):
6667 ret = factory.build(dict, FACTORY_CLASS=cls)
165166
166167 class Meta:
167168 model = SourceCode
169 sqlalchemy_session = db.session
170
171
172 class CustomFieldsSchemaFactory(factory.alchemy.SQLAlchemyModelFactory):
173
174 class Meta:
175 model = CustomFieldsSchema
168176 sqlalchemy_session = db.session
169177
170178
0 '''
1 Faraday Penetration Test IDE
2 Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/)
3 See the file 'doc/LICENSE' for the license information
4
5 '''
6 import os
7 import pytest
8 from io import BytesIO
9 from datetime import timedelta, datetime
10
11 from test_cases.factories import WorkspaceFactory, VulnerabilityFactory, CommandFactory
12
13 @pytest.mark.usefixtures('logged_user')
14 class TestActivityFeed():
15 def test_activity_feed(self, test_client, session):
16 ws = WorkspaceFactory.create(name="abc")
17 command = CommandFactory.create(workspace=ws, tool="nessus")
18 session.add(ws)
19 session.add(command)
20 session.commit()
21
22 res = test_client.get(
23 '/v2/ws/{ws_name}/activities/'
24 .format(ws_name=ws.name)
25 )
26
27 assert res.status_code == 200
28 activities = res.json['activities'][0]
29 assert activities['hosts_count'] == 1
30 assert activities['vulnerabilities_count'] == 1
31 assert activities['tool'] == 'nessus'
32
33
34 def test_load_itime(self, test_client, session):
35 ws = WorkspaceFactory.create(name="abc")
36 command = CommandFactory.create(workspace=ws)
37 session.add(ws)
38 session.add(command)
39 session.commit()
40
41 # Timestamp of 14/12/2018
42 itime = 1544745600.0
43 data = {
44 'command': command.command,
45 'tool' : command.tool,
46 'itime': itime
47
48 }
49
50 res = test_client.put(
51 '/v2/ws/{ws_name}/activities/{id}/'
52 .format(ws_name=ws.name, id=command.id),
53 data=data,
54 )
55
56 # Changing res.json['itime'] to timestamp format of itime
57 res_itime = res.json['itime'] / 1000
58 assert res.status_code == 200
59 assert res_itime == itime
0 import pytest
1
2 from test_cases.factories import CustomFieldsSchemaFactory
3 from test_cases.test_api_non_workspaced_base import ReadOnlyAPITests
4
5 from server.api.modules.custom_fields import CustomFieldsSchemaView
6 from server.models import (
7 CustomFieldsSchema
8 )
9
10 @pytest.mark.usefixtures('logged_user')
11 class TestVulnerabilityCustomFields(ReadOnlyAPITests):
12 model = CustomFieldsSchema
13 factory = CustomFieldsSchemaFactory
14 api_endpoint = 'custom_fields_schema'
15 #unique_fields = ['ip']
16 #update_fields = ['ip', 'description', 'os']
17 view_class = CustomFieldsSchemaView
18
19 def test_custom_fields_data(self, session, test_client):
20 add_text_field = CustomFieldsSchemaFactory.create(
21 table_name='vulnerability',
22 field_name='cvss',
23 field_type='text',
24 field_order=1,
25 field_display_name='CVSS',
26 )
27 session.add(add_text_field)
28 session.commit()
29
30 res = test_client.get(self.url()) # '/v2/custom_fields_schema/')
31 assert res.status_code == 200
32 assert {u'field_type': u'text', u'field_name': u'cvss', u'field_display_name': u'CVSS', u'field_order': 1} in res.json
0 '''
1 Faraday Penetration Test IDE
2 Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/)
3 See the file 'doc/LICENSE' for the license information
4
5 '''
6
7 import pytest
8
9 @pytest.mark.usefixtures('logged_user')
10 class TestGetExploits():
11 def test_get_exploit(self, test_client):
12 cve_id = "CVE-2018-1999045"
13 res = test_client.get('v2/vulners/exploits/{id}'.format(id=cve_id))
14 assert res.status_code == 200
15
16 def test_key_error(self, test_client):
17 cve_id = "CVE-2018-1999035ERROR"
18 res = test_client.get('v2/vulners/exploits/{id}'.format(id=cve_id))
19 assert res.status_code == 400
20
21 def test_get_exploit_with_modules(self, test_client):
22 cve_id = "CVE-2016-9299"
23 res = test_client.get('v2/vulners/exploits/{id}'.format(id=cve_id))
24 assert res.status_code == 200
25 assert res.json.get('metasploit') != []
26 assert res.json.get('exploitdb') != []
2424 assert response.json['Faraday Server'] == 'Running'
2525 # to avoid side effects
2626 os.chdir(current_dir)
27
28 def test_get_config(self, test_client):
29 res = test_client.get('/config')
30 assert res.status_code == 200
31 assert res.json['lic_db'] == 'faraday_licenses'
1515
1616
1717 @pytest.mark.usefixtures('logged_user')
18 class GenericAPITest:
18 class GenericAPITest(object):
1919
2020 model = None
2121 factory = None
281281 res = test_client.post(self.url(), data=data)
282282 assert res.status_code == 400
283283 assert res.json['messages']['_schema'] == res.json['messages']['_schema']
284
285 def test_load_ports_without_list(self, test_client):
286 data = {
287 "name": "ports",
288 "description": "testing ports load",
289 "owned": False,
290 "ports": 21,
291 "protocol": "tcp",
292 "status": "open",
293 }
294 res = test_client.post(self.url(), data=data)
295 assert res.status_code == 400
296
297 def test_load_ports_with_empty_list(self, test_client):
298 data = {
299 "name": "ports",
300 "description": "testing ports load",
301 "owned": False,
302 "ports": [],
303 "protocol": "tcp",
304 "status": "open",
305 }
306 res = test_client.post(self.url(), data=data)
307 assert res.status_code == 400
308
309 def test_load_ports_with_negative_value(self, test_client):
310 data = {
311 "name": "ports",
312 "description": "testing ports load",
313 "owned": False,
314 "ports": [-1],
315 "protocol": "tcp",
316 "status": "open",
317 }
318 res = test_client.post(self.url(), data=data)
319 assert res.status_code == 400
0 '''
1 Faraday Penetration Test IDE
2 Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/)
3 See the file 'doc/LICENSE' for the license information
4
5 '''
6
7 import pytest
8
9 @pytest.mark.usefixtures('logged_user')
10 class TestSessionLogged():
11 def test_session_when_user_is_logged(self, test_client):
12 res = test_client.get('/session')
13 assert res.status_code == 200
14
15 class TestSessionNotLogged():
16 def test_session_when_user_is_not_logged(self, test_client):
17 res = test_client.get('/session')
18 assert res.status_code == 401
0 '''
1 Faraday Penetration Test IDE
2 Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/)
3 See the file 'doc/LICENSE' for the license information
4
5 '''
6
7 import os
8 import pytest
9 from io import BytesIO
10 from mock import Mock, patch
11
12 from test_cases.factories import WorkspaceFactory
13 from config.configuration import getInstanceConfiguration
14
15 @pytest.mark.usefixtures('logged_user')
16 class TestFileUpload():
17
18 def test_file_upload(self, test_client, session):
19 ws = WorkspaceFactory.create(name="abc")
20 session.add(ws)
21 session.commit()
22 path = os.path.join(
23 os.path.dirname(os.path.realpath(__file__)),
24 'data',
25 'nmap_plugin_with_api.xml')
26
27 with open(path,'r') as report:
28 file_contents = report.read()
29 session_response = test_client.get('/session')
30 csrf_token = session_response.json.get('csrf_token')
31 data = {
32 'file' : (BytesIO(file_contents), 'nmap_report.xml'),
33 'csrf_token' : csrf_token
34 }
35
36 res = test_client.post(
37 '/v2/ws/{ws_name}/upload_report'.format(ws_name=ws.name),
38 data=data,
39 use_json_data=False)
40
41 assert res.status_code == 200
42
43
44 def test_no_file_in_request(self, test_client, session):
45 ws = WorkspaceFactory.create(name="abc")
46 session.add(ws)
47 session.commit()
48
49 res = test_client.post(
50 '/v2/ws/{ws_name}/upload_report'.format(ws_name=ws.name))
51
52 assert res.status_code == 400
53
54
55 def test_request_without_csrf_token(self, test_client, session):
56 ws = WorkspaceFactory.create(name="abc")
57 session.add(ws)
58 session.commit()
59 path = os.path.join(
60 os.path.dirname(os.path.realpath(__file__)),
61 'data',
62 'nmap_plugin_with_api.xml')
63
64 with open(path,'r') as report:
65 file_contents = report.read()
66
67 data = {
68 'file' : (BytesIO(file_contents), 'nmap_report.xml'),
69 }
70
71 res = test_client.post(
72 '/v2/ws/{ws_name}/upload_report'.format(ws_name=ws.name),
73 data=data,
74 use_json_data=False)
75
76 assert res.status_code == 403
77
78
79 def test_request_with_workspace_deactivate(self, test_client, session):
80 ws = WorkspaceFactory.create(name="abc")
81 ws.active = False
82 session.add(ws)
83 session.commit()
84 path = os.path.join(
85 os.path.dirname(os.path.realpath(__file__)),
86 'data',
87 'nmap_plugin_with_api.xml')
88
89 with open(path,'r') as report:
90 file_contents = report.read()
91
92 session_response = test_client.get('/session')
93 csrf_token = session_response.json.get('csrf_token')
94 data = {
95 'file' : (BytesIO(file_contents), 'nmap_report.xml'),
96 'csrf_token' : csrf_token
97 }
98 res = test_client.post(
99 '/v2/ws/{ws_name}/upload_report'.format(ws_name=ws.name),
100 data=data,
101 use_json_data=False)
102
103 assert res.status_code == 404
1616 from hypothesis import given
1717 from hypothesis.strategies import text, lists, integers, one_of, none
1818 from depot.manager import DepotManager
19
20 from test_cases.conftest import ignore_nplusone
2119
2220 try:
2321 from urllib import urlencode
4745 from test_cases.factories import ServiceFactory, CommandFactory, \
4846 CommandObjectFactory, HostFactory, EmptyCommandFactory, \
4947 UserFactory, VulnerabilityWebFactory, VulnerabilityFactory, \
50 ReferenceFactory, PolicyViolationFactory, HostnameFactory, WorkspaceFactory
48 ReferenceFactory, PolicyViolationFactory, HostnameFactory, \
49 WorkspaceFactory, CustomFieldsSchemaFactory
5150
5251 CURRENT_PATH = os.path.dirname(os.path.abspath(__file__))
5352
345344 '{0}/attachment/notexistingattachment.png/'.format(vuln_id))
346345 assert res.status_code == 404
347346
348 @ignore_nplusone
347 @pytest.mark.usefixtures('ignore_nplusone')
349348 def test_update_vuln_add_attachment_on_update(self, test_client, session):
350349 host = HostFactory.create(workspace=self.workspace)
351350 vuln = VulnerabilityFactory.create(workspace=self.workspace, host_id=host.id)
351 session.add(vuln)
352352 session.commit() # flush host_with_hostnames
353353 attachment = NamedTemporaryFile()
354354 file_content = 'test file'
375375 file_content = 'new test file'
376376 new_attachment.write(file_content)
377377 new_attachment.seek(0)
378 raw_data = self._create_put_data(
379 'Updated with attachment',
380 'Updated vuln',
381 'open',
382 host.id,
383 'Host',
384 attachments=[new_attachment]
385 )
378386 res = test_client.put(self.url(obj=vuln, workspace=self.workspace),
379387 data=raw_data)
380388 assert res.status_code == 200
15781586 def test_add_attachment_to_vuln(self, test_client, session, host_with_hostnames):
15791587 ws = WorkspaceFactory.create(name='abc')
15801588 session.add(ws)
1581 vuln = VulnerabilityFactory.create(workspace=self.workspace)
1589 vuln = VulnerabilityFactory.create(workspace=ws)
15821590 session.add(vuln)
15831591 session.commit()
15841592 file_contents = 'my file contents'
15931601 file_id = session.query(Vulnerability).filter_by(id=vuln.id).first().evidence[0].content['file_id']
15941602 depot = DepotManager.get()
15951603 assert file_contents == depot.get(file_id).read()
1604
1605 def test_delete_attachment_from_vuln(self, test_client, session, host_with_hostnames):
1606 session.commit() # flush host_with_hostnames
1607 ws_name = host_with_hostnames.workspace.name
1608 attachment = NamedTemporaryFile()
1609 file_content = 'test file'
1610 attachment.write(file_content)
1611 attachment.seek(0)
1612 vuln = _create_post_data_vulnerability(
1613 name='Testing vuln',
1614 vuln_type='Vulnerability',
1615 parent_id=host_with_hostnames.id,
1616 parent_type='Host',
1617 refs=[],
1618 policyviolations=[],
1619 attachments=[attachment]
1620 )
1621 res = test_client.post('/v2/ws/{workspace}/vulns/'\
1622 .format(workspace=ws_name), data=vuln)
1623 assert res.status_code == 201
1624
1625 filename = attachment.name.split('/')[-1]
1626 vuln_id = res.json['_id']
1627 res = test_client.delete(
1628 '/v2/ws/{workspace}/vulns/{vulnerability}/attachment/{file_name}/'
1629 .format(workspace=ws_name, vulnerability=vuln_id, file_name=filename)
1630 )
1631 assert res.status_code == 200
1632
1633 query_test = session.query(Vulnerability).filter_by(id=vuln_id).first().evidence
1634 assert query_test == []
1635
1636 @pytest.mark.skip("NplusOneError")
1637 def test_vuln_filter(self, test_client, session, workspace):
1638 new_host = HostFactory.create(workspace=workspace)
1639 session.commit()
1640
1641 raw_data = _create_post_data_vulnerability(
1642 name='vuln_1',
1643 vuln_type='Vulnerability',
1644 parent_id=new_host.id,
1645 parent_type='Host',
1646 refs=[],
1647 policyviolations=[],
1648 description='helloworld',
1649 severity='medium',
1650 )
1651 res = test_client.post('/v2/ws/{workspace}/vulns/'
1652 .format(workspace=workspace.name), data=raw_data)
1653
1654 data = {
1655 'q': '{"filters":[{"name":"severity","op":"eq","val":"medium"}]}'
1656 }
1657 res = test_client.get('/v2/ws/{name}/vulns/filter'
1658 .format(name=workspace.name), query_string=data)
1659
1660 assert res.status_code == 200
1661
1662 value = res.json['vulnerabilities'][0]['value']
1663 assert value['name'] == 'vuln_1'
1664
1665 def test_invalid_vuln_filters(self, test_client, session, workspace):
1666 data = {
1667 "q": {"filters":[{"name":"severity","op":"eq","val":"medium"}]}
1668 }
1669 res = test_client.get('/v2/ws/{name}/vulns/filter'.format(name=workspace.name), query_string=data)
1670 assert res.status_code == 400
1671
1672 def test_vuln_filter_exception(self, test_client, workspace, session):
1673 vuln = VulnerabilityFactory.create(workspace=workspace, severity="medium")
1674 session.add(vuln)
1675 session.commit()
1676 data = {
1677 'q': '{"filters":[{"name":"severity","op":"eq","val":"medium"}]}'
1678 }
1679 res = test_client.get('/v2/ws/{name}/vulns/filter'.format(name=workspace.name), query_string=data)
1680 assert res.status_code == 200
1681 assert res.json['count'] == 0
1682
1683 def test_vuln_web_filter_exception(self, test_client, workspace, session):
1684 vuln = VulnerabilityWebFactory.create(workspace=workspace, severity="medium")
1685 session.add(vuln)
1686 session.commit()
1687 data = {
1688 'q': '{"filters":[{"name":"severity","op":"eq","val":"medium"}]}'
1689 }
1690 res = test_client.get('/v2/ws/{name}/vulns/filter'.format(name=workspace.name), query_string=data)
1691 assert res.status_code == 200
1692 assert res.json['count'] == 0
1693
1694 def test_add_vuln_without_parent_id(self, test_client):
1695 raw_data = _create_post_data_vulnerability(
1696 name='New vulns',
1697 vuln_type='Vulnerability',
1698 parent_id=0,
1699 parent_type="Host",
1700 refs=[],
1701 policyviolations=[],
1702 )
1703 with pytest.raises(Exception) as err:
1704 res = test_client.post(self.url(), data=raw_data)
1705 assert err.typename == 'AssertionError'
1706
1707 def test_add_vuln_with_unknown_parent_type(self, test_client, session, host_with_hostnames):
1708 session.commit()
1709 raw_data = _create_post_data_vulnerability(
1710 name='New vulns',
1711 vuln_type='Vulnerability',
1712 parent_id=host_with_hostnames.id,
1713 parent_type="invalid_host",
1714 refs=[],
1715 policyviolations=[],
1716 )
1717 res = test_client.post(self.url(), data=raw_data)
1718 assert res.json['messages']['_schema'][0] == 'Unknown parent type'
1719
1720 def test_add_empty_attachment(self, test_client, session, workspace):
1721 vuln = VulnerabilityFactory.create(workspace=workspace)
1722 session.add(vuln)
1723 session.commit()
1724
1725 res = test_client.post(
1726 '/v2/ws/{ws_name}/vulns/{id}/attachment/'
1727 .format(ws_name=workspace.name,id=vuln.id))
1728 assert res.status_code == 400
1729
1730 def test_get_attachment_with_invalid_workspace_and_vuln(self, test_client):
1731 res = test_client.get(
1732 '/v2/ws/{ws_name}/vulns/{vuln_id}/attachment/{name}/'
1733 .format(ws_name="invalid_ws", vuln_id="invalid_vuln", name="random_name"))
1734 assert res.status_code == 404
1735
1736 def test_delete_attachment_with_invalid_workspace_and_vuln(self, test_client):
1737 res = test_client.delete(
1738 '/v2/ws/{ws_name}/vulns/{vuln_id}/attachment/{name}/'
1739 .format(ws_name="invalid_ws",vuln_id="invalid_vuln", name="random_name"))
1740 assert res.status_code == 404
1741
1742 def test_delete_invalid_attachment(self, test_client, workspace, session):
1743 vuln = VulnerabilityFactory.create(workspace=workspace)
1744 session.add(vuln)
1745 session.commit()
1746 res = test_client.delete(
1747 '/v2/ws/{ws_name}/vulns/{vuln_id}/attachment/{name}/'
1748 .format(ws_name=workspace.name,vuln_id=vuln.id, name="random_name"))
1749 assert res.status_code == 404
1750
1751
1752 @pytest.mark.usefixtures('logged_user')
1753 class TestCustomFieldVulnerability(ReadOnlyAPITests): # TODO migration: use read write api tests
1754 model = Vulnerability
1755 factory = factories.VulnerabilityFactory
1756 api_endpoint = 'vulns'
1757 view_class = VulnerabilityView
1758
1759 def test_create_vuln_with_custom_fields_shown(self, test_client, second_workspace, session):
1760 host = HostFactory.create(workspace=self.workspace)
1761 custom_field_schema = CustomFieldsSchemaFactory(
1762 field_name='cvss',
1763 field_type='str',
1764 field_display_name='CVSS',
1765 table_name='vulnerability'
1766 )
1767 session.add(host)
1768 session.add(custom_field_schema)
1769 session.commit()
1770 data = {
1771 'name': 'Test Alert policy_violations',
1772 'severity': 'informational',
1773 'creator': 'Zap',
1774 'parent_type': 'Host',
1775 'parent': host.id,
1776 'type': 'Vulnerability',
1777 'custom_fields': {
1778 'CVSS': '321321',
1779 }
1780 }
1781 res = test_client.post(self.url(), data=data)
1782
1783 assert res.status_code == 201
1784 assert res.json['custom_fields']['CVSS'] == '321321'
1785
1786 def test_create_vuln_with_custom_fields_using_field_name_fails(self, test_client, second_workspace, session):
1787 host = HostFactory.create(workspace=self.workspace)
1788 custom_field_schema = CustomFieldsSchemaFactory(
1789 field_name='cvss',
1790 field_type='str',
1791 field_display_name='CVSS',
1792 table_name='vulnerability'
1793 )
1794 session.add(host)
1795 session.add(custom_field_schema)
1796 session.commit()
1797 data = {
1798 'name': 'Test Alert policy_violations',
1799 'severity': 'informational',
1800 'creator': 'Zap',
1801 'parent_type': 'Host',
1802 'parent': host.id,
1803 'type': 'Vulnerability',
1804 'custom_fields': {
1805 'cvss': '321321', # here we use the field_name and not the display_name
1806 }
1807 }
1808 res = test_client.post(self.url(), data=data)
1809
1810 assert res.status_code == 400
1811
1812 def test_create_vuln_with_custom_fields_list(self, test_client, second_workspace, session):
1813 host = HostFactory.create(workspace=self.workspace)
1814 custom_field_schema = CustomFieldsSchemaFactory(
1815 field_name='changes',
1816 field_type='list',
1817 field_display_name='Changes',
1818 table_name='vulnerability'
1819 )
1820 session.add(host)
1821 session.add(custom_field_schema)
1822 session.commit()
1823 data = {
1824 'name': 'Test Alert policy_violations',
1825 'severity': 'informational',
1826 'creator': 'Zap',
1827 'parent_type': 'Host',
1828 'parent': host.id,
1829 'type': 'Vulnerability',
1830 'custom_fields': {
1831 'Changes': ['1', '2', '3'],
1832 }
1833 }
1834 res = test_client.post(self.url(), data=data)
1835
1836 assert res.status_code == 201
1837 assert res.json['custom_fields']['Changes'] == ['1', '2', '3']
1838
1839 def test_create_vuln_with_custom_fields_with_invalid_type_fails(self, test_client, second_workspace, session):
1840 host = HostFactory.create(workspace=self.workspace)
1841 custom_field_schema = CustomFieldsSchemaFactory(
1842 field_name='cvss',
1843 field_type='int',
1844 field_display_name='CVSS',
1845 table_name='vulnerability'
1846 )
1847 session.add(host)
1848 session.add(custom_field_schema)
1849 session.commit()
1850 data = {
1851 'name': 'Test Alert policy_violations',
1852 'severity': 'informational',
1853 'creator': 'Zap',
1854 'parent_type': 'Host',
1855 'parent': host.id,
1856 'type': 'Vulnerability',
1857 'custom_fields': {
1858 'CVSS': 'pepe',
1859 }
1860 }
1861 res = test_client.post(self.url(), data=data)
1862
1863 assert res.status_code == 400
1864
1865 def test_create_vuln_with_invalid_custom_fields_fails(self, test_client, second_workspace, session):
1866 host = HostFactory.create(workspace=self.workspace)
1867 session.add(host)
1868 session.commit()
1869 data = {
1870 'name': 'Test Alert policy_violations',
1871 'severity': 'informational',
1872 'creator': 'Zap',
1873 'parent_type': 'Host',
1874 'parent': host.id,
1875 'type': 'Vulnerability',
1876 'custom_fields': {
1877 'CVSS': '321321',
1878 }
1879 }
1880 res = test_client.post(self.url(), data=data)
1881
1882 assert res.status_code == 400
1883
1884
1885 @pytest.mark.usefixtures('logged_user')
1886 class TestVulnerabilityCustomFields(ReadOnlyAPITests):
1887 model = Vulnerability
1888 factory = factories.VulnerabilityFactory
1889 api_endpoint = 'vulns'
1890 #unique_fields = ['ip']
1891 #update_fields = ['ip', 'description', 'os']
1892 view_class = VulnerabilityView
1893
1894 def test_custom_field_cvss(self, session, test_client):
1895 add_text_field = CustomFieldsSchemaFactory.create(
1896 table_name='vulnerability',
1897 field_name='cvss',
1898 field_type='text',
1899 field_display_name='CVSS',
1900 )
1901 session.add(add_text_field)
1902 session.commit()
15961903
15971904
15981905 def test_type_filter(workspace, session,
88
99 from server.models import Workspace, Scope
1010 from server.api.modules.workspaces import WorkspaceView
11 from test_cases.conftest import ignore_nplusone
1211 from test_cases.test_api_non_workspaced_base import ReadWriteAPITests
1312 from test_cases import factories
1413
198197 assert set(res.json['scope']) == set(desired_scope)
199198 assert set(s.name for s in workspace.scope) == set(desired_scope)
200199
201 @ignore_nplusone
200 @pytest.mark.skip # TODO fix fox sqlite
202201 def test_list_retrieves_all_items_from(self, test_client):
203202 super(TestWorkspaceAPI, self).test_list_retrieves_all_items_from(test_client)
204203
204 def test_workspace_activation(self, test_client, workspace, session):
205 workspace.active = False
206 session.add(workspace)
207 session.commit()
208 res = test_client.put('{url}{id}/activate/'
209 .format(url=self.url(),
210 id=workspace.name))
211 assert res.status_code == 200
212
213 res = test_client.get('{url}{id}/'.format(url=self.url(),id=workspace.name))
214 active = res.json.get('active')
215 assert active == True
216
217 active_query = session.query(Workspace).filter_by(id=workspace.id).first().active
218 assert active_query == True
219
220 def test_workspace_deactivation(self, test_client, workspace, session):
221 workspace.active = True
222 session.add(workspace)
223 session.commit()
224 res = test_client.put('{url}{id}/deactivate/'
225 .format(url=self.url(),
226 id=workspace.name))
227 assert res.status_code == 200
228
229 res = test_client.get('{url}{id}/'.format(url=self.url(),id=workspace.name))
230 active = res.json.get('active')
231 assert active == False
232
233 active_query = session.query(Workspace).filter_by(id=workspace.id).first().active
234 assert active_query == False
0 import os
1 import time
2 import signal
3 import subprocess
4 from datetime import datetime
5 from server.utils import daemonize
6
7
8 def test_start_and_kill_faraday_server():
9 """
10 Starts the server and then send a signal to kill the
11 process gracefully.
12 The idea is to catch a broken faraday-server.py
13 After sending the signal we wait for 15 seconds and
14 if the server didn't stop we fail the test also.
15 """
16 current_path = os.path.dirname(os.path.abspath(__file__))
17 server_port = 5988
18 while daemonize.is_server_running(server_port) and server_port < 6500:
19 server_port += 1
20
21 if server_port > 6500:
22 raise Exception('No free ports could be found')
23
24 server_script = os.path.join(current_path, '..', 'faraday-server.py')
25 command = ['/usr/bin/env', 'python2.7', server_script, '--port', '{0}'.format(server_port)]
26 subproc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
27 start = datetime.now()
28 while subproc.returncode is None:
29 now = datetime.now()
30 delta = now - start
31 if delta.seconds > 40:
32 raise UserWarning('Faraday server test timeout!')
33 if delta.seconds > 4:
34 subproc.send_signal(signal.SIGTERM)
35 subproc.wait()
36 subproc.poll()
37 delta = now - start
38 subproc.poll()
39 time.sleep(0.1)
40 out, err = subproc.communicate()
41 assert subproc.returncode == 0, err
4040 # We use it to test all model classes.
4141 # to add more tests you need to add items in the list or more objects in the dict.
4242
43 OBJ_DATA = {
43 OBJ_DATA = [
4444 # the key is the object being tested
45 Host: [{
45 {
46 'class': Host,
4647 'factory': HostFactory,
4748 # api_end_point is used to assert the generated url.
4849 'api_end_point': 'hosts',
7071 'owned': False,
7172 'owner': 'leo',
7273 'parent': None,
73 'type': 'Host'
74 },
75 }],
76 Service: [{
74 'type': 'Host',
75 'mac': ''
76 },
77 },
78 {
79 'class': Service,
7780 'factory': ServiceFactory,
7881 'api_end_point': 'services',
7982 'parent': {
104107 'owner': 'leo',
105108 'type': 'Service'
106109 },
107 }],
108 Vuln: [{
110 },
111 {
112 'class': Vuln,
109113 'factory': VulnerabilityFactory,
110114 'api_end_point': 'vulns',
111115 'parent': {
138142 'status': 'opened',
139143 'resolution': None,
140144 },
141 }],
142 VulnWeb: [{
145 },
146 {
147 'class': VulnWeb,
143148 'factory': VulnerabilityWebFactory,
144149 'api_end_point': 'vulns',
145150 'parent': {
189194 'query': 'query test',
190195 'response': 'repsonse data',
191196 },
192 }],
193 Credential: [{
197 },
198 {
199 'class': Credential,
194200 'factory': CredentialFactory,
195201 'api_end_point': 'credential',
196202 'parent': {
216222 'username': 'username1',
217223 'type': 'Cred',
218224 },
219 }],
220 Note: [{
225 },
226 {
227 'class': Note,
221228 'factory': CommentFactory,
222229 'api_end_point': 'comment',
223230 # parent not used
245252 'owner': 'leo',
246253 'text': 'Text from Note',
247254 'type': 'Note'},
248 }],
249 Command: [{
255 },
256 {
257 'class': Command,
250258 'factory': EmptyCommandFactory,
251259 'api_end_point': 'commands',
252260 # parent not used
280288 'user': 'leonardo',
281289 'workspace': u'test'
282290 }
283 }]
284 }
291 }
292 ]
285293
286294
287295 # the following dict is used to parametrize find (GET) tests
288296 # mocked_response is the json returned by the api
289297 # serialized_expected_results the expected serialized result.
290 GET_OBJ_DATA = {
291 VulnWeb: [
298 GET_OBJ_DATA = [
292299 {
300 'class': VulnWeb,
293301 'factory': VulnerabilityWebFactory,
294302 'api_end_point': 'vulns',
295303 'get_properties_function': get_vuln_web_properties,
382390 "pname": "pname"
383391 }
384392
385 }
386 ],
387 Vuln: [
393 },
388394 {
395 'class': Vuln,
389396 'factory': VulnerabilityFactory,
390397 'api_end_point': 'vulns',
391398 'get_properties_function': get_vuln_properties,
466473 'status': 'opened'
467474 }
468475
469 }
470 ],
471 Host: [
476 },
472477 {
478 'class': Host,
473479 'factory': HostFactory,
474480 'api_end_point': 'hosts',
475481 'get_properties_function': get_host_properties,
494500 'os': 'Linux 2.6.9',
495501 'hostnames': [],
496502 'owned': False,
497 'owner': 'leonardo'}
498
499 }
500 ],
501 Service: [
503 'owner': 'leonardo',
504 'mac': ''}
505
506 },
502507 {
508 'class': Service,
503509 'factory': ServiceFactory,
504510 'api_end_point': 'services',
505511 'parent': {
548554 'owner': 'leonardo'
549555 }
550556
551 }
552 ],
553 Credential: [{
557 },
558 {
559 'class': Credential,
554560 'factory': ServiceFactory,
555561 'api_end_point': 'credential',
556562 'parent': {
592598 'password': 'secretpassword',
593599 'username': 'user1'
594600 }
595 }],
596 Credential: [{
601 },
602 {
603 'class': Credential,
597604 'factory': ServiceFactory,
598605 'api_end_point': 'credential',
599606 'parent': {
635642 'password': 'secretpassword',
636643 'username': 'user1'
637644 }
638 }],
639 Command: [{
645 },
646 {
647 'class': Command,
640648 'factory': ServiceFactory,
641649 'api_end_point': 'commands',
642650 'parent': {
667675 'itime': 1513365824,
668676 'params': '/home/lcubo/.faraday/report/dsadsa/nessus_report_Remote.nessus',
669677 'user': 'lcubo'}
670 }]
671 }
678 }
679 ]
672680
673681 class MockResponse:
674682 def __init__(self, json_data, status_code):
682690 @pytest.mark.usefixtures('logged_user')
683691 class TestMapperManager():
684692
685 @pytest.mark.parametrize("obj_class, many_test_data", OBJ_DATA.items())
686 def test_save_without_command(self, obj_class, many_test_data, monkeypatch, session):
693 @pytest.mark.parametrize("many_test_data", OBJ_DATA)
694 def test_save_without_command(self, many_test_data, monkeypatch, session):
687695 """
688696 This test verifies that the request made to the api are the expected ones
689697 """
698 obj_class = many_test_data['class']
690699 workspace = WorkspaceFactory.create(name='test')
691700 session.commit()
692701 mapper_manager = MapperManager()
693702 mapper_manager.createMappers(workspace.name)
694
695 for test_data in many_test_data:
696 raw_data = test_data['data']
697 if test_data['parent']:
698 parent = test_data['parent']['parent_factory'].create()
699 session.commit()
700 test_data['data']['parent'] = parent.id
701 test_data['data']['parent_type'] = test_data['parent']['parent_type']
702 if obj_class not in [Note, Command]:
703 test_data['expected_payload']['parent'] = parent.id
704 if obj_class in [Vuln, Credential]:
705 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
706 def mock_server_post(test_data, post_url, update=False, expected_response=201, **params):
707 assert post_url == '{0}/ws/test/{1}/'.format(
708 _create_server_api_url(), test_data['api_end_point'])
709 assert expected_response == 201
710 assert update == False
711 if obj_class not in [Command]:
712 metadata = params.pop('metadata')
713 assert metadata['owner'] == test_data['expected_payload']['owner']
714 assert params == test_data['expected_payload']
715 return {
716 'id': 1,
717 'ok': True,
718 'rev': ''
719 }
720
721 monkeypatch.setattr(persistence.server.server, '_post', partial(mock_server_post, test_data))
722 obj = obj_class(raw_data, workspace.name)
723 mapper_manager.save(obj)
724
725 @pytest.mark.parametrize("obj_class, many_test_data", OBJ_DATA.items())
726 def test_save_with_command(self, obj_class, many_test_data, monkeypatch, session):
703 test_data = many_test_data
704 raw_data = test_data['data']
705 if test_data['parent']:
706 parent = test_data['parent']['parent_factory'].create()
707 session.commit()
708 test_data['data']['parent'] = parent.id
709 test_data['data']['parent_type'] = test_data['parent']['parent_type']
710 if obj_class not in [Note, Command]:
711 test_data['expected_payload']['parent'] = parent.id
712 if obj_class in [Vuln, Credential]:
713 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
714 def mock_server_post(test_data, post_url, update=False, expected_response=201, **params):
715 assert post_url == '{0}/ws/test/{1}/'.format(
716 _create_server_api_url(), test_data['api_end_point'])
717 assert expected_response == 201
718 assert update == False
719 if obj_class not in [Command]:
720 metadata = params.pop('metadata')
721 assert metadata['owner'] == test_data['expected_payload']['owner']
722 assert params == test_data['expected_payload']
723 return {
724 'id': 1,
725 'ok': True,
726 'rev': ''
727 }
728
729 monkeypatch.setattr(persistence.server.server, '_post', partial(mock_server_post, test_data))
730 obj = obj_class(raw_data, workspace.name)
731 mapper_manager.save(obj)
732
733 @pytest.mark.parametrize("many_test_data", OBJ_DATA)
734 def test_save_with_command(self, many_test_data, monkeypatch, session):
735 obj_class = many_test_data['class']
727736 if obj_class == Command:
728737 return
729738 workspace = WorkspaceFactory.create(name='test')
731740 session.commit()
732741 mapper_manager = MapperManager()
733742 mapper_manager.createMappers(workspace.name)
734 for test_data in many_test_data:
735 raw_data = test_data['data']
736 if test_data['parent']:
737 parent = test_data['parent']['parent_factory'].create()
738 session.commit()
739
740 test_data['data']['parent'] = parent.id
741 test_data['data']['parent_type'] = test_data['parent']['parent_type']
742 if obj_class not in [Note]:
743 test_data['expected_payload']['parent'] = parent.id
744 if obj_class in [Vuln, Credential]:
745 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
746 def mock_server_post(test_data, post_url, update=False, expected_response=201, **params):
747 assert post_url == '{0}/ws/test/{1}/?command_id={2}'.format(_create_server_api_url(), test_data['api_end_point'], params['command_id'])
748 assert expected_response == 201
749 assert update == False
750 metadata = params.pop('metadata')
751 assert metadata['owner'] == test_data['expected_payload']['owner']
752 params.pop('command_id')
753 test_data['expected_payload'].pop('command_id')
754 assert params == test_data['expected_payload']
755 return {
756 'id': 1,
757 'ok': True,
758 'rev': ''
759 }
760
761 monkeypatch.setattr(persistence.server.server, '_post', partial(mock_server_post, test_data))
762 obj = obj_class(raw_data, workspace.name)
763 mapper_manager.save(obj, command.id)
764
765 @pytest.mark.parametrize("obj_class, many_test_data", OBJ_DATA.items())
766 def test_update_without_command(self, obj_class, many_test_data, monkeypatch, session):
743 test_data = many_test_data
744 raw_data = test_data['data']
745 if test_data['parent']:
746 parent = test_data['parent']['parent_factory'].create()
747 session.commit()
748
749 test_data['data']['parent'] = parent.id
750 test_data['data']['parent_type'] = test_data['parent']['parent_type']
751 if obj_class not in [Note]:
752 test_data['expected_payload']['parent'] = parent.id
753 if obj_class in [Vuln, Credential]:
754 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
755 def mock_server_post(test_data, post_url, update=False, expected_response=201, **params):
756 assert post_url == '{0}/ws/test/{1}/?command_id={2}'.format(_create_server_api_url(), test_data['api_end_point'], params['command_id'])
757 assert expected_response == 201
758 assert update == False
759 metadata = params.pop('metadata')
760 assert metadata['owner'] == test_data['expected_payload']['owner']
761 params.pop('command_id')
762 test_data['expected_payload'].pop('command_id')
763 assert params == test_data['expected_payload']
764 return {
765 'id': 1,
766 'ok': True,
767 'rev': ''
768 }
769
770 monkeypatch.setattr(persistence.server.server, '_post', partial(mock_server_post, test_data))
771 obj = obj_class(raw_data, workspace.name)
772 mapper_manager.save(obj, command.id)
773
774 @pytest.mark.parametrize("many_test_data", OBJ_DATA)
775 def test_update_without_command(self, many_test_data, monkeypatch, session):
776 obj_class = many_test_data['class']
767777 workspace = WorkspaceFactory.create(name='test')
768778 mapper_manager = MapperManager()
769779 mapper_manager.createMappers(workspace.name)
770
771 for test_data in many_test_data:
772 relational_model = test_data['factory'].create()
773 session.add(relational_model)
780 test_data = many_test_data
781 relational_model = test_data['factory'].create()
782 session.add(relational_model)
783 session.commit()
784 raw_data = test_data['data']
785 if test_data['parent']:
786 parent = test_data['parent']['parent_factory'].create()
787 session.add(parent)
774788 session.commit()
775 raw_data = test_data['data']
776 if test_data['parent']:
777 parent = test_data['parent']['parent_factory'].create()
778 session.add(parent)
779 session.commit()
780
781 test_data['data']['parent'] = parent.id
782 test_data['data']['parent_type'] = test_data['parent']['parent_type']
783 if obj_class not in [Note, Command]:
784 test_data['expected_payload']['parent'] = parent.id
785 if obj_class in [Vuln, Credential]:
786 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
787 def mock_server_put(test_data, put_url, update=False, expected_response=201, **params):
788 assert put_url == '{0}/ws/test/{1}/{2}/'.format(_create_server_api_url(), test_data['api_end_point'], test_data['id'])
789 assert expected_response == 200
790 assert update == False
791 if obj_class not in [Command]:
792 metadata = params.pop('metadata')
793 assert metadata['owner'] == test_data['expected_payload']['owner']
794 params.pop('command_id', None)
795 test_data['expected_payload'].pop('command_id', None)
796 assert params == test_data['expected_payload']
797
798 return {
799 'id': 1,
800 'ok': True,
801 'rev': ''
802 }
803
804 raw_data['id'] = relational_model.id
805 test_data['id'] = relational_model.id
806 monkeypatch.setattr(persistence.server.server, '_put', partial(mock_server_put, test_data))
807
808 obj = obj_class(raw_data, workspace.name)
809 mapper_manager.update(obj)
810
811 @pytest.mark.parametrize("obj_class, many_test_data", OBJ_DATA.items())
812 def test_update_with_command(self, obj_class, many_test_data, monkeypatch, session):
789
790 test_data['data']['parent'] = parent.id
791 test_data['data']['parent_type'] = test_data['parent']['parent_type']
792 if obj_class not in [Note, Command]:
793 test_data['expected_payload']['parent'] = parent.id
794 if obj_class in [Vuln, Credential]:
795 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
796 def mock_server_put(test_data, put_url, update=False, expected_response=201, **params):
797 assert put_url == '{0}/ws/test/{1}/{2}/'.format(_create_server_api_url(), test_data['api_end_point'], test_data['id'])
798 assert expected_response == 200
799 assert update == False
800 if obj_class not in [Command]:
801 metadata = params.pop('metadata')
802 assert metadata['owner'] == test_data['expected_payload']['owner']
803 params.pop('command_id', None)
804 test_data['expected_payload'].pop('command_id', None)
805 assert params == test_data['expected_payload']
806
807 return {
808 'id': 1,
809 'ok': True,
810 'rev': ''
811 }
812
813 raw_data['id'] = relational_model.id
814 test_data['id'] = relational_model.id
815 monkeypatch.setattr(persistence.server.server, '_put', partial(mock_server_put, test_data))
816
817 obj = obj_class(raw_data, workspace.name)
818 mapper_manager.update(obj)
819
820 @pytest.mark.parametrize("many_test_data", OBJ_DATA)
821 def test_update_with_command(self, many_test_data, monkeypatch, session):
822 obj_class = many_test_data['class']
813823 if obj_class in [Command]:
814824 return
815825 workspace = WorkspaceFactory.create(name='test')
819829 mapper_manager = MapperManager()
820830 mapper_manager.createMappers(workspace.name)
821831
822 for test_data in many_test_data:
823 raw_data = test_data['data']
824 if test_data['parent']:
825 parent = test_data['parent']['parent_factory'].create()
826 session.add(parent)
827 session.commit()
828 test_data['data']['parent'] = parent.id
829 test_data['data']['parent_type'] = test_data['parent']['parent_type']
830 test_data['expected_payload']['parent'] = parent.id
831 if obj_class in [Vuln, Credential]:
832 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
833 relational_model = test_data['factory'].create()
834 session.add(relational_model)
832 test_data = many_test_data
833 raw_data = test_data['data']
834 if test_data['parent']:
835 parent = test_data['parent']['parent_factory'].create()
836 session.add(parent)
835837 session.commit()
836 def mock_server_put(put_url, update=False, expected_response=201, **params):
837 assert put_url == '{0}/ws/test/{1}/{2}/?command_id={3}'.format(
838 _create_server_api_url(),
839 test_data['api_end_point'],
840 test_data['id'],
841 params['command_id'])
842 assert expected_response == 200
843 assert update == False
844 return {
845 'id': 1,
846 'ok': True,
847 'rev': ''
848 }
849
850 raw_data['id'] = relational_model.id
851 test_data['id'] = relational_model.id
852 monkeypatch.setattr(persistence.server.server, '_put', mock_server_put)
853 obj = obj_class(raw_data, workspace.name)
854 mapper_manager.update(obj, command.id)
855
856 @pytest.mark.parametrize("obj_class, many_test_data", GET_OBJ_DATA.items())
857 def test_find_obj_by_id(self, obj_class, many_test_data, session, monkeypatch):
858 for test_data in many_test_data:
859 persisted_obj = test_data['factory'].create()
860 session.add(persisted_obj)
861 session.commit()
862 mapper_manager = MapperManager()
863 mapper_manager.createMappers(persisted_obj.workspace.name)
864
865 def mock_unsafe_io_with_server(host, test_data, server_io_function, server_expected_response, server_url, **payload):
866 mocked_response = test_data['mocked_response']
867 assert '{0}/ws/{1}/{2}/{3}/'.format(
868 _create_server_api_url(),
869 persisted_obj.workspace.name,
870 test_data['api_end_point'],
871 persisted_obj.id) == server_url
872 return MockResponse(mocked_response, 200)
873
874 monkeypatch.setattr(persistence.server.server, '_unsafe_io_with_server', partial(mock_unsafe_io_with_server, persisted_obj, test_data))
875 found_obj = mapper_manager.find(obj_class.class_signature, persisted_obj.id)
876 serialized_obj = test_data['get_properties_function'](found_obj)
877 if obj_class not in [Command]:
878 metadata = serialized_obj.pop('metadata')
879 assert serialized_obj == test_data['serialized_expected_results']
838 test_data['data']['parent'] = parent.id
839 test_data['data']['parent_type'] = test_data['parent']['parent_type']
840 test_data['expected_payload']['parent'] = parent.id
841 if obj_class in [Vuln, Credential]:
842 test_data['expected_payload']['parent_type'] = test_data['parent']['parent_type']
843 relational_model = test_data['factory'].create()
844 session.add(relational_model)
845 session.commit()
846 def mock_server_put(put_url, update=False, expected_response=201, **params):
847 assert put_url == '{0}/ws/test/{1}/{2}/?command_id={3}'.format(
848 _create_server_api_url(),
849 test_data['api_end_point'],
850 test_data['id'],
851 params['command_id'])
852 assert expected_response == 200
853 assert update == False
854 return {
855 'id': 1,
856 'ok': True,
857 'rev': ''
858 }
859
860 raw_data['id'] = relational_model.id
861 test_data['id'] = relational_model.id
862 monkeypatch.setattr(persistence.server.server, '_put', mock_server_put)
863 obj = obj_class(raw_data, workspace.name)
864 mapper_manager.update(obj, command.id)
865
866 @pytest.mark.parametrize("many_test_data", GET_OBJ_DATA)
867 def test_find_obj_by_id(self, many_test_data, session, monkeypatch):
868 obj_class = many_test_data['class']
869 test_data = many_test_data
870 persisted_obj = test_data['factory'].create()
871 session.add(persisted_obj)
872 session.commit()
873 mapper_manager = MapperManager()
874 mapper_manager.createMappers(persisted_obj.workspace.name)
875
876 def mock_unsafe_io_with_server(host, test_data, server_io_function, server_expected_response, server_url, **payload):
877 mocked_response = test_data['mocked_response']
878 assert '{0}/ws/{1}/{2}/{3}/'.format(
879 _create_server_api_url(),
880 persisted_obj.workspace.name,
881 test_data['api_end_point'],
882 persisted_obj.id) == server_url
883 return MockResponse(mocked_response, 200)
884
885 monkeypatch.setattr(persistence.server.server, '_unsafe_io_with_server', partial(mock_unsafe_io_with_server, persisted_obj, test_data))
886 found_obj = mapper_manager.find(obj_class.class_signature, persisted_obj.id)
887 serialized_obj = test_data['get_properties_function'](found_obj)
888 if obj_class not in [Command]:
889 metadata = serialized_obj.pop('metadata')
890 assert serialized_obj == test_data['serialized_expected_results']
2929
3030 while True:
3131 sys.stdout.write(question + prompt)
32 choice = raw_input().lower()
32 try:
33 choice = raw_input().lower()
34 except NameError:
35 choice = input().lower()
3336 if default is not None and choice == '':
3437 return valid[default]
3538 elif choice in valid: