Spaces:
Running
Running
Ashhar
commited on
Commit
·
9a7b472
1
Parent(s):
53cbcf7
first working version
Browse files- .gitignore +6 -0
- .streamlit/config.toml +5 -0
- app.py +500 -0
- constants.py +71 -0
- icons/Wedges.svg +22 -0
- icons/answer.png +0 -0
- icons/balls.svg +3 -0
- icons/bars_loader.svg +9 -0
- icons/brush.gif +0 -0
- icons/check.png +0 -0
- icons/completed-task.png +0 -0
- icons/conversation.png +0 -0
- icons/correct.png +0 -0
- icons/db_loader.svg +3 -0
- icons/error.png +0 -0
- icons/google.png +0 -0
- icons/google_logo.png +0 -0
- icons/google_search.png +0 -0
- icons/magic-wand-1.png +0 -0
- icons/man.png +0 -0
- icons/ripple.svg +7 -0
- icons/settings.png +0 -0
- icons/solutions.png +0 -0
- icons/survey.png +0 -0
- requirements.txt +7 -0
- soup_dump.html +955 -0
- tools/tools.py +44 -0
- tools/webScraper.py +48 -0
- utils.py +67 -0
.gitignore
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.env
|
2 |
+
.venv
|
3 |
+
__pycache__/
|
4 |
+
.gitattributes
|
5 |
+
gradio_cached_examples/
|
6 |
+
app_*.py
|
.streamlit/config.toml
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[client]
|
2 |
+
showSidebarNavigation = false
|
3 |
+
|
4 |
+
[theme]
|
5 |
+
base="dark"
|
app.py
ADDED
@@ -0,0 +1,500 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import os
|
3 |
+
import time
|
4 |
+
import json
|
5 |
+
import re
|
6 |
+
from typing import List, Literal, TypedDict
|
7 |
+
from transformers import AutoTokenizer
|
8 |
+
from tools.tools import toolsInfo
|
9 |
+
from gradio_client import Client
|
10 |
+
import constants as C
|
11 |
+
import utils as U
|
12 |
+
|
13 |
+
from openai import OpenAI
|
14 |
+
import anthropic
|
15 |
+
from groq import Groq
|
16 |
+
|
17 |
+
from dotenv import load_dotenv
|
18 |
+
load_dotenv()
|
19 |
+
|
20 |
+
ModelType = Literal["GPT4", "CLAUDE", "LLAMA"]
|
21 |
+
ModelConfig = TypedDict("ModelConfig", {
|
22 |
+
"client": OpenAI | Groq | anthropic.Anthropic,
|
23 |
+
"model": str,
|
24 |
+
"max_context": int,
|
25 |
+
"tokenizer": AutoTokenizer
|
26 |
+
})
|
27 |
+
|
28 |
+
modelType: ModelType = os.environ.get("MODEL_TYPE") or "LLAMA"
|
29 |
+
|
30 |
+
MODEL_CONFIG: dict[ModelType, ModelConfig] = {
|
31 |
+
"GPT4": {
|
32 |
+
"client": OpenAI(api_key=os.environ.get("OPENAI_API_KEY")),
|
33 |
+
"model": "gpt-4o-mini",
|
34 |
+
"max_context": 128000,
|
35 |
+
"tokenizer": AutoTokenizer.from_pretrained("Xenova/gpt-4o")
|
36 |
+
},
|
37 |
+
"CLAUDE": {
|
38 |
+
"client": anthropic.Anthropic(api_key=os.environ.get("ANTHROPIC_API_KEY")),
|
39 |
+
"model": "claude-3-5-sonnet-20240620",
|
40 |
+
"max_context": 128000,
|
41 |
+
"tokenizer": AutoTokenizer.from_pretrained("Xenova/claude-tokenizer")
|
42 |
+
},
|
43 |
+
"LLAMA": {
|
44 |
+
"client": Groq(api_key=os.environ.get("GROQ_API_KEY")),
|
45 |
+
"model": "llama-3.1-70b-versatile",
|
46 |
+
"tools_model": "llama3-groq-70b-8192-tool-use-preview",
|
47 |
+
"max_context": 128000,
|
48 |
+
"tokenizer": AutoTokenizer.from_pretrained("Xenova/Meta-Llama-3.1-Tokenizer")
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
client = MODEL_CONFIG[modelType]["client"]
|
53 |
+
MODEL = MODEL_CONFIG[modelType]["model"]
|
54 |
+
TOOLS_MODEL = MODEL_CONFIG[modelType].get("tools_model") or MODEL
|
55 |
+
MAX_CONTEXT = MODEL_CONFIG[modelType]["max_context"]
|
56 |
+
tokenizer = MODEL_CONFIG[modelType]["tokenizer"]
|
57 |
+
|
58 |
+
isClaudeModel = modelType == "CLAUDE"
|
59 |
+
|
60 |
+
|
61 |
+
def __countTokens(text):
|
62 |
+
text = str(text)
|
63 |
+
tokens = tokenizer.encode(text, add_special_tokens=False)
|
64 |
+
return len(tokens)
|
65 |
+
|
66 |
+
|
67 |
+
st.set_page_config(
|
68 |
+
page_title="Mini Perplexity",
|
69 |
+
page_icon=C.AI_ICON,
|
70 |
+
# menu_items={"About": None}
|
71 |
+
)
|
72 |
+
|
73 |
+
|
74 |
+
def __isInvalidResponse(response: str):
|
75 |
+
if len(re.findall(r'\n((?!http)[a-z])', response)) > 3:
|
76 |
+
U.pprint("new line followed by small case char")
|
77 |
+
return True
|
78 |
+
|
79 |
+
if len(re.findall(r'\b(\w+)(\s+\1){2,}\b', response)) > 1:
|
80 |
+
U.pprint("lot of repeating words")
|
81 |
+
return True
|
82 |
+
|
83 |
+
if len(re.findall(r'\n\n', response)) > 20:
|
84 |
+
U.pprint("lots of paragraphs")
|
85 |
+
return True
|
86 |
+
|
87 |
+
if C.EXCEPTION_KEYWORD in response:
|
88 |
+
U.pprint("LLM API threw exception")
|
89 |
+
return True
|
90 |
+
|
91 |
+
# # json response without json separator
|
92 |
+
# if ('{\n "options"' in response) and (C.JSON_SEPARATOR not in response):
|
93 |
+
# return True
|
94 |
+
# if ('{\n "action"' in response) and (C.JSON_SEPARATOR not in response):
|
95 |
+
# return True
|
96 |
+
|
97 |
+
# # only options with no text
|
98 |
+
# if response.startswith(C.JSON_SEPARATOR):
|
99 |
+
# return True
|
100 |
+
|
101 |
+
|
102 |
+
def __matchingKeywordsCount(keywords: List[str], text: str):
|
103 |
+
return sum([
|
104 |
+
1 if keyword in text else 0
|
105 |
+
for keyword in keywords
|
106 |
+
])
|
107 |
+
|
108 |
+
|
109 |
+
def __getMessages():
|
110 |
+
def getContextSize():
|
111 |
+
currContextSize = __countTokens(C.SYSTEM_MSG) + __countTokens(st.session_state.messages) + 100
|
112 |
+
U.pprint(f"{currContextSize=}")
|
113 |
+
return currContextSize
|
114 |
+
|
115 |
+
while getContextSize() > MAX_CONTEXT:
|
116 |
+
U.pprint("Context size exceeded, removing first message")
|
117 |
+
st.session_state.messages.pop(0)
|
118 |
+
|
119 |
+
return st.session_state.messages
|
120 |
+
|
121 |
+
|
122 |
+
def __logLlmRequest(messagesFormatted: list):
|
123 |
+
contextSize = __countTokens(messagesFormatted)
|
124 |
+
U.pprint(f"{contextSize=} | {MODEL}")
|
125 |
+
# U.pprint(f"{messagesFormatted=}")
|
126 |
+
|
127 |
+
|
128 |
+
tools = [
|
129 |
+
toolsInfo["getGoogleSearchResults"]["schema"],
|
130 |
+
]
|
131 |
+
|
132 |
+
|
133 |
+
def __showToolResponse(toolResponseDisplay: dict):
|
134 |
+
msg = toolResponseDisplay.get("text")
|
135 |
+
icon = toolResponseDisplay.get("icon")
|
136 |
+
|
137 |
+
col1, col2 = st.columns([1, 20])
|
138 |
+
with col1:
|
139 |
+
st.image(
|
140 |
+
icon or C.TOOL_ICON,
|
141 |
+
width=30
|
142 |
+
)
|
143 |
+
with col2:
|
144 |
+
if "`" not in msg:
|
145 |
+
st.markdown(f"`{msg}`")
|
146 |
+
else:
|
147 |
+
st.markdown(msg)
|
148 |
+
|
149 |
+
|
150 |
+
def __addToolCallToMsgs(toolCall: dict):
|
151 |
+
if isClaudeModel:
|
152 |
+
st.session_state.messages.append(toolCall)
|
153 |
+
else:
|
154 |
+
st.session_state.messages.append(
|
155 |
+
{
|
156 |
+
"role": "assistant",
|
157 |
+
"tool_calls": [
|
158 |
+
{
|
159 |
+
"id": toolCall.id,
|
160 |
+
"function": {
|
161 |
+
"name": toolCall.function.name,
|
162 |
+
"arguments": toolCall.function.arguments,
|
163 |
+
},
|
164 |
+
"type": toolCall.type,
|
165 |
+
}
|
166 |
+
],
|
167 |
+
}
|
168 |
+
)
|
169 |
+
|
170 |
+
|
171 |
+
def __processToolCalls(toolCalls):
|
172 |
+
for toolCall in toolCalls:
|
173 |
+
functionName = toolCall.function.name
|
174 |
+
functionToCall = toolsInfo[functionName]["func"]
|
175 |
+
functionArgsStr = toolCall.function.arguments
|
176 |
+
U.pprint(f"{functionName=} | {functionArgsStr=}")
|
177 |
+
functionArgs = json.loads(functionArgsStr)
|
178 |
+
|
179 |
+
functionResult = functionToCall(**functionArgs)
|
180 |
+
functionResponse = functionResult.get("response")
|
181 |
+
responseDisplay = functionResult.get("display")
|
182 |
+
U.pprint(f"{functionResponse=}")
|
183 |
+
|
184 |
+
if responseDisplay:
|
185 |
+
__showToolResponse(responseDisplay)
|
186 |
+
st.session_state.toolResponseDisplay = responseDisplay
|
187 |
+
|
188 |
+
__addToolCallToMsgs(toolCall)
|
189 |
+
|
190 |
+
st.session_state.messages.append({
|
191 |
+
"role": "tool",
|
192 |
+
"tool_call_id": toolCall.id,
|
193 |
+
"name": functionName,
|
194 |
+
"content": functionResponse,
|
195 |
+
})
|
196 |
+
|
197 |
+
|
198 |
+
def __processClaudeToolCalls(toolResponse):
|
199 |
+
toolCall = toolResponse[1]
|
200 |
+
|
201 |
+
functionName = toolCall.name
|
202 |
+
functionToCall = toolsInfo[functionName]["func"]
|
203 |
+
functionArgs = toolCall.input
|
204 |
+
functionResult = functionToCall(**functionArgs)
|
205 |
+
functionResponse = functionResult.get("response")
|
206 |
+
responseDisplay = functionResult.get("display")
|
207 |
+
U.pprint(f"{functionResponse=}")
|
208 |
+
|
209 |
+
if responseDisplay:
|
210 |
+
__showToolResponse(responseDisplay)
|
211 |
+
st.session_state.toolResponseDisplay = responseDisplay
|
212 |
+
|
213 |
+
__addToolCallToMsgs({
|
214 |
+
"role": "assistant",
|
215 |
+
"content": toolResponse
|
216 |
+
})
|
217 |
+
st.session_state.messages.append({
|
218 |
+
"role": "user",
|
219 |
+
"content": [{
|
220 |
+
"type": "tool_result",
|
221 |
+
"tool_use_id": toolCall.id,
|
222 |
+
"content": functionResponse,
|
223 |
+
}],
|
224 |
+
})
|
225 |
+
|
226 |
+
|
227 |
+
def __dedupeToolCalls(toolCalls: list):
|
228 |
+
toolCallsDict = {}
|
229 |
+
for toolCall in toolCalls:
|
230 |
+
funcName = toolCall.name if isClaudeModel else toolCall.function.name
|
231 |
+
toolCallsDict[funcName] = toolCall
|
232 |
+
dedupedToolCalls = list(toolCallsDict.values())
|
233 |
+
|
234 |
+
if len(toolCalls) != len(dedupedToolCalls):
|
235 |
+
U.pprint("Deduped tool calls!")
|
236 |
+
U.pprint(f"{toolCalls=} -> {dedupedToolCalls=}")
|
237 |
+
|
238 |
+
return dedupedToolCalls
|
239 |
+
|
240 |
+
|
241 |
+
def __getClaudeTools():
|
242 |
+
claudeTools = []
|
243 |
+
for tool in tools:
|
244 |
+
funcInfo = tool["function"]
|
245 |
+
name = funcInfo["name"]
|
246 |
+
description = funcInfo["description"]
|
247 |
+
schema = funcInfo["parameters"]
|
248 |
+
claudeTools.append({
|
249 |
+
"name": name,
|
250 |
+
"description": description,
|
251 |
+
"input_schema": schema,
|
252 |
+
})
|
253 |
+
|
254 |
+
return claudeTools
|
255 |
+
|
256 |
+
|
257 |
+
def predict(model: str = None):
|
258 |
+
model = model or MODEL
|
259 |
+
|
260 |
+
messagesFormatted = []
|
261 |
+
try:
|
262 |
+
if isClaudeModel:
|
263 |
+
messagesFormatted.extend(__getMessages())
|
264 |
+
__logLlmRequest(messagesFormatted)
|
265 |
+
|
266 |
+
responseMessage = client.messages.create(
|
267 |
+
model=model,
|
268 |
+
messages=messagesFormatted,
|
269 |
+
system=C.SYSTEM_MSG,
|
270 |
+
temperature=0.5,
|
271 |
+
max_tokens=4000,
|
272 |
+
tools=__getClaudeTools()
|
273 |
+
)
|
274 |
+
|
275 |
+
responseMessageContent = responseMessage.content
|
276 |
+
responseContent = responseMessageContent[0].text
|
277 |
+
toolCalls = []
|
278 |
+
if len(responseMessageContent) > 1:
|
279 |
+
toolCalls = [responseMessageContent[1]]
|
280 |
+
else:
|
281 |
+
messagesFormatted = [{"role": "system", "content": C.SYSTEM_MSG}]
|
282 |
+
messagesFormatted.extend(__getMessages())
|
283 |
+
__logLlmRequest(messagesFormatted)
|
284 |
+
|
285 |
+
response = client.chat.completions.create(
|
286 |
+
model=model,
|
287 |
+
messages=messagesFormatted,
|
288 |
+
temperature=0.7,
|
289 |
+
max_tokens=4000,
|
290 |
+
stream=False,
|
291 |
+
tools=tools
|
292 |
+
)
|
293 |
+
responseMessage = response.choices[0].message
|
294 |
+
responseContent = responseMessage.content
|
295 |
+
|
296 |
+
if responseContent and '<function=' in responseContent:
|
297 |
+
U.pprint("Switching to TOOLS_MODEL")
|
298 |
+
return predict(TOOLS_MODEL)
|
299 |
+
toolCalls = responseMessage.tool_calls
|
300 |
+
|
301 |
+
U.pprint(f"{responseMessage=}")
|
302 |
+
U.pprint(f"{responseContent=}")
|
303 |
+
U.pprint(f"{toolCalls=}")
|
304 |
+
|
305 |
+
if toolCalls:
|
306 |
+
toolCalls = __dedupeToolCalls(toolCalls)
|
307 |
+
U.pprint("Deduping done!")
|
308 |
+
try:
|
309 |
+
if isClaudeModel:
|
310 |
+
__processClaudeToolCalls(responseMessage.content)
|
311 |
+
else:
|
312 |
+
__processToolCalls(toolCalls)
|
313 |
+
return predict()
|
314 |
+
except Exception as e:
|
315 |
+
U.pprint(e)
|
316 |
+
else:
|
317 |
+
return responseContent
|
318 |
+
except Exception as e:
|
319 |
+
U.pprint(f"LLM API Error: {e}")
|
320 |
+
return C.EXCEPTION_KEYWORD
|
321 |
+
|
322 |
+
|
323 |
+
def __generateImage(prompt: str):
|
324 |
+
fluxClient = Client("black-forest-labs/FLUX.1-schnell")
|
325 |
+
result = fluxClient.predict(
|
326 |
+
prompt=prompt,
|
327 |
+
seed=0,
|
328 |
+
randomize_seed=True,
|
329 |
+
width=1024,
|
330 |
+
height=768,
|
331 |
+
num_inference_steps=4,
|
332 |
+
api_name="/infer"
|
333 |
+
)
|
334 |
+
U.pprint(f"imageResult={result}")
|
335 |
+
return result
|
336 |
+
|
337 |
+
|
338 |
+
def __resetButtonState():
|
339 |
+
st.session_state.buttonValue = ""
|
340 |
+
|
341 |
+
|
342 |
+
if "ipAddress" not in st.session_state:
|
343 |
+
st.session_state.ipAddress = st.context.headers.get("x-forwarded-for")
|
344 |
+
|
345 |
+
if "chatHistory" not in st.session_state:
|
346 |
+
st.session_state.chatHistory = []
|
347 |
+
|
348 |
+
if "messages" not in st.session_state:
|
349 |
+
st.session_state.messages = []
|
350 |
+
|
351 |
+
if "buttonValue" not in st.session_state:
|
352 |
+
__resetButtonState()
|
353 |
+
|
354 |
+
st.session_state.toolResponseDisplay = {}
|
355 |
+
|
356 |
+
U.pprint("\n")
|
357 |
+
U.pprint("\n")
|
358 |
+
|
359 |
+
U.applyCommonStyles()
|
360 |
+
st.title("Mini Perplexity 💡")
|
361 |
+
|
362 |
+
|
363 |
+
for chat in st.session_state.chatHistory:
|
364 |
+
role = chat["role"]
|
365 |
+
content = chat["content"]
|
366 |
+
imagePath = chat.get("image")
|
367 |
+
toolResponseDisplay = chat.get("toolResponseDisplay")
|
368 |
+
avatar = C.AI_ICON if role == "assistant" else C.USER_ICON
|
369 |
+
with st.chat_message(role, avatar=avatar):
|
370 |
+
st.markdown(content)
|
371 |
+
if toolResponseDisplay:
|
372 |
+
__showToolResponse(toolResponseDisplay)
|
373 |
+
|
374 |
+
if imagePath:
|
375 |
+
st.image(imagePath)
|
376 |
+
|
377 |
+
# U.pprint(f"{st.session_state.buttonValue=}")
|
378 |
+
# U.pprint(f"{st.session_state.selectedStory=}")
|
379 |
+
# U.pprint(f"{st.session_state.startMsg=}")
|
380 |
+
|
381 |
+
if prompt := (
|
382 |
+
st.chat_input("Ask anything")
|
383 |
+
or st.session_state["buttonValue"]
|
384 |
+
):
|
385 |
+
__resetButtonState()
|
386 |
+
|
387 |
+
with st.chat_message("user", avatar=C.USER_ICON):
|
388 |
+
st.markdown(prompt)
|
389 |
+
U.pprint(f"{prompt=}")
|
390 |
+
st.session_state.chatHistory.append({"role": "user", "content": prompt })
|
391 |
+
st.session_state.messages.append({"role": "user", "content": prompt})
|
392 |
+
|
393 |
+
with st.chat_message("assistant", avatar=C.AI_ICON):
|
394 |
+
responseContainer = st.empty()
|
395 |
+
|
396 |
+
def __printAndGetResponse():
|
397 |
+
response = ""
|
398 |
+
responseContainer.image(C.TEXT_LOADER)
|
399 |
+
responseGenerator = predict()
|
400 |
+
|
401 |
+
for chunk in responseGenerator:
|
402 |
+
response += chunk
|
403 |
+
if __isInvalidResponse(response):
|
404 |
+
U.pprint(f"InvalidResponse={response}")
|
405 |
+
return
|
406 |
+
|
407 |
+
if C.JSON_SEPARATOR not in response:
|
408 |
+
responseContainer.markdown(response)
|
409 |
+
|
410 |
+
return response
|
411 |
+
|
412 |
+
response = __printAndGetResponse()
|
413 |
+
while not response:
|
414 |
+
U.pprint("Empty response. Retrying..")
|
415 |
+
time.sleep(0.7)
|
416 |
+
response = __printAndGetResponse()
|
417 |
+
|
418 |
+
U.pprint(f"{response=}")
|
419 |
+
|
420 |
+
def selectButton(optionLabel):
|
421 |
+
st.session_state["buttonValue"] = optionLabel
|
422 |
+
U.pprint(f"Selected: {optionLabel}")
|
423 |
+
|
424 |
+
rawResponse = response
|
425 |
+
responseParts = response.split(C.JSON_SEPARATOR)
|
426 |
+
|
427 |
+
jsonStr = None
|
428 |
+
if len(responseParts) > 1:
|
429 |
+
[response, jsonStr] = responseParts
|
430 |
+
|
431 |
+
imagePath = None
|
432 |
+
# imageContainer = st.empty()
|
433 |
+
# try:
|
434 |
+
# (imagePrompt, loaderText) = __getImagePromptDetails(prompt, response)
|
435 |
+
# if imagePrompt:
|
436 |
+
# imgContainer = imageContainer.container()
|
437 |
+
# imgContainer.write(
|
438 |
+
# f"""
|
439 |
+
# <div class='blinking code'>
|
440 |
+
# {loaderText}
|
441 |
+
# </div>
|
442 |
+
# """,
|
443 |
+
# unsafe_allow_html=True
|
444 |
+
# )
|
445 |
+
# # imgContainer.markdown(f"`{loaderText}`")
|
446 |
+
# imgContainer.image(C.IMAGE_LOADER)
|
447 |
+
# (imagePath, seed) = __generateImage(imagePrompt)
|
448 |
+
# imageContainer.image(imagePath)
|
449 |
+
# except Exception as e:
|
450 |
+
# U.pprint(e)
|
451 |
+
# imageContainer.empty()
|
452 |
+
|
453 |
+
toolResponseDisplay = st.session_state.toolResponseDisplay
|
454 |
+
st.session_state.chatHistory.append({
|
455 |
+
"role": "assistant",
|
456 |
+
"content": response,
|
457 |
+
"image": imagePath,
|
458 |
+
"toolResponseDisplay": toolResponseDisplay
|
459 |
+
})
|
460 |
+
st.session_state.messages.append({
|
461 |
+
"role": "assistant",
|
462 |
+
"content": rawResponse,
|
463 |
+
})
|
464 |
+
|
465 |
+
if jsonStr:
|
466 |
+
try:
|
467 |
+
json.loads(jsonStr)
|
468 |
+
jsonObj = json.loads(jsonStr)
|
469 |
+
options = jsonObj.get("options")
|
470 |
+
action = jsonObj.get("action")
|
471 |
+
|
472 |
+
if options:
|
473 |
+
for option in options:
|
474 |
+
st.button(
|
475 |
+
option["label"],
|
476 |
+
key=option["id"],
|
477 |
+
on_click=lambda label=option["label"]: selectButton(label)
|
478 |
+
)
|
479 |
+
elif action:
|
480 |
+
pass
|
481 |
+
except Exception as e:
|
482 |
+
U.pprint(e)
|
483 |
+
|
484 |
+
if "counter" not in st.session_state:
|
485 |
+
st.session_state.counter = 1
|
486 |
+
|
487 |
+
st.session_state.counter += 1
|
488 |
+
|
489 |
+
import streamlit.components.v1 as components
|
490 |
+
components.html(
|
491 |
+
f"<p>{st.session_state.counter}</p>"
|
492 |
+
"""
|
493 |
+
<script>
|
494 |
+
console.log("===== script running =====")
|
495 |
+
const input = window.parent.document.querySelector('.stChatInput');
|
496 |
+
console.log({input});
|
497 |
+
</script>
|
498 |
+
""",
|
499 |
+
height=0
|
500 |
+
)
|
constants.py
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
JSON_SEPARATOR = ">>>>"
|
2 |
+
EXCEPTION_KEYWORD = "<<EXCEPTION>>"
|
3 |
+
|
4 |
+
SYSTEM_MSG = f"""
|
5 |
+
=> Context:
|
6 |
+
|
7 |
+
|
8 |
+
-----
|
9 |
+
=> Key Points:
|
10 |
+
|
11 |
+
-----
|
12 |
+
=> Format & Syntax:
|
13 |
+
Whenever any of the below rules are satisfied, then append this exact keyword "{JSON_SEPARATOR}" to your FINAL response, and only AFTER this, append a JSON as described in the matching rule below.
|
14 |
+
Apply at most one rule at a time, the most relevant one.
|
15 |
+
Do not write anything after the JSON
|
16 |
+
|
17 |
+
- Rule 1: If your response has multiple numbered options to choose from, append JSON in this format (alway check for this rule):
|
18 |
+
```
|
19 |
+
{{
|
20 |
+
"options": [{{ "id": "1", "label": "Option 1"}}, {{ "id": "2", "label": "Option 2"}}]
|
21 |
+
}}
|
22 |
+
```
|
23 |
+
Do not write "Choose one of the options below:"
|
24 |
+
Keep options to less than 5.
|
25 |
+
|
26 |
+
|
27 |
+
------
|
28 |
+
=> Task Definition:
|
29 |
+
|
30 |
+
|
31 |
+
"""
|
32 |
+
|
33 |
+
SYSTEM_MSG = """
|
34 |
+
=> Instructions:
|
35 |
+
You're a helpful assistant who tries to answer as accurately as possible. Always add supporting details wherever possible AFTER the primary answer.
|
36 |
+
If a query is in present tense, double check if it's correct and up-to-date.
|
37 |
+
--------
|
38 |
+
|
39 |
+
=> Rules:
|
40 |
+
## Rule 1:
|
41 |
+
- If you don't know an answer or are not sure if it's correct and latest, then you search google and collect search results.
|
42 |
+
- You then read through all the google search results, and generate the answer.
|
43 |
+
- Return final answer in this format (each point should be in a new line):
|
44 |
+
{Generated Answer}
|
45 |
+
"\n-------"
|
46 |
+
"References:"
|
47 |
+
(all below citations as different bullet points, max 5 citations)
|
48 |
+
- Citation 1 with URL
|
49 |
+
- Citation 2 with URL
|
50 |
+
- ...
|
51 |
+
|
52 |
+
## Rule 2:
|
53 |
+
- If you know the answer and are sure that it's correct and up-to-date, return the answer with details supporting the answer.
|
54 |
+
--------
|
55 |
+
|
56 |
+
=> Response Format:
|
57 |
+
- Don't tell how you arrived at the answer.
|
58 |
+
"""
|
59 |
+
|
60 |
+
# """
|
61 |
+
# You can also use tools if needed.
|
62 |
+
# Always use the provided tools if you need to answer a question.
|
63 |
+
# If you think you don't know the answer, say "I don't know" or "I'm not sure".
|
64 |
+
# """
|
65 |
+
|
66 |
+
USER_ICON = "icons/man.png"
|
67 |
+
AI_ICON = "icons/survey.png"
|
68 |
+
TOOL_ICON = "icons/check.png"
|
69 |
+
IMAGE_LOADER = "icons/Wedges.svg"
|
70 |
+
TEXT_LOADER = "icons/balls.svg"
|
71 |
+
DB_LOADER = "icons/db_loader.svg"
|
icons/Wedges.svg
ADDED
icons/answer.png
ADDED
icons/balls.svg
ADDED
icons/bars_loader.svg
ADDED
icons/brush.gif
ADDED
icons/check.png
ADDED
icons/completed-task.png
ADDED
icons/conversation.png
ADDED
icons/correct.png
ADDED
icons/db_loader.svg
ADDED
icons/error.png
ADDED
icons/google.png
ADDED
icons/google_logo.png
ADDED
icons/google_search.png
ADDED
icons/magic-wand-1.png
ADDED
icons/man.png
ADDED
icons/ripple.svg
ADDED
icons/settings.png
ADDED
icons/solutions.png
ADDED
icons/survey.png
ADDED
requirements.txt
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
python-dotenv
|
2 |
+
groq
|
3 |
+
openai
|
4 |
+
transformers
|
5 |
+
gradio_client
|
6 |
+
anthropic
|
7 |
+
supabase
|
soup_dump.html
ADDED
@@ -0,0 +1,955 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html lang="en-IN">
|
3 |
+
<head>
|
4 |
+
<meta charset="utf-8"/>
|
5 |
+
<meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"/>
|
6 |
+
<title>
|
7 |
+
recent atomic bomb activity - Google Search
|
8 |
+
</title>
|
9 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
10 |
+
(function(){
|
11 |
+
document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a=c==="1"||c==="q"&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.addEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!==document.documentElement;a=a.parentElement)if(a.tagName==="A"){a=a.getAttribute("data-nohref")==="1";break a}a=!1}a&&b.preventDefault()},!0);}).call(this);(function(){window.google=window.google||{};var a=window.performance&&window.performance.timing&&"navigationStart"in window.performance.timing,b=google.stvsc&&google.stvsc.ns,c=a?b||window.performance.timing.navigationStart:void 0,d=google.stvsc&&google.stvsc.rs,f=a?d||window.performance.timing.responseStart:void 0;window.start=Date.now();var h=window,k=window.performance;k&&(c&&f&&f>c&&f<=window.start?(window.start=f,h.wsrt=f-c):k.now&&(h.wsrt=Math.floor(window.performance.now()-(google.stvsc&&google.stvsc.pno||0))));var l=function(g){g&&g.target.setAttribute("data-iml",String(Date.now()))};document.documentElement.addEventListener("load",l,!0);google.rglh=function(){document.documentElement.removeEventListener("load",l,!0)};}).call(this);(function(){window.google.erd={jsr:1,bv:2082,de:true};})();(function(){var sdo=false;var mei=10;
|
12 |
+
var g=this||self;var k,l=(k=g.mei)!=null?k:1,n,p=(n=g.sdo)!=null?n:!0,q=0,r,t=google.erd,v=t.jsr;google.ml=function(a,b,d,m,e){e=e===void 0?2:e;b&&(r=a&&a.message);d===void 0&&(d={});d.cad="ple_"+google.ple+".aple_"+google.aple;if(google.dl)return google.dl(a,e,d,!0),null;b=d;if(v<0){window.console&&console.error(a,b);if(v===-2)throw a;b=!1}else b=!a||!a.message||a.message==="Error loading script"||q>=l&&!m?!1:!0;if(!b)return null;q++;d=d||{};b=encodeURIComponent;var c="/gen_204?atyp=i&ei="+b(google.kEI);google.kEXPI&&(c+="&jexpid="+b(google.kEXPI));c+="&srcpg="+b(google.sn)+"&jsr="+b(t.jsr)+
|
13 |
+
"&bver="+b(t.bv);t.dpf&&(c+="&dpf="+b(t.dpf));var f=a.lineNumber;f!==void 0&&(c+="&line="+f);var h=a.fileName;h&&(h.indexOf("-extension:/")>0&&(e=3),c+="&script="+b(h),f&&h===window.location.href&&(f=document.documentElement.outerHTML.split("\n")[f],c+="&cad="+b(f?f.substring(0,300):"No script found.")));google.ple&&google.ple===1&&(e=2);c+="&jsel="+e;for(var u in d)c+="&",c+=b(u),c+="=",c+=b(d[u]);c=c+"&emsg="+b(a.name+": "+a.message);c=c+"&jsst="+b(a.stack||"N/A");c.length>=12288&&(c=c.substr(0,12288));a=c;m||google.log(0,"",a);return a};window.onerror=function(a,b,d,m,e){r!==a&&(a=e instanceof Error?e:Error(a),d===void 0||"lineNumber"in a||(a.lineNumber=d),b===void 0||"fileName"in a||(a.fileName=b),google.ml(a,!1,void 0,!1,a.name==="SyntaxError"||a.message.substring(0,11)==="SyntaxError"||a.message.indexOf("Script error")!==-1?3:0));r=null;p&&q>=l&&(window.onerror=null)};})();(function(){var c=[],e=0;window.ping=function(b){b.indexOf("&zx")==-1&&(b+="&zx="+Date.now());var a=new Image,d=e++;c[d]=a;a.onerror=a.onload=a.onabort=function(){delete c[d]};a.src=b};}).call(this);
|
14 |
+
</script>
|
15 |
+
<style>
|
16 |
+
a{color:#1a0dab;text-decoration:none;tap-highlight-color:rgba(0,0,0,.10)}a:visited{color:#4b11a8}a:hover{text-decoration:underline}img{border:0}html{font-family:arial,sans-serif;font-size:14px;line-height:20px;text-size-adjust:100%;color:#3c4043;word-wrap:break-word;background-color:#fff}.bz1lBb{background-color:#fff;height:93px;}.KP7LCb{background-color:#fff;padding-left:4px}.BsXmcf{position:absolute;height:1px;left:0;right:0;background-color:#dadce0}.cOl4Id{background-color:#fff}.bRsWnc{overflow:hidden}.N6RWV{height:51px}.Uv67qb{font-size:14px;line-height:20px;font-weight:bold;display:flex}.Uv67qb a,.Uv67qb span{color:#5e5e5e;height:20px;margin:4px 12px 1px;display:block;flex:none;text-align:center;}.OXXup{border-bottom:2px solid #1f1f1f}.Uv67qb .OXXup{font-weight:bold;color:#1f1f1f}a.eZt8xd:visited{color:#5e5e5e}.FElbsf{border-left:1px solid #dadce0}header article{overflow:visible}.Pg70bf{height:39px;display:box;display:flex;display:flex;width:100%}.H0PQec{position:relative;flex:1}.Pg70bf{height:26px}.hlm7Y{height:46px;margin-top:26px;border-radius:25px;width:auto;background:#fff;box-shadow:0px 2px 6px rgba(60,64,67,0.16)}.sbc{display:flex}.Pg70bf input{}.x{width:26px;color:#70757a;line-height:40px;margin-top:3px;font:27px/38px arial, sans-serif}#qdClwb{flex:0 0 auto;padding:0;height:33px;margin-top:5px;border-top-right-radius:25px;border-bottom-right-radius:25px;width:48px;background:#fff;border:0;border-left:1px solid #dadce0;background-repeat:no-repeat;background-image:url(data:image/gif;base64,R0lGODlhJAAjAOYAAP////7+//v8//b5//z9//H2//T4/9Xl/uTu/+ry/+zz/+/1/1GX+1aa+1mc+1+f+2ml+3eu/H6y/IK0/IO1/Iq5/JG9/ZG9/JfB/Z3E/Z7F/Z/F/ajL/anL/azN/bjU/rrV/b3X/sHa/sPb/sTc/sbd/svg/tDj/tfn/tzq/t/s/+bw/+ny/+vz//X5//r8/w9x+RV1+Rd2+Rh3+Rl3+Rp3+Rp4+Rt4+Rt5+Rx5+R16+R56+R96+R97+SB7+SF8+SJ8+SJ9+SN9+SR9+SV++SeA+Sh/+SmA+SqB+SuB+iuB+SyC+S2C+jKF+jKG+jSH+jWH+jWI+jqK+jyL+j+N+kSQ+kWR+kaR+keS+kmT+k6W+lOZ+1Sa+1ab+1eb+1ec+1ic+1md+1qd+1ue+1ye+12f+16f+2el+2mm+2un+26p/HSt+3au/IS2/IW3/Ia3/Iq6/JK+/JbB/JfB/JjC/JrD/KLI/anM/arN/b/Z/cHa/d/s/uLu/ufx//3+/////yH5BAUAAH8ALAAAAAAkACMAAAf4gACCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmAAJeXEUGyUEmYIBGlRENTE7S2UmohM8PVVoaw1OMlMjlwIWQUdvCoIDJV47UCiWKU02c4YFWDRnoZQXNmAuhyJHUXyVZDYViC5ZQCCVWjN4iH5hMXaVEDNyiAtXQyGVdDMPL4cmTE0qKp1Q4gODoRdfZES45MbGEwwGBh0wIwTKiksGIvjowYANHDVTcBSxUofFpQBtpOSgEePGDy4kwsAY0wLTngwS0mTQc82DER1igIkq1AGJDgc1hxLqkCSHgwRKCd1JoqNLn6iDOAjZchWroA8IvIodS7as2bOWAgEAOw==)}.sc{font-size:16px;position:absolute;top:48px;left:0;right:0;box-shadow:0 2px 5px rgba(0,0,0,.2);z-index:2;background-color:#fff}.sc>div{padding:10px 20px}.scs{background-color:#fafafa;}.noHIxc{display:block;font-size:16px;padding:0 0 0 8px;flex:1;height:35px;outline:none;border:none;width:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden;padding:4px 0 0 20px}.sbc input[type=text]{background:none}html{background-color:#fff;}body{padding:0;}body{margin:0 auto 0 156px;max-width:652px;min-width:652px;padding:0 8px}.cOl4Id{letter-spacing:-1px;text-align:center;font:22pt Futura, arial,sans-serif;font-smoothing:antialiased;padding:32px 28px 0 24px;position:absolute;left:0;top:0;height:37px}.cOl4Id span{display:inline-block}.V6gwVd{color:#4285f4}.iWkuvd{color:#ea4335}.cDrQ7{color:#fcc934}.ntlR9{color:#34a853}.tJ3Myc{-webkit-transform:rotate(-20deg);position:relative;left:-1px;display:inline-block}footer{text-align:center;margin-top:18px}footer a,footer a:visited,.smiUbb{color:#70757a}.xeDNfc{margin:0 13px;display:inline-block}#EOlPnc{margin-top:36px}#EOlPnc>div{margin:20px}.Srfpq{color:#70757a}
|
17 |
+
</style>
|
18 |
+
</head>
|
19 |
+
<body jsmodel="hspDDf ">
|
20 |
+
<header id="hdr">
|
21 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
22 |
+
(function(){
|
23 |
+
var k=this||self,l=function(a){var b=typeof a;return b=="object"&&a!=null||b=="function"},m=function(a,b){function c(){}c.prototype=b.prototype;a.l=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.s=function(d,e,f){for(var g=Array(arguments.length-2),h=2;h<arguments.length;h++)g[h-2]=arguments[h];return b.prototype[e].apply(d,g)}};var n=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(typeof a==="string")return typeof b!=="string"||b.length!=1?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};var p=function(a){return typeof a.className=="string"?a.className:a.getAttribute&&a.getAttribute("class")||""},q=function(a,b){typeof a.className=="string"?a.className=b:a.setAttribute&&a.setAttribute("class",b)},r=function(a,b){a.classList?b=a.classList.contains(b):(a=a.classList?a.classList:p(a).match(/\S+/g)||[],b=n(a,b)>=0);return b},v=function(){var a=t,b=u;a.classList?a.classList.remove(b):r(a,b)&&q(a,Array.prototype.filter.call(a.classList?a.classList:p(a).match(/\S+/g)||[],function(c){return c!=
|
24 |
+
b}).join(" "))};var w=function(a,b){this.type=a;this.target=b};w.prototype.g=function(){};var x=function(){if(!k.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{var c=function(){};k.addEventListener("test",c,b);k.removeEventListener("test",c,b)}catch(d){}return a}();var y=function(a){w.call(this,a?a.type:"");this.relatedTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var b=this.type=a.type,c=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;var d=a.relatedTarget;d||(b=="mouseover"?d=a.fromElement:b=="mouseout"&&(d=a.toElement));this.relatedTarget=d;c?(this.clientX=c.clientX!==void 0?c.clientX:c.pageX,this.clientY=c.clientY!==void 0?c.clientY:c.pageY,this.screenX=c.screenX||0,this.screenY=c.screenY||0):(this.clientX=a.clientX!==void 0?a.clientX:a.pageX,this.clientY=a.clientY!==void 0?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.keyCode=a.keyCode||0;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.pointerId=
|
25 |
+
a.pointerId||0;this.pointerType=a.pointerType;this.state=a.state;this.i=a;a.defaultPrevented&&y.l.g.call(this)}};m(y,w);y.prototype.g=function(){y.l.g.call(this);var a=this.i;a.preventDefault?a.preventDefault():a.returnValue=!1};var z="closure_listenable_"+(Math.random()*1E6|0);var A=0;var B=function(a,b,c,d,e){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.i=e;this.key=++A;this.g=this.j=!1},C=function(a){a.g=!0;a.listener=null;a.proxy=null;a.src=null;a.i=null};var D=function(a){this.src=a;this.g={};this.i=0};D.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.i++);var g;a:{for(g=0;g<a.length;++g){var h=a[g];if(!h.g&&h.listener==b&&h.capture==!!d&&h.i==e)break a}g=-1}g>-1?(b=a[g],c||(b.j=!1)):(b=new B(b,this.src,f,!!d,e),b.j=c,a.push(b));return b};var E="closure_lm_"+(Math.random()*1E6|0),F={},G=0,I=function(a,b,c,d,e){if(d&&d.once)return H(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)I(a,b[f],c,d,e);return null}c=J(c);return a&&a[z]?a.g(b,c,l(d)?!!d.capture:!!d,e):K(a,b,c,!1,d,e)},K=function(a,b,c,d,e,f){if(!b)throw Error("a");var g=l(e)?!!e.capture:!!e,h=L(a);h||(a[E]=h=new D(a));c=h.add(b,c,d,g,f);if(c.proxy)return c;d=M();c.proxy=d;d.src=a;d.listener=c;if(a.addEventListener)x||(e=g),e===void 0&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(N(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("b");G++;return c},M=function(){var a=O,b=function(c){return a.call(b.src,b.listener,c)};return b},H=function(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)H(a,b[f],c,d,e);return null}c=J(c);return a&&a[z]?a.i(b,c,l(d)?!!d.capture:!!d,e):K(a,b,c,!0,d,e)},P=function(a){if(typeof a!=="number"&&a&&!a.g){var b=a.src;if(b&&b[z])b.v(a);else{var c=a.type,d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(N(c),d):b.addListener&&b.removeListener&&b.removeListener(d);G--;if(c=L(b)){d=a.type;if(d in c.g){var e=c.g[d],f=n(e,a),g;(g=f>=0)&&Array.prototype.splice.call(e,f,1);g&&(C(a),c.g[d].length==0&&(delete c.g[d],c.i--))}c.i==0&&(c.src=null,b[E]=null)}else C(a)}}},N=function(a){return a in F?F[a]:F[a]="on"+a},O=function(a,b){if(a.g)a=!0;else{b=new y(b,this);var c=a.listener,d=a.i||a.src;a.j&&P(a);a=c.call(d,b)}return a},L=function(a){a=a[E];return a instanceof D?a:null},Q="__closure_events_fn_"+(Math.random()*1E9>>>0),J=function(a){if(typeof a==="function")return a;a[Q]||(a[Q]=function(b){return a.handleEvent(b)});return a[Q]};var R=[9],u,t=document.documentElement,S;function T(){P(S);S=H(t,"mousedown",function(){v();U()},{capture:!0})}function U(){P(S);S=I(t,"keydown",function(a){if(R.indexOf(a.keyCode)!==-1){a=t;var b=u;if(a.classList)a.classList.add(b);else if(!r(a,b)){var c=p(a);q(a,c+(c.length>0?" "+b:b))}T()}})};u="zAoYTe";U();}).call(this);
|
26 |
+
</script>
|
27 |
+
<div class="cOl4Id">
|
28 |
+
<a href="/?sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQOwgC">
|
29 |
+
<span class="V6gwVd">
|
30 |
+
G
|
31 |
+
</span>
|
32 |
+
<span class="iWkuvd">
|
33 |
+
o
|
34 |
+
</span>
|
35 |
+
<span class="cDrQ7">
|
36 |
+
o
|
37 |
+
</span>
|
38 |
+
<span class="V6gwVd">
|
39 |
+
g
|
40 |
+
</span>
|
41 |
+
<span class="ntlR9">
|
42 |
+
l
|
43 |
+
</span>
|
44 |
+
<span class="iWkuvd tJ3Myc">
|
45 |
+
e
|
46 |
+
</span>
|
47 |
+
</a>
|
48 |
+
</div>
|
49 |
+
<div class="bz1lBb">
|
50 |
+
<form class="Pg70bf hlm7Y" id="sf">
|
51 |
+
<input name="sca_esv" type="hidden" value="57cb6114f464605f"/>
|
52 |
+
<input name="sca_upv" type="hidden" value="1"/>
|
53 |
+
<input name="ie" type="hidden" value="ISO-8859-1"/>
|
54 |
+
<div class="H0PQec">
|
55 |
+
<div class="sbc esbc">
|
56 |
+
<input autocapitalize="none" autocomplete="off" class="noHIxc" name="q" spellcheck="false" type="text" value="recent atomic bomb activity"/>
|
57 |
+
<input name="oq" type="hidden"/>
|
58 |
+
<input name="aqs" type="hidden"/>
|
59 |
+
<div class="x">
|
60 |
+
×
|
61 |
+
</div>
|
62 |
+
<div class="sc">
|
63 |
+
</div>
|
64 |
+
</div>
|
65 |
+
</div>
|
66 |
+
<button id="qdClwb" type="submit">
|
67 |
+
</button>
|
68 |
+
</form>
|
69 |
+
</div>
|
70 |
+
<noscript>
|
71 |
+
<meta content="0;url=/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&gbv=1&sei=jmTxZrq_Hpac0-kPyvDOwQk" http-equiv="refresh"/>
|
72 |
+
<style>
|
73 |
+
table,div,span,p{display:none}
|
74 |
+
</style>
|
75 |
+
<div style="display:block">
|
76 |
+
Please click
|
77 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&gbv=1&sei=jmTxZrq_Hpac0-kPyvDOwQk">
|
78 |
+
here
|
79 |
+
</a>
|
80 |
+
if you are not redirected within a few seconds.
|
81 |
+
</div>
|
82 |
+
</noscript>
|
83 |
+
</header>
|
84 |
+
<div id="main">
|
85 |
+
<div>
|
86 |
+
<div class="KP7LCb">
|
87 |
+
<div class="bRsWnc">
|
88 |
+
<div class="N6RWV">
|
89 |
+
<div class="Pg70bf Uv67qb">
|
90 |
+
<span class="OXXup">
|
91 |
+
All
|
92 |
+
</span>
|
93 |
+
<a class="eZt8xd" href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&tbm=isch&source=lnms&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ_AUIBigB">
|
94 |
+
Images
|
95 |
+
</a>
|
96 |
+
<a class="eZt8xd" href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&tbm=nws&source=lnms&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ_AUIBygC">
|
97 |
+
News
|
98 |
+
</a>
|
99 |
+
<a class="eZt8xd" href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&tbm=vid&source=lnms&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ_AUICCgD">
|
100 |
+
Videos
|
101 |
+
</a>
|
102 |
+
<a href="/url?q=https://maps.google.com/maps%3Fq%3Drecent%2Batomic%2Bbomb%2Bactivity%26um%3D1%26ie%3DUTF-8%26ved%3D1t:200713%26ictx%3D111&opi=89978449&sa=U&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQiaAMCAkoBA&usg=AOvVaw3vNnNhYrELPCQronq-LHZO">
|
103 |
+
Maps
|
104 |
+
</a>
|
105 |
+
<a href="/url?q=/search%3Fq%3Drecent%2Batomic%2Bbomb%2Bactivity%26sca_esv%3D57cb6114f464605f%26sca_upv%3D1%26ie%3DUTF-8%26tbm%3Dshop%26source%3Dlnms%26ved%3D1t:200713%26ictx%3D111&opi=89978449&sa=U&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQiaAMCAooBQ&usg=AOvVaw2CFzLI_0Wa2-0WAKIi3maB">
|
106 |
+
Shopping
|
107 |
+
</a>
|
108 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&tbm=bks&source=lnms&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ_AUICygG">
|
109 |
+
Books
|
110 |
+
</a>
|
111 |
+
<div class="FElbsf">
|
112 |
+
<a href="/advanced_search" id="st-toggle" role="button" style="white-space:nowrap">
|
113 |
+
Search tools
|
114 |
+
</a>
|
115 |
+
</div>
|
116 |
+
</div>
|
117 |
+
</div>
|
118 |
+
</div>
|
119 |
+
</div>
|
120 |
+
<div class="Pg70bf wEsjbd Gx5Zad xpd EtOod pkphOe" id="st-card" style="display:none">
|
121 |
+
<style>
|
122 |
+
.wEsjbd{height:44px;white-space:nowrap}.coPU8c{height:60px;overflow-scrolling:touch;overflow-x:auto;overflow-y:hidden}.Xj2aue{height:44px;overflow:hidden}.RnNGze{margin:11px 16px}.wEsjbd div,.wEsjbd a,.wEsjbd li{outline-width:0;outline:none}
|
123 |
+
</style>
|
124 |
+
<div class="Xj2aue">
|
125 |
+
<div class="coPU8c">
|
126 |
+
<div class="RnNGze">
|
127 |
+
<style>
|
128 |
+
.PA9J5{display:inline-block}.RXaOfd,.tbcPJb{display:inline-block;height:22px;position:relative;padding-top:0;padding-bottom:0;padding-right:16px;padding-left:0;line-height:22px;cursor:pointer;text-transform:uppercase;font-size:12px;color:#70757a}.sa1toc{background:#fff;display:none;position:absolute;border:1px solid #dadce0;box-shadow:0 2px 4px rgba(0,0,0,.3);margin:0;white-space:nowrap;z-index:103;line-height:17px;padding-top:5px;padding-bottom:5px;padding-left:0}.PA9J5:hover .sa1toc{display:block}.mGSy8d a:active,.RXaOfd:active{color:#4285f4}
|
129 |
+
</style>
|
130 |
+
<div class="PA9J5">
|
131 |
+
<div class="RXaOfd" role="button" tabindex="0">
|
132 |
+
<style>
|
133 |
+
.TWMOUc{display:inline-block;padding-right:14px;white-space:nowrap}.vQYuGf{font-weight:bold}.OmTIzf{border-color:#909090 transparent;border-style:solid;border-width:4px 4px 0 4px;width:0;height:0;margin-left:-10px;top:50%;margin-top:-2px;position:absolute}.RXaOfd:active .OmTIzf{border-color:#4285f4 transparent}
|
134 |
+
</style>
|
135 |
+
<div class="TWMOUc">
|
136 |
+
Any time
|
137 |
+
</div>
|
138 |
+
<span class="OmTIzf">
|
139 |
+
</span>
|
140 |
+
</div>
|
141 |
+
<ul class="sa1toc ozatM">
|
142 |
+
<style>
|
143 |
+
.ozatM{font-size:12px;text-transform:uppercase}.ozatM .yNFsl,.ozatM li{list-style-type:none;list-style-position:outside;list-style-image:none}.yNFsl.SkUj4c,.yNFsl a{color:#70757a;text-decoration:none;padding:6px 44px 6px 14px;line-height:17px;display:block}.SkUj4c{background-image:url(//ssl.gstatic.com/ui/v1/menu/checkmark2.png);background-position:right center;background-repeat:no-repeat}.SkUj4c:active{background-color:#f8f9fa}
|
144 |
+
</style>
|
145 |
+
<li class="yNFsl SkUj4c">
|
146 |
+
<style>
|
147 |
+
.tbcPJb a{color:#70757a;text-decoration:none}
|
148 |
+
</style>
|
149 |
+
Any time
|
150 |
+
</li>
|
151 |
+
<li class="yNFsl">
|
152 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&source=lnt&tbs=qdr:h&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQpwUIDQ">
|
153 |
+
Past hour
|
154 |
+
</a>
|
155 |
+
</li>
|
156 |
+
<li class="yNFsl">
|
157 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&source=lnt&tbs=qdr:d&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQpwUIDg">
|
158 |
+
Past 24 hours
|
159 |
+
</a>
|
160 |
+
</li>
|
161 |
+
<li class="yNFsl">
|
162 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&source=lnt&tbs=qdr:w&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQpwUIDw">
|
163 |
+
Past week
|
164 |
+
</a>
|
165 |
+
</li>
|
166 |
+
<li class="yNFsl">
|
167 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&source=lnt&tbs=qdr:m&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQpwUIEA">
|
168 |
+
Past month
|
169 |
+
</a>
|
170 |
+
</li>
|
171 |
+
<li class="yNFsl">
|
172 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&source=lnt&tbs=qdr:y&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQpwUIEQ">
|
173 |
+
Past year
|
174 |
+
</a>
|
175 |
+
</li>
|
176 |
+
</ul>
|
177 |
+
</div>
|
178 |
+
<div class="PA9J5">
|
179 |
+
<div class="RXaOfd" role="button" tabindex="0">
|
180 |
+
<div class="TWMOUc">
|
181 |
+
All results
|
182 |
+
</div>
|
183 |
+
<span class="OmTIzf">
|
184 |
+
</span>
|
185 |
+
</div>
|
186 |
+
<ul class="sa1toc ozatM">
|
187 |
+
<li class="yNFsl SkUj4c">
|
188 |
+
All results
|
189 |
+
</li>
|
190 |
+
<li class="yNFsl">
|
191 |
+
<a href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&source=lnt&tbs=li:1&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQpwUIEw">
|
192 |
+
Verbatim
|
193 |
+
</a>
|
194 |
+
</li>
|
195 |
+
</ul>
|
196 |
+
</div>
|
197 |
+
</div>
|
198 |
+
</div>
|
199 |
+
</div>
|
200 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
201 |
+
(function(){var a=document.getElementById("st-toggle"),b=document.getElementById("st-card");a&&b&&a.addEventListener("click",function(c){b.style.display=b.style.display?"":"none";c.preventDefault()},!1);}).call(this);
|
202 |
+
</script>
|
203 |
+
</div>
|
204 |
+
</div>
|
205 |
+
<div class="BsXmcf">
|
206 |
+
</div>
|
207 |
+
<style>
|
208 |
+
.Gx5Zad{margin-bottom:30px;margin:0px 0px 8px;}.pkphOe{font-size:14px;line-height:22px;}.EtOod>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.EtOod>*:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.EtOod.avPKgf>*:last-child{border-bottom-left-radius:4px}.rl7ilb{display:block;clear:both}.egMi0{margin-bottom:-23px}.kCrYT{padding:16px 14px 12px}a.fdYsqf{color:#4b11a8}.sCuL3{position:absolute;width:100%;top:0;left:0;padding-top:1px;margin-bottom:-1px}.j039Wc{padding-top:28px;margin-bottom:-1px}.DnJfK{position:relative}.l97dzf{font-weight:400}.zBAuLc{line-height:normal;margin:0;padding:0}.BNeawe{white-space:pre-line;word-wrap:break-word}.vvjwJb{color:#1a0dab;font-size:20px;line-height:26px}a:visited .vvjwJb,.vvjwJb a:visited{color:#4b11a8}.vvjwJb.HrGdeb{color:#fff}a:visited .vvjwJb.HrGdeb,.vvjwJb.HrGdeb a:visited{color:rgba(255,255,255,.70)}.UPmit{font-size:14px;line-height:22px}.UPmit.HrGdeb{color:rgba(255,255,255,.70)}.UPmit.AP7Wnd{color:#202124}.lRVwie{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Ap5OSd{padding-bottom:12px}.s3v9rd{font-size:14px;line-height:22px}.s3v9rd.HrGdeb{color:#fff}.s3v9rd.AP7Wnd{color:#202124}.mSx1Ee{padding-left:48px;margin:0}.v9i61e{padding-bottom:8px}.K8tyEc{padding-bottom:12px}.mEUgP{font-size:20px;font-weight:bold;line-height:26px;color:#1f1f1f;height:14px;padding:16px 14px 0px 14px;margin:0}.FCUp0c{font-weight:bold}.nRlVm .FCUp0c{background-color:#d3e3fd;color:#040c28}.C7GS5b{margin-left:12px;display:table-cell;vertical-align:middle}.rkGIWe{padding:14px}.rxk4ae{padding-top:6px;padding-bottom:6px}.xpc .hwc,.xpx .hwx{display:none}.iIWm4b{box-sizing:border-box;min-height:48px}.fLtXsc{padding:14px;position:relative}.NtmAdb{width:40px;height:40px;overflow:hidden;margin-top:-10px;margin-bottom:-16px;margin-right:8px;border-radius:4px}.xpc .NtmAdb{display:inline-block}.xpx .NtmAdb{display:none}.Lt3Tzc{display:inline-block;padding-right:26px;color:#474747;font-size:16px}.Lym8W{width:14px;height:20px;position:relative;margin:0 auto}.xCgLUe{position:absolute;margin-top:-10px;top:50%;margin-right:-4px}.Lym8W div{position:absolute;border-left:7px solid transparent;border-right:7px solid transparent;width:0;height:0;left:0}.IyYaEd{top:7px;border-top:7px solid #70757a}.ECUHQe{top:4px;border-top:7px solid #fff}.AeQQub{bottom:7px;border-bottom:7px solid #70757a}.YCU7eb{bottom:4px;border-bottom:7px solid #fff}.v7Y0Ge{background-color:#f7f8f9;padding:10px;width:14px;height:15px;right:14px;margin-top:-18px;top:50%;position:absolute;border-radius:50%}.WZP0ub{display:inline-block;margin-left:5px;margin-top:-6px}.qxDOhb{border-radius:0}.EtOod>.qxDOhb>*:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.EtOod>.qxDOhb>*:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}.yStFkb .xpd{box-shadow:none;border-radius:16px;background-color:#f7f8f9;}.oTWEpb{padding-top:16px}.n1Qedd{overflow:hidden;text-align:center}.KMAGC{margin:0 auto;display:block}.ho0sdc{margin:0 -50%;display:inline-block}.PqksIc{font-size:16px;line-height:20px}.x54gtf{height:1px;background-color:#dadce0;margin:0 14px}.Q0HXG{height:1px;background-color:#dadce0;}.Xb5VRe{color:#1a0dab}a:visited .Xb5VRe{color:#4b11a8}.Xb5VRe.tr0dw{color:#fff}a:visited .Xb5VRe.tr0dw{color:rgba(255,255,255,.70)}.P1NWSe{display:table;width:100%;padding-top:16px;padding-bottom:16px;margin-bottom:-12px}.wOMIed{display:table-cell;vertical-align:top}.nkPlDb{vertical-align:middle}.JhFlyf{color:#3c4043;font-size:14px;text-align:center}.VQFmSd{display:block;white-space:pre-line;word-wrap:break-word}.JhFlyf.VQFmSd{line-height:22px}.f4J0H{padding:18px}.r0bn4c.tr0dw{color:rgba(255,255,255,.70)}.r0bn4c.rQMQod{color:#70757a}.gGQDvd{position:relative;padding:20px 14px 14px 14px;height:60px;}.Q71vJc{display:block;position:relative;width:100%}.kjGX2{position:absolute;vertical-align:bottom;display:inline-block;right:48px;left:0;color:#4d5156;}.Xe4YD{font-size:16px}.ieB2Dd{overflow:hidden;margin-top:-10px;margin-bottom:-16px;margin-right:8px;border-radius:4px;display:inline-block;border-radius:50%;padding:8px 7px 8px 9px;background-color:#f7f8f9;}.toMBf{position:absolute;right:0;margin-right:-8px;margin-top:-2px}.OEaqif{width:20px;height:20px;display:block}.RJI4s{vertical-align:middle}.sRN2ub,.OcpZAb{padding-top:16px;padding-bottom:12px}.MlK5cf{padding-left:14px;}.J094Fd,.OcpZAb,.ZXY5Ec,.RQNVx{padding-left:14px;padding-right:14px;}.ZXY5Ec{padding-bottom:12px}.RQNVx{padding-top:12px}.nMymef{display:flex}.G5eFlf{flex:1;display:block}.nMymef span{text-align:center}.EYqSq{margin:6px 4px 9px 0;border-radius:100%;display:inline-block;height:10px;vertical-align:middle;width:10px}.dfB0uf{color:#3c4043;font-weight:bold}.IffyKc{word-wrap:break-word}
|
209 |
+
</style>
|
210 |
+
<div>
|
211 |
+
</div>
|
212 |
+
<div>
|
213 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
214 |
+
<div class="egMi0 kCrYT">
|
215 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAsQAg" href="/url?q=https://www.trumanlibrary.gov/education/lesson-plans/re-thinking-dropping-atomic-bombs-lesson-2&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAsQAg&usg=AOvVaw2s6-UU-TgXb0CRpW9MZrwb">
|
216 |
+
<div class="DnJfK">
|
217 |
+
<div class="j039Wc">
|
218 |
+
<h3 class="zBAuLc l97dzf">
|
219 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
220 |
+
Re-Thinking the Dropping of the Atomic Bombs: Lesson 2
|
221 |
+
</div>
|
222 |
+
</h3>
|
223 |
+
</div>
|
224 |
+
<div class="sCuL3">
|
225 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
226 |
+
www.trumanlibrary.gov › education › lesson-plans › re-thinking-dropping...
|
227 |
+
</div>
|
228 |
+
</div>
|
229 |
+
</div>
|
230 |
+
</a>
|
231 |
+
</div>
|
232 |
+
<div class="kCrYT">
|
233 |
+
<div>
|
234 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
235 |
+
<div>
|
236 |
+
<div>
|
237 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
238 |
+
In this lesson students will continue with their examination of the dropping of the atomic bombs, this time focusing on varying historical perspectives.
|
239 |
+
</div>
|
240 |
+
</div>
|
241 |
+
</div>
|
242 |
+
</div>
|
243 |
+
</div>
|
244 |
+
</div>
|
245 |
+
</div>
|
246 |
+
</div>
|
247 |
+
<div data-hveid="CAAQAA">
|
248 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
249 |
+
<div class="K8tyEc">
|
250 |
+
<div class="mEUgP">
|
251 |
+
<span>
|
252 |
+
<div class="BNeawe">
|
253 |
+
<span class="FCUp0c rQMQod">
|
254 |
+
People also ask
|
255 |
+
</span>
|
256 |
+
</div>
|
257 |
+
</span>
|
258 |
+
</div>
|
259 |
+
</div>
|
260 |
+
<div>
|
261 |
+
<div class="rxk4ae xpc">
|
262 |
+
<div class="duf-h">
|
263 |
+
<div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQuk56BAgAEAI" id="tsuid_1" role="button" tabindex="0">
|
264 |
+
<div class="Lt3Tzc">
|
265 |
+
When was the last time an atomic bomb was used?
|
266 |
+
</div>
|
267 |
+
<div class="v7Y0Ge">
|
268 |
+
<div class="Lym8W xCgLUe">
|
269 |
+
<div class="AeQQub hwc">
|
270 |
+
</div>
|
271 |
+
<div class="YCU7eb hwc">
|
272 |
+
</div>
|
273 |
+
<div class="IyYaEd hwx">
|
274 |
+
</div>
|
275 |
+
<div class="ECUHQe hwx">
|
276 |
+
</div>
|
277 |
+
</div>
|
278 |
+
</div>
|
279 |
+
</div>
|
280 |
+
</div>
|
281 |
+
<div class="qxDOhb" id="accdef_1">
|
282 |
+
</div>
|
283 |
+
</div>
|
284 |
+
</div>
|
285 |
+
<div class="x54gtf">
|
286 |
+
</div>
|
287 |
+
<div>
|
288 |
+
<div class="rxk4ae xpc">
|
289 |
+
<div class="duf-h">
|
290 |
+
<div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQuk56BAgAEAk" id="tsuid_2" role="button" tabindex="0">
|
291 |
+
<div class="Lt3Tzc">
|
292 |
+
What was the most recent nuclear bomb used?
|
293 |
+
</div>
|
294 |
+
<div class="v7Y0Ge">
|
295 |
+
<div class="Lym8W xCgLUe">
|
296 |
+
<div class="AeQQub hwc">
|
297 |
+
</div>
|
298 |
+
<div class="YCU7eb hwc">
|
299 |
+
</div>
|
300 |
+
<div class="IyYaEd hwx">
|
301 |
+
</div>
|
302 |
+
<div class="ECUHQe hwx">
|
303 |
+
</div>
|
304 |
+
</div>
|
305 |
+
</div>
|
306 |
+
</div>
|
307 |
+
</div>
|
308 |
+
<div class="qxDOhb" id="accdef_3">
|
309 |
+
</div>
|
310 |
+
</div>
|
311 |
+
</div>
|
312 |
+
<div class="x54gtf">
|
313 |
+
</div>
|
314 |
+
<div>
|
315 |
+
<div class="rxk4ae xpc">
|
316 |
+
<div class="duf-h">
|
317 |
+
<div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQuk56BAgAEBA" id="tsuid_3" role="button" tabindex="0">
|
318 |
+
<div class="Lt3Tzc">
|
319 |
+
Is there an atomic bomb today?
|
320 |
+
</div>
|
321 |
+
<div class="v7Y0Ge">
|
322 |
+
<div class="Lym8W xCgLUe">
|
323 |
+
<div class="AeQQub hwc">
|
324 |
+
</div>
|
325 |
+
<div class="YCU7eb hwc">
|
326 |
+
</div>
|
327 |
+
<div class="IyYaEd hwx">
|
328 |
+
</div>
|
329 |
+
<div class="ECUHQe hwx">
|
330 |
+
</div>
|
331 |
+
</div>
|
332 |
+
</div>
|
333 |
+
</div>
|
334 |
+
</div>
|
335 |
+
<div class="qxDOhb" id="accdef_5">
|
336 |
+
</div>
|
337 |
+
</div>
|
338 |
+
</div>
|
339 |
+
<div class="x54gtf">
|
340 |
+
</div>
|
341 |
+
<div>
|
342 |
+
<div class="rxk4ae xpc">
|
343 |
+
<div class="duf-h">
|
344 |
+
<div aria-expanded="false" class="fLtXsc iIWm4b" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQuk56BAgAEBc" id="tsuid_4" role="button" tabindex="0">
|
345 |
+
<div class="Lt3Tzc">
|
346 |
+
Is Hiroshima still radioactive?
|
347 |
+
</div>
|
348 |
+
<div class="v7Y0Ge">
|
349 |
+
<div class="Lym8W xCgLUe">
|
350 |
+
<div class="AeQQub hwc">
|
351 |
+
</div>
|
352 |
+
<div class="YCU7eb hwc">
|
353 |
+
</div>
|
354 |
+
<div class="IyYaEd hwx">
|
355 |
+
</div>
|
356 |
+
<div class="ECUHQe hwx">
|
357 |
+
</div>
|
358 |
+
</div>
|
359 |
+
</div>
|
360 |
+
</div>
|
361 |
+
</div>
|
362 |
+
<div class="qxDOhb" id="accdef_7">
|
363 |
+
</div>
|
364 |
+
</div>
|
365 |
+
</div>
|
366 |
+
</div>
|
367 |
+
</div>
|
368 |
+
<div>
|
369 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
370 |
+
<div class="egMi0 kCrYT">
|
371 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAoQAg" href="/url?q=https://inquirygroup.org/history-lessons/atomic-bomb&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAoQAg&usg=AOvVaw3lYe4tPYrqV3aMfweOMx_H">
|
372 |
+
<div class="DnJfK">
|
373 |
+
<div class="j039Wc">
|
374 |
+
<h3 class="zBAuLc l97dzf">
|
375 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
376 |
+
The Atomic Bomb | Digital Inquiry Group
|
377 |
+
</div>
|
378 |
+
</h3>
|
379 |
+
</div>
|
380 |
+
<div class="sCuL3">
|
381 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
382 |
+
inquirygroup.org › history-lessons › atomic-bomb
|
383 |
+
</div>
|
384 |
+
</div>
|
385 |
+
</div>
|
386 |
+
</a>
|
387 |
+
</div>
|
388 |
+
<div class="kCrYT">
|
389 |
+
<div>
|
390 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
391 |
+
<div>
|
392 |
+
<div>
|
393 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
394 |
+
In this lesson plan, students read four different accounts of the bombings and must decide for themselves how we should remember the dropping of the atomic ...
|
395 |
+
</div>
|
396 |
+
</div>
|
397 |
+
</div>
|
398 |
+
</div>
|
399 |
+
</div>
|
400 |
+
</div>
|
401 |
+
</div>
|
402 |
+
</div>
|
403 |
+
<div>
|
404 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
405 |
+
<div class="egMi0 kCrYT">
|
406 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAkQAg" href="/url?q=https://www.aljazeera.com/tag/nuclear-weapons/&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAkQAg&usg=AOvVaw1GeLiii9L_bWiZf2oTtB5H">
|
407 |
+
<div class="DnJfK">
|
408 |
+
<div class="j039Wc">
|
409 |
+
<h3 class="zBAuLc l97dzf">
|
410 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
411 |
+
Nuclear Weapons | Today's latest from Al Jazeera
|
412 |
+
</div>
|
413 |
+
</h3>
|
414 |
+
</div>
|
415 |
+
<div class="sCuL3">
|
416 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
417 |
+
www.aljazeera.com › tag › nuclear-weapons
|
418 |
+
</div>
|
419 |
+
</div>
|
420 |
+
</div>
|
421 |
+
</a>
|
422 |
+
</div>
|
423 |
+
<div class="kCrYT">
|
424 |
+
<div>
|
425 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
426 |
+
<div>
|
427 |
+
<div>
|
428 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
429 |
+
North Korea fires short-range ballistic missiles for second time in a week · From: NewsFeed · North Korea reveals first photos of uranium enrichment facility.
|
430 |
+
</div>
|
431 |
+
</div>
|
432 |
+
</div>
|
433 |
+
</div>
|
434 |
+
</div>
|
435 |
+
</div>
|
436 |
+
</div>
|
437 |
+
</div>
|
438 |
+
<div>
|
439 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
440 |
+
<div class="egMi0 kCrYT">
|
441 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAIQAg" href="/url?q=https://www.britannica.com/event/atomic-bombings-of-Hiroshima-and-Nagasaki&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAIQAg&usg=AOvVaw0JhoSqd8fdJkhdiEw1n042">
|
442 |
+
<div class="DnJfK">
|
443 |
+
<div class="j039Wc">
|
444 |
+
<h3 class="zBAuLc l97dzf">
|
445 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
446 |
+
Atomic bombings of Hiroshima and Nagasaki - Britannica
|
447 |
+
</div>
|
448 |
+
</h3>
|
449 |
+
</div>
|
450 |
+
<div class="sCuL3">
|
451 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
452 |
+
www.britannica.com › World History › The Modern World
|
453 |
+
</div>
|
454 |
+
</div>
|
455 |
+
</div>
|
456 |
+
</a>
|
457 |
+
</div>
|
458 |
+
<div class="kCrYT">
|
459 |
+
<div>
|
460 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
461 |
+
<div>
|
462 |
+
<div>
|
463 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
464 |
+
<span class="r0bn4c rQMQod">
|
465 |
+
25 Aug 2024
|
466 |
+
</span>
|
467 |
+
<span class="r0bn4c rQMQod">
|
468 |
+
·
|
469 |
+
</span>
|
470 |
+
The atomic bombings of Hiroshima and Nagasaki were American bombing raids on the Japanese cities of Hiroshima and Nagasaki during World War II, ...
|
471 |
+
</div>
|
472 |
+
</div>
|
473 |
+
</div>
|
474 |
+
</div>
|
475 |
+
</div>
|
476 |
+
</div>
|
477 |
+
</div>
|
478 |
+
</div>
|
479 |
+
<div>
|
480 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
481 |
+
<div class="egMi0 kCrYT">
|
482 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAgQAg" href="/url?q=https://www.cnn.com/2023/09/22/asia/nuclear-testing-china-russia-us-exclusive-intl-hnk-ml/index.html&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAgQAg&usg=AOvVaw3Y5wt_xAGha6O1gwHKREhw">
|
483 |
+
<div class="DnJfK">
|
484 |
+
<div class="j039Wc">
|
485 |
+
<h3 class="zBAuLc l97dzf">
|
486 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
487 |
+
Exclusive: Satellite images show increased activity at nuclear test ...
|
488 |
+
</div>
|
489 |
+
</h3>
|
490 |
+
</div>
|
491 |
+
<div class="sCuL3">
|
492 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
493 |
+
www.cnn.com › asia › nuclear-testing-china-russia-us-exclusive-intl-hnk-ml
|
494 |
+
</div>
|
495 |
+
</div>
|
496 |
+
</div>
|
497 |
+
</a>
|
498 |
+
</div>
|
499 |
+
<div class="kCrYT">
|
500 |
+
<div>
|
501 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
502 |
+
<div>
|
503 |
+
<div>
|
504 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
505 |
+
<span class="r0bn4c rQMQod">
|
506 |
+
23 Sept 2023
|
507 |
+
</span>
|
508 |
+
<span class="r0bn4c rQMQod">
|
509 |
+
·
|
510 |
+
</span>
|
511 |
+
Russia, the United States and China have all built new facilities and dug new tunnels at their nuclear test sites in recent years, satellite images obtained ...
|
512 |
+
</div>
|
513 |
+
</div>
|
514 |
+
</div>
|
515 |
+
</div>
|
516 |
+
</div>
|
517 |
+
</div>
|
518 |
+
</div>
|
519 |
+
</div>
|
520 |
+
<div>
|
521 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
522 |
+
<div class="egMi0 kCrYT">
|
523 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAYQAg" href="/url?q=https://www.getty.edu/education/teachers/classroom_resources/curricula/headlines/lesson03.html&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAYQAg&usg=AOvVaw0Imw-Z5ZnnCrBO0VKkoIEv">
|
524 |
+
<div class="DnJfK">
|
525 |
+
<div class="j039Wc">
|
526 |
+
<h3 class="zBAuLc l97dzf">
|
527 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
528 |
+
Debating the Bomb (Education at the Getty)
|
529 |
+
</div>
|
530 |
+
</h3>
|
531 |
+
</div>
|
532 |
+
<div class="sCuL3">
|
533 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
534 |
+
www.getty.edu › classroom_resources › curricula › headlines › lesson03
|
535 |
+
</div>
|
536 |
+
</div>
|
537 |
+
</div>
|
538 |
+
</a>
|
539 |
+
</div>
|
540 |
+
<div class="kCrYT">
|
541 |
+
<div>
|
542 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
543 |
+
<div>
|
544 |
+
<div>
|
545 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
546 |
+
In this lesson students research how the development of the atomic bomb affected people both during and since World War II.
|
547 |
+
</div>
|
548 |
+
</div>
|
549 |
+
</div>
|
550 |
+
</div>
|
551 |
+
</div>
|
552 |
+
</div>
|
553 |
+
</div>
|
554 |
+
</div>
|
555 |
+
<div>
|
556 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
557 |
+
<div class="egMi0 kCrYT">
|
558 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAUQAg" href="/url?q=https://www.khanacademy.org/humanities/us-history/rise-to-world-power/us-wwii/a/the-manhattan-project-and-the-atomic-bomb&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAUQAg&usg=AOvVaw0qVT5B8vfFNhaEIl8FIHLC">
|
559 |
+
<div class="DnJfK">
|
560 |
+
<div class="j039Wc">
|
561 |
+
<h3 class="zBAuLc l97dzf">
|
562 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
563 |
+
The atomic bomb & The Manhattan Project (article) - Khan Academy
|
564 |
+
</div>
|
565 |
+
</h3>
|
566 |
+
</div>
|
567 |
+
<div class="sCuL3">
|
568 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
569 |
+
www.khanacademy.org › us-history › rise-to-world-power › us-wwii › the-...
|
570 |
+
</div>
|
571 |
+
</div>
|
572 |
+
</div>
|
573 |
+
</a>
|
574 |
+
</div>
|
575 |
+
<div class="kCrYT">
|
576 |
+
<div>
|
577 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
578 |
+
<div>
|
579 |
+
<div>
|
580 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
581 |
+
The United States detonated two atomic bombs over the Japanese cities of Hiroshima and Nagasaki in August 1945, killing 210,000 people—children, women, and men.
|
582 |
+
</div>
|
583 |
+
</div>
|
584 |
+
</div>
|
585 |
+
</div>
|
586 |
+
</div>
|
587 |
+
</div>
|
588 |
+
</div>
|
589 |
+
</div>
|
590 |
+
<div>
|
591 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
592 |
+
<div class="egMi0 kCrYT">
|
593 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAQQAg" href="/url?q=https://study.com/academy/popular/atomic-bomb-lesson-plan.html&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAQQAg&usg=AOvVaw0EO5XbQvOten-bnmqodsy0">
|
594 |
+
<div class="DnJfK">
|
595 |
+
<div class="j039Wc">
|
596 |
+
<h3 class="zBAuLc l97dzf">
|
597 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
598 |
+
Atomic Bomb Lesson Plan | Study.com
|
599 |
+
</div>
|
600 |
+
</h3>
|
601 |
+
</div>
|
602 |
+
<div class="sCuL3">
|
603 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
604 |
+
study.com › ... › World History Since 1900: Lesson Plans & Resources
|
605 |
+
</div>
|
606 |
+
</div>
|
607 |
+
</div>
|
608 |
+
</a>
|
609 |
+
</div>
|
610 |
+
<div class="kCrYT">
|
611 |
+
<div>
|
612 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
613 |
+
<div>
|
614 |
+
<div>
|
615 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
616 |
+
Use a Study.com video about the history of the atomic bomb to support your instruction of the unit. Highlight and discuss key events and their corresponding ...
|
617 |
+
</div>
|
618 |
+
</div>
|
619 |
+
</div>
|
620 |
+
</div>
|
621 |
+
</div>
|
622 |
+
</div>
|
623 |
+
</div>
|
624 |
+
</div>
|
625 |
+
<div>
|
626 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
627 |
+
<div class="egMi0 kCrYT">
|
628 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAEQAg" href="/url?q=https://www.armscontrol.org/factsheets/nuclear-weapons-who-has-what-glance&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAEQAg&usg=AOvVaw1vfwNwy3YxB-cHdsrg9T4R">
|
629 |
+
<div class="DnJfK">
|
630 |
+
<div class="j039Wc">
|
631 |
+
<h3 class="zBAuLc l97dzf">
|
632 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
633 |
+
Nuclear Weapons: Who Has What at a Glance
|
634 |
+
</div>
|
635 |
+
</h3>
|
636 |
+
</div>
|
637 |
+
<div class="sCuL3">
|
638 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
639 |
+
www.armscontrol.org › factsheets › nuclear-weapons-who-has-what-glance
|
640 |
+
</div>
|
641 |
+
</div>
|
642 |
+
</div>
|
643 |
+
</a>
|
644 |
+
</div>
|
645 |
+
<div class="kCrYT">
|
646 |
+
<div>
|
647 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
648 |
+
<div>
|
649 |
+
<div>
|
650 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
651 |
+
According to the March 2023 New START declaration, the United States deploys 1,419 strategic nuclear warheads on 662 strategic delivery systems ( ...
|
652 |
+
</div>
|
653 |
+
</div>
|
654 |
+
</div>
|
655 |
+
</div>
|
656 |
+
</div>
|
657 |
+
</div>
|
658 |
+
</div>
|
659 |
+
</div>
|
660 |
+
<div>
|
661 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
662 |
+
<div class="egMi0 kCrYT">
|
663 |
+
<a data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAcQAg" href="/url?q=https://www.upcountryhistory.org/wp-content/uploads/2017/08/WWII-The-Atomic-Bomb-Classroom-Activity.pdf&sa=U&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAcQAg&usg=AOvVaw00gi6k4s8VS7u0L8CBcAAN">
|
664 |
+
<div class="DnJfK">
|
665 |
+
<div class="j039Wc">
|
666 |
+
<h3 class="zBAuLc l97dzf">
|
667 |
+
<div class="BNeawe vvjwJb AP7Wnd">
|
668 |
+
[PDF] Classroom Activity WWII: The Atomic Bomb
|
669 |
+
</div>
|
670 |
+
</h3>
|
671 |
+
</div>
|
672 |
+
<div class="sCuL3">
|
673 |
+
<div class="BNeawe UPmit AP7Wnd lRVwie">
|
674 |
+
www.upcountryhistory.org › wp-content › uploads › 2017/08 › WWI...
|
675 |
+
</div>
|
676 |
+
</div>
|
677 |
+
</div>
|
678 |
+
</a>
|
679 |
+
</div>
|
680 |
+
<div class="kCrYT">
|
681 |
+
<div>
|
682 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
683 |
+
<div>
|
684 |
+
<div>
|
685 |
+
<div class="BNeawe s3v9rd AP7Wnd">
|
686 |
+
Discuss the role of the atomic bomb in ending the war in the Pacific. Explain that the making of the bomb took years, and thousands of people. • Ask students to ...
|
687 |
+
</div>
|
688 |
+
</div>
|
689 |
+
</div>
|
690 |
+
</div>
|
691 |
+
</div>
|
692 |
+
</div>
|
693 |
+
</div>
|
694 |
+
</div>
|
695 |
+
<div>
|
696 |
+
<div class="Gx5Zad xpd EtOod pkphOe">
|
697 |
+
<div class="K8tyEc">
|
698 |
+
<div class="mEUgP">
|
699 |
+
<span>
|
700 |
+
<div class="BNeawe">
|
701 |
+
People also search for
|
702 |
+
</div>
|
703 |
+
</span>
|
704 |
+
</div>
|
705 |
+
</div>
|
706 |
+
<div>
|
707 |
+
<div class="gGQDvd iIWm4b">
|
708 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAI" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Recent+atomic+bomb+activity+today&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAI">
|
709 |
+
<accordion-entry-search-icon class="toMBf">
|
710 |
+
<span>
|
711 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_1" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
712 |
+
</span>
|
713 |
+
</accordion-entry-search-icon>
|
714 |
+
<div class="kjGX2">
|
715 |
+
<span class="Xe4YD">
|
716 |
+
<div class="BNeawe lRVwie">
|
717 |
+
Recent atomic bomb activity today
|
718 |
+
</div>
|
719 |
+
</span>
|
720 |
+
</div>
|
721 |
+
</a>
|
722 |
+
</div>
|
723 |
+
</div>
|
724 |
+
<div class="x54gtf">
|
725 |
+
</div>
|
726 |
+
<div>
|
727 |
+
<div class="gGQDvd iIWm4b">
|
728 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAQ" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Atomic+bomb+lesson+plan+PDF&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAQ">
|
729 |
+
<accordion-entry-search-icon class="toMBf">
|
730 |
+
<span>
|
731 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_3" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
732 |
+
</span>
|
733 |
+
</accordion-entry-search-icon>
|
734 |
+
<div class="kjGX2">
|
735 |
+
<span class="Xe4YD">
|
736 |
+
<div class="BNeawe lRVwie">
|
737 |
+
Atomic bomb lesson plan PDF
|
738 |
+
</div>
|
739 |
+
</span>
|
740 |
+
</div>
|
741 |
+
</a>
|
742 |
+
</div>
|
743 |
+
</div>
|
744 |
+
<div class="x54gtf">
|
745 |
+
</div>
|
746 |
+
<div>
|
747 |
+
<div class="gGQDvd iIWm4b">
|
748 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAY" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Atomic+bomb+debate+questions&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAY">
|
749 |
+
<accordion-entry-search-icon class="toMBf">
|
750 |
+
<span>
|
751 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_5" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
752 |
+
</span>
|
753 |
+
</accordion-entry-search-icon>
|
754 |
+
<div class="kjGX2">
|
755 |
+
<span class="Xe4YD">
|
756 |
+
<div class="BNeawe lRVwie">
|
757 |
+
Atomic bomb debate questions
|
758 |
+
</div>
|
759 |
+
</span>
|
760 |
+
</div>
|
761 |
+
</a>
|
762 |
+
</div>
|
763 |
+
</div>
|
764 |
+
<div class="x54gtf">
|
765 |
+
</div>
|
766 |
+
<div>
|
767 |
+
<div class="gGQDvd iIWm4b">
|
768 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAg" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Atomic+bomb+lesson+plan+middle+School&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAg">
|
769 |
+
<accordion-entry-search-icon class="toMBf">
|
770 |
+
<span>
|
771 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_7" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
772 |
+
</span>
|
773 |
+
</accordion-entry-search-icon>
|
774 |
+
<div class="kjGX2">
|
775 |
+
<span class="Xe4YD">
|
776 |
+
<div class="BNeawe lRVwie">
|
777 |
+
Atomic bomb lesson plan middle School
|
778 |
+
</div>
|
779 |
+
</span>
|
780 |
+
</div>
|
781 |
+
</a>
|
782 |
+
</div>
|
783 |
+
</div>
|
784 |
+
<div class="x54gtf">
|
785 |
+
</div>
|
786 |
+
<div>
|
787 |
+
<div class="gGQDvd iIWm4b">
|
788 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAo" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Atomic+bomb+lesson+plan+High+School&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAo">
|
789 |
+
<accordion-entry-search-icon class="toMBf">
|
790 |
+
<span>
|
791 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_9" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
792 |
+
</span>
|
793 |
+
</accordion-entry-search-icon>
|
794 |
+
<div class="kjGX2">
|
795 |
+
<span class="Xe4YD">
|
796 |
+
<div class="BNeawe lRVwie">
|
797 |
+
Atomic bomb lesson plan High School
|
798 |
+
</div>
|
799 |
+
</span>
|
800 |
+
</div>
|
801 |
+
</a>
|
802 |
+
</div>
|
803 |
+
</div>
|
804 |
+
<div class="x54gtf">
|
805 |
+
</div>
|
806 |
+
<div>
|
807 |
+
<div class="gGQDvd iIWm4b">
|
808 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAw" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Atomic+bomb+worksheet+pdf&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEAw">
|
809 |
+
<accordion-entry-search-icon class="toMBf">
|
810 |
+
<span>
|
811 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_11" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
812 |
+
</span>
|
813 |
+
</accordion-entry-search-icon>
|
814 |
+
<div class="kjGX2">
|
815 |
+
<span class="Xe4YD">
|
816 |
+
<div class="BNeawe lRVwie">
|
817 |
+
Atomic bomb worksheet pdf
|
818 |
+
</div>
|
819 |
+
</span>
|
820 |
+
</div>
|
821 |
+
</a>
|
822 |
+
</div>
|
823 |
+
</div>
|
824 |
+
<div class="x54gtf">
|
825 |
+
</div>
|
826 |
+
<div>
|
827 |
+
<div class="gGQDvd iIWm4b">
|
828 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEA4" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Nuclear+bomb+News+today&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEA4">
|
829 |
+
<accordion-entry-search-icon class="toMBf">
|
830 |
+
<span>
|
831 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_13" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
832 |
+
</span>
|
833 |
+
</accordion-entry-search-icon>
|
834 |
+
<div class="kjGX2">
|
835 |
+
<span class="Xe4YD">
|
836 |
+
<div class="BNeawe lRVwie">
|
837 |
+
Nuclear bomb News today
|
838 |
+
</div>
|
839 |
+
</span>
|
840 |
+
</div>
|
841 |
+
</a>
|
842 |
+
</div>
|
843 |
+
</div>
|
844 |
+
<div class="x54gtf">
|
845 |
+
</div>
|
846 |
+
<div>
|
847 |
+
<div class="gGQDvd iIWm4b">
|
848 |
+
<a class="Q71vJc" data-ved="2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEBA" href="/search?sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&q=Latest+nuclear+bomb+attack&sa=X&ved=2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ1QJ6BAgDEBA">
|
849 |
+
<accordion-entry-search-icon class="toMBf">
|
850 |
+
<span>
|
851 |
+
<img alt="" class="OEaqif" data-deferred="1" id="dimg_15" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" style="max-width:20px;max-height:20px"/>
|
852 |
+
</span>
|
853 |
+
</accordion-entry-search-icon>
|
854 |
+
<div class="kjGX2">
|
855 |
+
<span class="Xe4YD">
|
856 |
+
<div class="BNeawe lRVwie">
|
857 |
+
Latest nuclear bomb attack
|
858 |
+
</div>
|
859 |
+
</span>
|
860 |
+
</div>
|
861 |
+
</a>
|
862 |
+
</div>
|
863 |
+
</div>
|
864 |
+
</div>
|
865 |
+
</div>
|
866 |
+
<footer>
|
867 |
+
<div>
|
868 |
+
<div class="Gx5Zad xpd EtOod pkphOe OcpZAb">
|
869 |
+
<div class="nMymef Va3FIb lVm3ye">
|
870 |
+
<a aria-label="Next page" class="nBDE1b G5eFlf" href="/search?q=recent+atomic+bomb+activity&sca_esv=57cb6114f464605f&sca_upv=1&ie=UTF-8&ei=jmTxZrq_Hpac0-kPyvDOwQk&start=10&sa=N">
|
871 |
+
Next >
|
872 |
+
</a>
|
873 |
+
</div>
|
874 |
+
</div>
|
875 |
+
</div>
|
876 |
+
<div id="EOlPnc">
|
877 |
+
<div class="Srfpq">
|
878 |
+
<div>
|
879 |
+
<span class="EYqSq unknown_loc">
|
880 |
+
</span>
|
881 |
+
<span class="dfB0uf">
|
882 |
+
560068, Bengaluru, Karnataka
|
883 |
+
</span>
|
884 |
+
</div>
|
885 |
+
<span>
|
886 |
+
From your IP address
|
887 |
+
</span>
|
888 |
+
<span>
|
889 |
+
-
|
890 |
+
</span>
|
891 |
+
<a aria-label="Learn more about this location" class="IffyKc" href="/url?q=https://support.google.com/websearch%3Fp%3Dws_settings_location%26hl%3Den-IN&opi=89978449&sa=U&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQty4Ibw&usg=AOvVaw2Bn2cc39SOZjNLrO-PeFtL" tabindex="0">
|
892 |
+
Learn more
|
893 |
+
</a>
|
894 |
+
</div>
|
895 |
+
<div>
|
896 |
+
<a href="/url?q=https://accounts.google.com/ServiceLogin%3Fcontinue%3Dhttps://www.google.com/search%253Fq%253Drecent%252Batomic%252Bbomb%252Bactivity%26hl%3Den&opi=89978449&sa=U&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQxs8CCHA&usg=AOvVaw3aIDLHqHeOryQ3orV8hovN">
|
897 |
+
Sign in
|
898 |
+
</a>
|
899 |
+
</div>
|
900 |
+
<div>
|
901 |
+
<a class="xeDNfc" href="https://www.google.com/preferences?hl=en-IN&fg=1&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQ5fUCCHE">
|
902 |
+
Settings
|
903 |
+
</a>
|
904 |
+
<a class="xeDNfc" href="https://policies.google.com/privacy?hl=en-IN&fg=1">
|
905 |
+
Privacy
|
906 |
+
</a>
|
907 |
+
<a class="xeDNfc" href="https://policies.google.com/terms?hl=en-IN&fg=1">
|
908 |
+
Terms
|
909 |
+
</a>
|
910 |
+
<a class="xeDNfc" href="/setprefs?hl=en&prev=https://www.google.com/search?q%3Drecent%2Batomic%2Bbomb%2Bactivity%26pccc%3D1&sig=0_ormdN6sJC_ZeFAxY6kumZhU2dqo%3D&cs=2&sa=X&ved=0ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQjcAJCHI">
|
911 |
+
Dark theme: Off
|
912 |
+
</a>
|
913 |
+
</div>
|
914 |
+
</div>
|
915 |
+
</footer>
|
916 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
917 |
+
(function(){var hl='en-IN';(function(){var g=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}},k=typeof Object.defineProperties=="function"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a},l=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("a");},m=l(this),n=function(a,b){if(b)a:{var c=m;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&b!=null&&k(c,a,{configurable:!0,writable:!0,value:b})}};n("Symbol",function(a){if(a)return a;var b=function(h,f){this.g=h;k(this,"description",{configurable:!0,writable:!0,value:f})};b.prototype.toString=function(){return this.g};var c="jscomp_symbol_"+(Math.random()*1E9>>>0)+"_",d=0,e=function(h){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(h||"")+"_"+d++,h)};return e});n("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=m[b[c]];typeof d==="function"&&typeof d.prototype[a]!="function"&&k(d.prototype,a,{configurable:!0,writable:!0,value:function(){return p(g(this))}})}return a});var p=function(a){a={next:a};a[Symbol.iterator]=function(){return this};return a},r=function(a){return q(a,a)},q=function(a,b){a.raw=b;Object.freeze&&(Object.freeze(a),Object.freeze(b));return a},t=function(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b};n("globalThis",function(a){return a||m});var u=function(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var h=c++;return{value:b(h,a[h]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e};n("Array.prototype.entries",function(a){return a?a:function(){return u(this,function(b,c){return[b,c]})}});n("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&c.push([d,b[d]]);return c}});
|
918 |
+
var v=globalThis.trustedTypes,x;function y(){var a=null;if(!v)return a;try{var b=function(c){return c};a=v.createPolicy("goog#html",{createHTML:b,createScript:b,createScriptURL:b})}catch(c){}return a}function z(){x===void 0&&(x=y());return x};var A=function(a){this.g=a};A.prototype.toString=function(){return this.g+""};function B(a){var b=z();return new A(b?b.createScriptURL(a):a)}function C(a){if(a instanceof A)return a.g;throw Error("e");};var D=function(a){this.g=a};D.prototype.toString=function(){return this.g+""};function E(a){var b=t.apply(1,arguments);if(b.length===0)return B(a[0]);for(var c=a[0],d=0;d<b.length;d++)c+=encodeURIComponent(b[d])+a[d+1];return B(c)}function F(a,b,c,d){function e(f,w){f!=null&&(Array.isArray(f)?f.forEach(function(Z){return e(Z,w)}):(b+=h+encodeURIComponent(w)+"="+encodeURIComponent(f),h="&"))}var h=b.length?"&":"?";d.constructor===Object&&(d=Object.entries(d));Array.isArray(d)?d.forEach(function(f){return e(f[1],f[0])}):d.forEach(e);return B(a+b+c)};function aa(a,b){if(a.nodeType===1){var c=a.tagName;if(c==="SCRIPT"||c==="STYLE")throw Error("e");}if(b instanceof D)b=b.g;else throw Error("e");a.innerHTML=b};function ba(a){a=a===null?"null":a===void 0?"undefined":a;var b=z();return new D(b?b.createHTML(a):a)};
|
919 |
+
var ca=r(["/complete/search"]),G=document.querySelector(".l"),H=document.querySelector("#sf"),I=H.querySelector(".sbc"),J=H.querySelector("[type=text]"),K=H.querySelector("[type=submit]"),L=H.querySelector(".sc"),M=H.querySelector(".x"),N=J.value,O=[],P=-1,Q=N,R,S,T;N||(M&&(M.style.display="none"),U(!1));function U(a){if(I.classList.contains("esbc")){var b=I.classList.contains("chsbc"),c=I.classList.contains("rtlsbc");a&&(L.style.display="block",b?(H.style.borderRadius="20px 20px 0 0",L.style.borderBottom="1px solid #DFE1E5",K.style.borderRadius=c?"20px 0 0 0":"0 20px 0 0"):I.style.borderRadius=c?"0 8px 0 0":"8px 0 0 0");a||(L.style.display="none",b?(H.style.borderRadius="20px",L.style.borderBottom="none",K.style.borderRadius=c?"20px 0 0 20px":"0 20px 20px 0"):I.style.borderRadius=c?"0 8px 8px 0":"8px 0 0 8px")}}function V(){H.querySelector("[name=oq]").value=Q;H.querySelector("[name=aqs]").value="heirloom-srp."+(P>=0?P:"")+"."+(O.length>0?"0l"+O.length:"")}
|
920 |
+
function W(){R=null;if(S){var a={client:"heirloom-srp",hl:hl,json:"t",callback:"hS",q:S};typeof ds!=="undefined"&&ds&&(a.ds=ds);var b=document;var c="SCRIPT";b.contentType==="application/xhtml+xml"&&(c=c.toLowerCase());c=b.createElement(c);b=E(ca);var d=C(b).toString();var e=d.split(/[?#]/),h=/[?]/.test(d)?"?"+e[1]:"";b=e[0];d=/[#]/.test(d)?"#"+(h?e[2]:e[1]):"";a=F(b,h,d,a);c.src=C(a);var f,w;(f=(a=(w=(f=(c.ownerDocument&&c.ownerDocument.defaultView||window).document).querySelector)==null?void 0:w.call(f,"script[nonce]"))?a.nonce||a.getAttribute("nonce")||"":"")&&c.setAttribute("nonce",f);document.body.appendChild(c);S=null;R=setTimeout(W,500)}}function X(){for(;L.firstChild;)L.removeChild(L.firstChild);O=[];P=-1;U(!1)}function Y(){var a=L.querySelector(".scs");a&&(a.className="");P>=0?(a=L.childNodes[P],a.className="scs",N=a.textContent):N=Q;J.value=N}J.addEventListener("focus",function(){G&&(G.style.display="none")},!1);J.addEventListener("blur",function(){X();G&&(G.style.display="")},!1);J.addEventListener("keyup",function(a){N=J.value;T=!1;a.which===13?V():a.which===27?(X(),G&&(G.style.display=""),N=Q,J.value=N):a.which===40?(P++,P>=O.length&&(P=-1),Y()):a.which===38?(P--,P<-1&&(P=O.length-1),Y()):(a=N)?(M&&(M.style.display=""),S=a,R||W(),Q=a):(M&&(M.style.display="none"),U(!1),X(),Q="",T=!0)},!1);K.addEventListener("click",V,!1);M.addEventListener("click",function(){J.value="";M.style.display="none";U(!1)},!1);I.addEventListener("click",function(){J.focus()},!1);window.hS=function(a){if(!T){X();a[1].length===0&&U(!1);for(var b=0;b<a[1].length;b++){var c=a[1][b][0],d=document.createElement("div");aa(d,ba(c));d.addEventListener("mousedown",function(e){e.preventDefault();return!1},!1);c=c.replace(/<\/?b>/g,"");d.addEventListener("click",function(e){return function(){P=e;V();Y();X();H.submit()}}(b),!1);d.addEventListener("mouseover",function(e){return function(){P!==e&&(P=e,Y())}}(b),!1);L.appendChild(d);U(!0);O.push(c)}}};}).call(this);})();(function(){function b(a){for(a=a.target||a.srcElement;a&&a.nodeName!=="A";)a=a.parentElement;a&&(a.href||"").match(/\/search.*[?&]tbm=isch/)&&(a.href+="&biw="+document.documentElement.clientWidth,a.href+="&bih="+document.documentElement.clientHeight)}document.addEventListener("click",b,!1);document.addEventListener("touchStart",b,!1);}).call(this);
|
921 |
+
</script>
|
922 |
+
</div>
|
923 |
+
<!-- cctlcm 5 cctlcm -->
|
924 |
+
<textarea class="csi" name="csi" style="display:none"></textarea>
|
925 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
926 |
+
(function(){var e='jmTxZrq_Hpac0-kPyvDOwQk';var sn='web';var timl=false;(function(){function C(a){if(!a||D(a))return 0;if(!a.getBoundingClientRect)return 1;var c=function(b){return b.getBoundingClientRect()};return E(a,c)?0:K(a,c)}function E(a,c){var b;a:{for(b=a;b&&b!==null;b=b.parentElement)if(b.style.overflow==="hidden"||b.tagName==="G-EXPANDABLE-CONTENT"&&getComputedStyle(b).getPropertyValue("overflow")==="hidden")break a;b=null}if(!b)return!1;a=c(a);c=c(b);return a.bottom<c.top||a.top>=c.bottom||a.right<c.left||a.left>=c.right}
|
927 |
+
function D(a){return a.style.display==="none"?!0:document.defaultView&&document.defaultView.getComputedStyle?(a=document.defaultView.getComputedStyle(a),!!a&&(a.visibility==="hidden"||a.height==="0px"&&a.width==="0px")):!1}
|
928 |
+
function K(a,c){var b=c(a);a=b.left+window.pageXOffset;c=b.top+window.pageYOffset;var d=b.width;b=b.height;var f=0;if(b<=0&&d<=0)return f;var q=window.innerHeight||document.documentElement.clientHeight;c+b<0?f=2:c>=q&&(f=4);if(a+d<0||a>=(window.innerWidth||document.documentElement.clientWidth))f|=8;f||(f=1,c+b>q&&(f|=4));return f};var L=e,M=sn,N=typeof de==="undefined"?!0:de!==!1,O=[];function P(a,c,b){a="/gen_204?atyp=csi&s="+M+"&t="+a+("&lite=1&ei="+L+"&conn="+(window.navigator&&window.navigator.connection?window.navigator.connection.type:-1)+c);c="&rt=";for(var d in b)a+=""+c+d+"."+b[d],c=",";return a}function Q(a){a={prt:a};window.wsrt&&(a.wsrt=window.wsrt);return a}function R(a){window.ping?window.ping(a):(new Image).src=a}
|
929 |
+
(function(){for(var a=(new Date).getTime()-window.start,c=Q(a),b=0,d=0,f=0,q=document.getElementsByTagName("img"),r=N?"&biw="+window.innerWidth+"&bih="+window.innerHeight:"",F=function(){r+="&ima="+f;c.aft=b;R(P("aft",r,c))},y=0,S=function(g,t,u){var n=g.src;g.onload=function(){u&&n&&n===g.src||(d=(new Date).getTime()-window.start,t&&++y===f&&(b=d,F()),g.onload=null)}},T=0,h=void 0;h=q[T++];){var v=C(h),p=!!(v&1);p&&++f;var l=h.hasAttribute("data-ilite"),w=h.hasAttribute("data-deferred"),G=h.hasAttribute("data-src")||
|
930 |
+
h.hasAttribute("data-lzysrc"),z=!w&&!l&&G;O.push([v,w||l,z,h.id,l&&G]);l=(v=h.complete&&!w&&!(p&&z))&&Number(h.getAttribute("data-iml"))||0;v&&l?(p&&++y,l&&(h=l-window.start,p&&(b=Math.max(b,h)),d=Math.max(d,h))):S(h,p,w||z)}b||(b=a);d||(d=b);y===f&&F();google.rglh&&google.rglh();window.addEventListener("load",function(){window.setTimeout(function(){c.ol=(new Date).getTime()-window.start;timl&&(c.iml=d);var g=window.performance&&window.performance.timing;g&&(c.rqst=g.responseEnd-g.requestStart,c.rspt=
|
931 |
+
g.responseEnd-g.responseStart);for(var t=g=0,u=0,n=0,H=0,I=0,U=0,k;k=O[U++];){var m=k[0],A=k[1],J=k[2],x=k[3];k=k[4]||google.ldi&&x&&google.ldi[x];x=m==0;var V=m&8,B=m&1;m=!B&&m&4;B&&(A&&!k||++u,J&&++I);A&&(B&&k&&++g,m&&!k&&++t);x||V?J||++H:A||++n}r+="&ime="+u+"&imel="+I+("&imex="+n+"&imeh="+H)+("&imea="+g+"&imeb="+t);R(P("all",r,c))},0)},!1)})();}).call(this);})();(function(){window.google=window.google||{};window.google.ishk=[];function a(){return window.scrollY+window.document.documentElement.clientHeight>=Math.max(document.body.scrollHeight,document.body.offsetHeight)}function b(){a()&&window.google.ishk.length===0&&(window.google.bs=!0,window.removeEventListener("scroll",b))}a()?window.google.bs=!0:(window.google.bs=!1,window.addEventListener("scroll",b));}).call(this);
|
932 |
+
</script>
|
933 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
934 |
+
window._setImagesSrc=function(k,e,n){function l(b){b.onerror=function(){b.style.display="none"};b.setAttribute("data-deferred","2");e.substring(0,5)!=="data:"&&b.setAttribute("data-defe","1");b.src=e;var g;((g=google.c)==null?0:g.di)&&b.decode()}function m(b,g){google.iir=google.iir||{};google.iir[b]=g}for(var d={},h=0;h<k.length;d={g:void 0},++h){var f=k[h];d.g=document.getElementById(f)||document.querySelector('img[data-iid="'+f+'"]');if(d.g){var c=void 0,a=void 0;if((a=google.c)==null?0:a.setup)c=
|
935 |
+
google.c.setup(d.g);c=c!=null&&c&1;a=void 0;((a=google.c)==null?void 0:a.doiu)!==1||c?(a=void 0,((a=google.c)==null?void 0:a.doiu)!==2||n||c?(a=void 0,((a=google.c)==null?void 0:a.doiu)!==3||c?l(d.g):(google.doid=google.doid||{},google.doid[f]=e)):m(f,e)):google.caft(function(b){return function(){l(b.g)}}(d))}else m(f,e)}};typeof window.google==="undefined"&&(window.google={});
|
936 |
+
</script>
|
937 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
938 |
+
(function(){var s='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABAUlEQVR4AWMYesChoYElLjkzPj4lY3d8csZjIL4MxPNjUzPcSTYsISFLAqj5NBD/h+LPQPwbiT87NCuLh2gDgRr2QzXuT0jNMoBYksARn5zuHJ+UcR0kB6RXE2VYXHJGOlTDZmzyIJcB5e+D1CSkZDgQNBAaZv+jU1JkcKpJygiGeZ0I76a/Byq8jU9NZFqaCNTA48SE33/iDcw8TIyBt0GKQTFN0Msp6f2EIyUpo57YSIlLSrMhIg0WCIBcCfXSdlzJBsheTHQ6jEnOUgEFOLaEDbMIlhZBOYrorAdJk+nroVnvPsSgdGdoOF7HZyhZ2XPoGQoqjbCpIbt0AiejIQMArVLI7k/DXFkAAAAASUVORK5CYII\x3d';var i=['dimg_1','dimg_3','dimg_5','dimg_7','dimg_9','dimg_11','dimg_13','dimg_15'];_setImagesSrc(i,s);})();
|
939 |
+
</script>
|
940 |
+
<script nonce="BaBBq4_VTqQ-VTCp2nwVhw">
|
941 |
+
(function(){var e='jmTxZrq_Hpac0-kPyvDOwQk';(function(){var a=e;if((window.performance&&window.performance.navigation&&window.performance.navigation.type)===2){var b="",c=[],d=window.google!==void 0&&window.google.kOPI!==void 0&&window.google.kOPI!==0?window.google.kOPI:null;d!=null&&c.push(["opi",d.toString()]);for(var f=0;f<c.length;f++){if(f===0||f>0)b+="&";b+=c[f][0]+"="+c[f][1]}window.ping("/gen_204?ct=backbutton&ei="+a+b)};}).call(this);})();(function(){function b(){for(var a=google.drc.shift();a;)a(),a=google.drc.shift()};google.drc=[function(){google.tick&&google.tick("load","dcl")}];google.dclc=function(a){google.drc.length?google.drc.push(a):a()};window.addEventListener?(document.addEventListener("DOMContentLoaded",b,!1),window.addEventListener("load",b,!1)):window.attachEvent&&window.attachEvent("onload",b);}).call(this);(function(){var b=function(a){var c=0;return function(){return c<a.length?{done:!1,value:a[c++]}:{done:!0}}};
|
942 |
+
var e=this||self;var g,h;a:{for(var k=["CLOSURE_FLAGS"],l=e,n=0;n<k.length;n++)if(l=l[k[n]],l==null){h=null;break a}h=l}var p=h&&h[610401301];g=p!=null?p:!1;var q,r=e.navigator;q=r?r.userAgentData||null:null;function t(a){return g?q?q.brands.some(function(c){return(c=c.brand)&&c.indexOf(a)!=-1}):!1:!1}function u(a){var c;a:{if(c=e.navigator)if(c=c.userAgent)break a;c=""}return c.indexOf(a)!=-1};function v(){return g?!!q&&q.brands.length>0:!1}function w(){return u("Safari")&&!(x()||(v()?0:u("Coast"))||(v()?0:u("Opera"))||(v()?0:u("Edge"))||(v()?t("Microsoft Edge"):u("Edg/"))||(v()?t("Opera"):u("OPR"))||u("Firefox")||u("FxiOS")||u("Silk")||u("Android"))}function x(){return v()?t("Chromium"):(u("Chrome")||u("CriOS"))&&!(v()?0:u("Edge"))||u("Silk")}function y(){return u("Android")&&!(x()||u("Firefox")||u("FxiOS")||(v()?0:u("Opera"))||u("Silk"))};var z=v()?!1:u("Trident")||u("MSIE");y();x();w();var A=!z&&!w(),D=function(a){if(/-[a-z]/.test("ved"))return null;if(A&&a.dataset){if(y()&&!("ved"in a.dataset))return null;a=a.dataset.ved;return a===void 0?null:a}return a.getAttribute("data-"+"ved".replace(/([A-Z])/g,"-$1").toLowerCase())};var E=[],F=null;function G(a){a=a.target;var c=performance.now(),f=[],H=f.concat,d=E;if(!(d instanceof Array)){var m=typeof Symbol!="undefined"&&Symbol.iterator&&d[Symbol.iterator];if(m)d=m.call(d);else if(typeof d.length=="number")d={next:b(d)};else throw Error("b`"+String(d));for(var B=[];!(m=d.next()).done;)B.push(m.value);d=B}E=H.call(f,d,[c]);if(a&&a instanceof HTMLElement)if(a===F){if(c=E.length>=4)c=(E[E.length-1]-E[E.length-4])/1E3<5;if(c){c=google.getEI(a);a.hasAttribute("data-ved")?f=a?D(a)||"":"":f=(f=
|
943 |
+
a.closest("[data-ved]"))?D(f)||"":"";f=f||"";if(a.hasAttribute("jsname"))a=a.getAttribute("jsname");else{var C;a=(C=a.closest("[jsname]"))==null?void 0:C.getAttribute("jsname")}google.log("rcm","&ei="+c+"&tgtved="+f+"&jsname="+(a||""))}}else F=a,E=[c]}window.document.addEventListener("DOMContentLoaded",function(){document.body.addEventListener("click",G)});}).call(this);var w=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}};window.jsl=window.jsl||{};window.jsl.dh=function(a,b,m){try{var h=document.getElementById(a),e;if(!h&&((e=google.stvsc)==null?0:e.dds)){e=[];var f=e.concat,c=google.stvsc.dds;if(c instanceof Array)var n=c;else{var p=typeof Symbol!="undefined"&&Symbol.iterator&&c[Symbol.iterator];if(p)var g=p.call(c);else if(typeof c.length=="number")g={next:w(c)};else throw Error(String(c)+" is not an iterable or ArrayLike");c=g;var q;for(g=[];!(q=c.next()).done;)g.push(q.value);n=g}var r=f.call(e,n);for(f=0;f<r.length&&!(h=r[f].getElementById(a));f++);}if(h)h.innerHTML=b,m&&m();else{var d={id:a,script:String(!!m),milestone:String(google.jslm||0)};google.jsla&&(d.async=google.jsla);var t=a.indexOf("_"),k=t>0?a.substring(0,t):"",u=document.createElement("div");u.innerHTML=b;var l=u.children[0];if(l&&(d.tag=l.tagName,d["class"]=String(l.className||null),d.name=String(l.getAttribute("jsname")),k)){a=[];var v=document.querySelectorAll('[id^="'+k+'_"]');for(b=0;b<v.length;++b)a.push(v[b].id);d.ids=a.join(",")}google.ml(Error(k?"Missing ID with prefix "+
|
944 |
+
k:"Missing ID"),!1,d)}}catch(x){google.ml(x,!0,{"jsl.dh":!0})}};(function(){var x=false;google.jslm=x?2:1;})();(function(){(function(){google.csct={};google.csct.ps='AOvVaw3kq13t4CWnlRLUul3Ud4sG\x26ust\x3d1727182350535643';})();})();(function(){(function(){google.csct.rd=true;})();})();(function(){window.xp=function(b){function f(k,g,h){return"xp"+(g=="x"?"c":"x")+h}for(var c=/\bxp(x|c)(\d?)\b/,a=b;a;){var e=a.className,d=e.match(c);if(d){d=d[1]=="c";a.className=e.replace(c,f);b&&b.setAttribute("aria-expanded",d);if(d)for(b=a.getElementsByTagName("img"),c=0;c<b.length;++c)if(a=b[c],e=a.getAttribute("data-ll"))a.src=e,a.removeAttribute("data-ll");break}a=a.parentElement}};})();(function(){(function(){window.logVe=function(a){a&&a.attributes["data-ved"]&&window.ping("/gen_204?ved="+a.attributes["data-ved"].value)};}).call(this);})();(function(){(function(){var id='tsuid_1';var lve=true;(function(){
|
945 |
+
var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
|
946 |
+
a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl=window.jsl||{};window.jsl.dh=window.jsl.dh||function(i,c,d){try{var e=document.getElementById(i);if(e){e.innerHTML=c;if(d){d();}}else{if(window.jsl.el){window.jsl.el(new Error('Missing ID.'),{'id':i});}}}catch(e){if(window.jsl.el){window.jsl.el(new Error('jsl.dh'));}}};})();(function(){window.jsl.dh('accdef_1','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22PqksIc nRlVm\x22\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3eThe dangers from such weapons arise from their very existence. Although nuclear weapons have only been used twice in warfare\u2014\x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3ein the bombings of Hiroshima and Nagasaki in 1945\x3c/span\x3e\u2014about 13,400 reportedly remain in our world today and there have been over 2,000 nuclear tests conducted to date.\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22x54gtf\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://disarmament.unoda.org/wmd/nuclear/\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQBg\x26amp;usg\x3dAOvVaw2cMGKHv5wixPUa8E5Ny0Dt\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQBg\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe vvjwJb AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3eNuclear Weapons - UNODA\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe UPmit AP7Wnd\x22\x3edisarmament.unoda.org \u203a wmd \u203a nuclear\x3c/div\x3e\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d57cb6114f464605f\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3djmTxZrq_Hpac0-kPyvDOwQk\x26amp;q\x3dWhen+was+the+last+time+an+atomic+bomb+was+used?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEAc\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEAc\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();(function(){(function(){var id='tsuid_2';var lve=true;(function(){
|
947 |
+
var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
|
948 |
+
a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl.dh('accdef_3','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22PqksIc nRlVm\x22\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3eThe most recent confirmed nuclear test occurred in \x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3eSeptember 2017\x3c/span\x3e in North Korea.\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22x54gtf\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://en.wikipedia.org/wiki/Nuclear_weapons_testing\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQDQ\x26amp;usg\x3dAOvVaw1P9zXePCpT1j5CnHbMa8Mu\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQDQ\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe vvjwJb AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3eNuclear weapons testing - Wikipedia\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe UPmit AP7Wnd\x22\x3een.wikipedia.org \u203a wiki \u203a Nuclear_weapons_testing\x3c/div\x3e\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d57cb6114f464605f\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3djmTxZrq_Hpac0-kPyvDOwQk\x26amp;q\x3dWhat+was+the+most+recent+nuclear+bomb+used?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEA4\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEA4\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();(function(){(function(){var id='tsuid_3';var lve=true;(function(){
|
949 |
+
var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
|
950 |
+
a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl.dh('accdef_5','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22PqksIc nRlVm\x22\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3eToday, \x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3ethe United States deploys 1,419 and Russia deploys 1,549 strategic warheads on several hundred bombers and missiles\x3c/span\x3e, and are modernizing their nuclear delivery systems. Warheads are counted using the provisions of the New START agreement, which was extended for 5 years in January 2021.\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22x54gtf\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://www.armscontrol.org/factsheets/nuclear-weapons-who-has-what-glance\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQFA\x26amp;usg\x3dAOvVaw1HnfthCBFyqDAARQfr58KV\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQFA\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe vvjwJb AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3eNuclear Weapons: Who Has What at a Glance\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe UPmit AP7Wnd\x22\x3ewww.armscontrol.org \u203a factsheets \u203a nuclear-weapons-who-has-what-glance\x3c/div\x3e\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d57cb6114f464605f\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3djmTxZrq_Hpac0-kPyvDOwQk\x26amp;q\x3dIs+there+an+atomic+bomb+today?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEBU\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEBU\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();(function(){(function(){var id='tsuid_4';var lve=true;(function(){
|
951 |
+
var e=typeof navigator!=="undefined"&&!/Opera/.test(navigator.userAgent)&&/WebKit/.test(navigator.userAgent),f={A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},g={Enter:13," ":32},h={A:13,BUTTON:0,CHECKBOX:32,COMBOBOX:13,FILE:0,GRIDCELL:13,LINK:13,LISTBOX:13,MENU:0,MENUBAR:0,MENUITEM:0,MENUITEMCHECKBOX:0,MENUITEMRADIO:0,OPTION:0,RADIO:32,RADIOGROUP:32,RESET:0,SUBMIT:0,SWITCH:32,TAB:0,TREE:13,TREEITEM:13},k={CHECKBOX:!0,FILE:!0,OPTION:!0,RADIO:!0},l={COLOR:!0,DATE:!0,DATETIME:!0,"DATETIME-LOCAL":!0,EMAIL:!0,MONTH:!0,NUMBER:!0,PASSWORD:!0,RANGE:!0,SEARCH:!0,TEL:!0,TEXT:!0,TEXTAREA:!0,TIME:!0,URL:!0,WEEK:!0};document.getElementById(id).onclick=function(){window.xp(this);lve&&window.logVe(this)};document.getElementById(id).onkeydown=function(d){var c=d.which||d.keyCode;!c&&d.key&&(c=g[d.key]);e&&c===3&&(c=13);if(c!==13&&c!==32)c=!1;else{var a=d.target;!a.getAttribute&&a.parentNode&&(a=a.parentNode);var b;if(!(b=d.type!=="keydown")){if(b="getAttribute"in a)b=!((a.getAttribute("type")||a.tagName).toUpperCase()in l);b=!(b&&!(a.tagName.toUpperCase()==="BUTTON"||a.type&&a.type.toUpperCase()==="FILE")&&!a.isContentEditable)}(b=b||d.ctrlKey||d.shiftKey||d.altKey||d.metaKey||(a.getAttribute("type")||
|
952 |
+
a.tagName).toUpperCase()in k&&c===32)||((b=a.tagName in f)||(b=a.getAttributeNode("tabindex"),b=b!=null&&b.specified),b=!(b&&!a.disabled));if(b)c=!1;else{b=(a.getAttribute("role")||a.type||a.tagName).toUpperCase();var m=!(b in h)&&c===13;a=a.tagName.toUpperCase()!=="INPUT"||!!a.type;c=(h[b]%c===0||m)&&a}}c&&(d.preventDefault(),window.xp(this),lve&&window.logVe(this))};}).call(this);})();})();(function(){window.jsl.dh('accdef_7','\x3cdiv\x3e\x3cdiv style\x3d\x22padding-bottom:12px;padding-top:0px\x22 class\x3d\x22hwc kCrYT\x22\x3e\x3cdiv class\x3d\x22yStFkb\x22\x3e\x3cdiv class\x3d\x22Gx5Zad xpd EtOod pkphOe\x22\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3cdiv class\x3d\x22PqksIc nRlVm\x22\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22BNeawe\x22\x3e\x3cspan class\x3d\x22FCUp0c rQMQod\x22\x3eThe radiation in Hiroshima and Nagasaki today is on a par with the extremely low levels of background radiation (natural radioactivity) present anywhere on Earth\x3c/span\x3e. It has no effect on human bodies.\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv class\x3d\x22x54gtf\x22\x3e\x3c/div\x3e\x3cdiv class\x3d\x22kCrYT\x22\x3e\x3ca href\x3d\x22/url?q\x3dhttps://www.city.hiroshima.lg.jp/site/english/9809.html\x26amp;sa\x3dU\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQGw\x26amp;usg\x3dAOvVaw1LbNHAdp2_guVpWELb3m-G\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQFnoECAAQGw\x22\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe vvjwJb AP7Wnd\x22\x3e\x3cspan class\x3d\x22rQMQod Xb5VRe\x22\x3eQ. Is there still radiation in Hiroshima and Nagasaki? - \u5e83\u5cf6\u5e02\x3c/span\x3e\x3c/div\x3e\x3c/span\x3e\x3cspan\x3e\x3cdiv class\x3d\x22BNeawe UPmit AP7Wnd\x22\x3ewww.city.hiroshima.lg.jp \u203a site \u203a english\x3c/div\x3e\x3c/span\x3e\x3c/a\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3cdiv\x3e\x3cdiv class\x3d\x22P1NWSe\x22\x3e\x3cdiv class\x3d\x22wOMIed nkPlDb\x22\x3e\x3cspan class\x3d\x22JhFlyf VQFmSd\x22\x3e\x3ca class\x3d\x22f4J0H\x22 href\x3d\x22https://www.google.com/search?sca_esv\x3d57cb6114f464605f\x26amp;sca_upv\x3d1\x26amp;ie\x3dUTF-8\x26amp;ei\x3djmTxZrq_Hpac0-kPyvDOwQk\x26amp;q\x3dIs+Hiroshima+still+radioactive?\x26amp;sa\x3dX\x26amp;ved\x3d2ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEBw\x22 data-ved\x3d\x222ahUKEwi6vv3kjdmIAxUWzjQHHUq4M5gQzmd6BAgAEBw\x22\x3eMore results\x3c/a\x3e\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e');})();if (!google.stvsc){google.drty && google.drty(undefined,true);}
|
953 |
+
</script>
|
954 |
+
</body>
|
955 |
+
</html>
|
tools/tools.py
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
import tools.webScraper as WS
|
3 |
+
import time
|
4 |
+
|
5 |
+
from dotenv import load_dotenv
|
6 |
+
load_dotenv()
|
7 |
+
|
8 |
+
|
9 |
+
def getGoogleSearchResults(query: str):
|
10 |
+
startTime = time.time()
|
11 |
+
results = WS.scrapeGoogleSearch(query)
|
12 |
+
timeTaken = time.time() - startTime
|
13 |
+
return {
|
14 |
+
"response": results,
|
15 |
+
"display": {
|
16 |
+
"text": f"Searched Google [{round(timeTaken * 1000)} ms]",
|
17 |
+
"icon": "icons/google_search.png",
|
18 |
+
}
|
19 |
+
}
|
20 |
+
|
21 |
+
|
22 |
+
toolsInfo = {
|
23 |
+
"getGoogleSearchResults": {
|
24 |
+
"func": getGoogleSearchResults,
|
25 |
+
"schema": {
|
26 |
+
"type": "function",
|
27 |
+
"function": {
|
28 |
+
"name": "getGoogleSearchResults",
|
29 |
+
"description": "Get google search results for a given query",
|
30 |
+
"parameters": {
|
31 |
+
"type": "object",
|
32 |
+
"properties": {
|
33 |
+
"query": {
|
34 |
+
"type": "string",
|
35 |
+
"description": "Query to search for"
|
36 |
+
}
|
37 |
+
},
|
38 |
+
"required": ["query"]
|
39 |
+
}
|
40 |
+
}
|
41 |
+
},
|
42 |
+
},
|
43 |
+
|
44 |
+
}
|
tools/webScraper.py
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from urllib.parse import parse_qs, urlparse
|
2 |
+
from bs4 import BeautifulSoup
|
3 |
+
import requests
|
4 |
+
|
5 |
+
|
6 |
+
def scrapeGoogleSearch(query):
|
7 |
+
finalResponse = []
|
8 |
+
|
9 |
+
searchUrl = f"https://www.google.com/search?q={query}"
|
10 |
+
response = requests.get(searchUrl)
|
11 |
+
if response.status_code == 200:
|
12 |
+
soup = BeautifulSoup(response.text, 'html.parser')
|
13 |
+
with open('soup_dump.html', 'w', encoding='utf-8') as file:
|
14 |
+
file.write(soup.prettify())
|
15 |
+
|
16 |
+
results = soup.find('body')
|
17 |
+
mainDiv = soup.find('div', attrs={'id': 'main'})
|
18 |
+
answerDiv = (
|
19 |
+
mainDiv.select_one('div.PqksIc')
|
20 |
+
or mainDiv.select_one('div.BNeawe.iBp4i')
|
21 |
+
)
|
22 |
+
if answerDiv:
|
23 |
+
citationDateDiv = answerDiv.select_one('sub.gMUaMb.r0bn4c.rQMQod')
|
24 |
+
citationDate = citationDateDiv.text if citationDateDiv else ""
|
25 |
+
answerText = answerDiv.text.replace(citationDate, '').strip()
|
26 |
+
citationText = f"Citation Date: {citationDate}" if citationDate else ""
|
27 |
+
finalResponse.append(f"Verified Answer:\n====\n{answerText}\n{citationText}\n====\n\n")
|
28 |
+
|
29 |
+
results = mainDiv.select('div.egMi0.kCrYT')
|
30 |
+
resultsDesc = mainDiv.select('div.BNeawe.s3v9rd.AP7Wnd .BNeawe.s3v9rd.AP7Wnd:last-child')
|
31 |
+
|
32 |
+
if results:
|
33 |
+
finalResponse.append("Search Results:\n====\n")
|
34 |
+
|
35 |
+
for (i, result) in enumerate(results[:10]):
|
36 |
+
title = result.find('h3').text
|
37 |
+
link = result.find('a')['href']
|
38 |
+
parsedUrl = urlparse(link)
|
39 |
+
urlParams = parse_qs(parsedUrl.query)
|
40 |
+
link = urlParams.get('q', [None])[0]
|
41 |
+
desc = resultsDesc[i].text
|
42 |
+
finalResponse.append(f"Title: {title}")
|
43 |
+
finalResponse.append(f"Description: {desc}")
|
44 |
+
finalResponse.append(f"Link: {link}\n")
|
45 |
+
else:
|
46 |
+
print("Failed to retrieve search results.")
|
47 |
+
|
48 |
+
return "\n".join(finalResponse)
|
utils.py
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import datetime as DT
|
3 |
+
import pytz
|
4 |
+
|
5 |
+
|
6 |
+
def applyCommonStyles():
|
7 |
+
st.markdown(
|
8 |
+
"""
|
9 |
+
<head>
|
10 |
+
<link href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
|
11 |
+
</head>
|
12 |
+
|
13 |
+
<style>
|
14 |
+
h1 {
|
15 |
+
font-family: 'Raleway';
|
16 |
+
}
|
17 |
+
|
18 |
+
@keyframes blinker {
|
19 |
+
0% {
|
20 |
+
opacity: 1;
|
21 |
+
}
|
22 |
+
50% {
|
23 |
+
opacity: 0.2;
|
24 |
+
}
|
25 |
+
100% {
|
26 |
+
opacity: 1;
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
.blinking {
|
31 |
+
animation: blinker 3s ease-out infinite;
|
32 |
+
}
|
33 |
+
|
34 |
+
.code {
|
35 |
+
color: green;
|
36 |
+
border-radius: 3px;
|
37 |
+
padding: 2px 4px; /* Padding around the text */
|
38 |
+
font-family: 'Courier New', Courier, monospace; /* Monospace font */
|
39 |
+
}
|
40 |
+
|
41 |
+
.large {
|
42 |
+
font-size: 15px;
|
43 |
+
}
|
44 |
+
|
45 |
+
.bold {
|
46 |
+
font-weight: bold;
|
47 |
+
}
|
48 |
+
|
49 |
+
div[aria-label="dialog"] {
|
50 |
+
width: 80vw;
|
51 |
+
height: 620px;
|
52 |
+
}
|
53 |
+
|
54 |
+
</style>
|
55 |
+
""",
|
56 |
+
unsafe_allow_html=True
|
57 |
+
)
|
58 |
+
|
59 |
+
|
60 |
+
def __nowInIST() -> DT.datetime:
|
61 |
+
return DT.datetime.now(pytz.timezone("Asia/Kolkata"))
|
62 |
+
|
63 |
+
|
64 |
+
def pprint(log: str):
|
65 |
+
now = __nowInIST()
|
66 |
+
now = now.strftime("%Y-%m-%d %H:%M:%S")
|
67 |
+
print(f"[{now}] [{st.session_state.ipAddress}] {log}")
|